亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

代碼混淆方法、代碼運行方法及裝置與流程

文檔序號:11583326閱讀:347來源:國知局
代碼混淆方法、代碼運行方法及裝置與流程

本申請涉及計算機領(lǐng)域,具體而言,涉及一種代碼混淆方法、代碼運行方法及裝置。



背景技術(shù):

java層(java是一種可以撰寫跨平臺應(yīng)用程序的面向?qū)ο蟮某绦蛟O(shè)計語言,一般,java具備由數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層和界面層所組成的三層架構(gòu))的代碼混淆是保護(hù)代碼邏輯不被黑客輕易破解的有效手段之一,其方法主要是在代碼編譯以后利用外部工具將代碼中的類名,方法名和成員變量名等修改成比較難以理解的名稱。目前,java層代碼混淆主要依靠proguard(一款用于壓縮、優(yōu)化和混淆java代碼的工具),但proguard在使用過程中至少存在以下三方面的缺陷:

第一、開發(fā)人員在使用proguard進(jìn)行java代碼的混淆時,需要熟悉java代碼的業(yè)務(wù)邏輯并預(yù)先知曉哪些類、方法、成員變量可混淆或不可混淆,因此,proguard對開發(fā)人員的要求較高。

第二、proguard工具無法混淆用戶在so文件(android系統(tǒng)中的動態(tài)鏈接庫文件)中需要加載的類,這些類本身不在java層編譯的jar包(可包含類的文件包)體現(xiàn),若未經(jīng)特殊配置,則proguard會默認(rèn)將其混淆,進(jìn)而導(dǎo)致應(yīng)用程序錯誤。

第三、proguard工具混淆jar包不能很好的混淆osgi(openservicegatewayinitiative,面向java的動態(tài)模型系統(tǒng))框架的客戶端程序,由于osgi框架的客戶端程序一般都是基于類名來查找相應(yīng)的bundle(一中可執(zhí)行文件,用于在android系統(tǒng)中的activity之間傳遞數(shù)據(jù))的類加載器的,所以使用proguard工具只能將這些類保持原名或者至少保持類的包名不變,而由于osgi框架的設(shè)計導(dǎo)致其框架代碼絕大多數(shù)的類都是通過查找相應(yīng)bundle的類加載器來加載類,因此proguard工具無法顯著提高其混淆率。

綜上,現(xiàn)有技術(shù)中主要存在應(yīng)用程序的java層代碼混淆率較低的問題。

針對上述的問題,目前尚未提出有效的解決方案。



技術(shù)實現(xiàn)要素:

本申請實施例提供了一種代碼混淆方法、代碼運行方法及裝置,以至少解決現(xiàn)有技術(shù)中應(yīng)用程序的java層代碼混淆率較低的技術(shù)問題。

根據(jù)本申請實施例的一個方面,提供了一種代碼運行方法,包括:通過預(yù)設(shè)的靜態(tài)替換操作,獲取待調(diào)用的對象名,其中,上述靜態(tài)替換操作為預(yù)先在目標(biāo)應(yīng)用程序的第一目標(biāo)文件中配置的函數(shù),上述第一目標(biāo)文件用于記錄上述目標(biāo)應(yīng)用程序的安裝信息;判斷上述待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,其中,上述混淆表為根據(jù)上述第一目標(biāo)文件以及第二目標(biāo)文件生成的表,上述混淆表用于指示對象名與混淆名之間的對應(yīng)關(guān)系,上述第二目標(biāo)文件用于記錄上述目標(biāo)應(yīng)用程序的聲明信息;若上述待調(diào)用的對象名包含在上述混淆表中,從上述混淆表中查找并輸出與上述待調(diào)用的對象名對應(yīng)的混淆名。

根據(jù)本申請實施例的一個方面,還提供了一種代碼混淆方法,包括:從目標(biāo)應(yīng)用程序中獲取第一目標(biāo)文件及第二目標(biāo)文件;解析上述第一目標(biāo)文件及上述第二目標(biāo)文件,按照預(yù)設(shè)規(guī)則生成上述混淆表,其中,上述混淆表中不包含從上述第二目標(biāo)文件中解析出的對象名;對上述第一目標(biāo)文件執(zhí)行靜態(tài)替換操作;按照上述混淆表,將上述第一目標(biāo)文件的對象名混淆為與上述對象名對應(yīng)的混淆名;將混淆后的上述第一目標(biāo)文件存入上述目標(biāo)應(yīng)用程序。

根據(jù)本申請實施例的另一方面,又提供了一種代碼運行裝置,包括:第一獲取單元,用于通過預(yù)設(shè)的靜態(tài)替換操作,獲取待調(diào)用的對象名,其中,上述靜態(tài)替換操作為預(yù)先在目標(biāo)應(yīng)用程序的第一目標(biāo)文件中配置的函數(shù),上述第一目標(biāo)文件用于記錄上述目標(biāo)應(yīng)用程序的安裝信息;判斷單元,用于判斷上述待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,其中,上述混淆表為根據(jù)上述第一目標(biāo)文件以及第二目標(biāo)文件生成的表,上述混淆表用于指示對象名與混淆名之間的對應(yīng)關(guān)系,上述第二目標(biāo)文件用于記錄上述目標(biāo)應(yīng)用程序的聲明信息;第一處理單元,用于若上述待調(diào)用的對象名包含在上述混淆表中,從上述混淆表中查找并輸出與上述待調(diào)用的對象名對應(yīng)的混淆名。

根據(jù)本申請實施例的另一方面,又提供了一種代碼混淆裝置,包括:第二獲取單元,用于從目標(biāo)應(yīng)用程序中獲取第一目標(biāo)文件及第二目標(biāo)文件;生成單元,用于解析上述第一目標(biāo)文件及上述第二目標(biāo)文件,按照預(yù)設(shè)規(guī)則生成上述混淆表,其中,上述混淆表中不包含從上述第二目標(biāo)文件中解析出的對象名;第二處理單元,用于對上述第一目標(biāo)文件執(zhí)行靜態(tài)替換操作;第三處理單元,用于按照上述混淆表,將上述第一目標(biāo)文件的對象名混淆為與上述對象名對應(yīng)的混淆名;存儲單元,用于將混淆后的上述第一目標(biāo)文件存入上述目標(biāo)應(yīng)用程序。

在本申請實施例中,采用通過預(yù)設(shè)的靜態(tài)替換操作,獲取待調(diào)用的對象名,其中,靜態(tài)替換操作為預(yù)先在目標(biāo)應(yīng)用程序的第一目標(biāo)文件中配置的函數(shù),第一目標(biāo)文件用于記錄目標(biāo)應(yīng)用程序的安裝信息;判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,其中,混淆表為根據(jù)第一目標(biāo)文件以及第二目標(biāo)文件生成的表,混淆表用于指示對象名與混淆名之間的對應(yīng)關(guān)系,第二目標(biāo)文件用于記錄目標(biāo)應(yīng)用程序的聲明信息;若待調(diào)用的對象名包含在混淆表中,從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名的方式,通過預(yù)設(shè)的靜態(tài)替換操作獲取待調(diào)用的對象名,以及判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,達(dá)到了在判斷為是的情況下從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名的目的,從而實現(xiàn)了提高java層代碼混淆率、降低開發(fā)人員的代碼混淆配置難度、擴充混淆功能以及增強代碼破解難度的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中應(yīng)用程序的java層代碼混淆率較低的技術(shù)問題。

附圖說明

此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:

圖1是根據(jù)本申請實施例的一種代碼混淆方法或代碼運行方法的計算機終端的硬件結(jié)構(gòu)框圖;

圖2是根據(jù)本申請實施例的另一種可選的代碼運行方法的流程示意圖;

圖3是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖;

圖4是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖;

圖5是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖;

圖6是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖;

圖7是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖;

圖8是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖;

圖9是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖;

圖10是根據(jù)本申請實施例的一種可選的代碼運行裝置的結(jié)構(gòu)示意圖;

圖11是根據(jù)本申請實施例的另一種可選的代碼混淆裝置的結(jié)構(gòu)示意圖;

圖12是根據(jù)本申請實施例的又一種可選的代碼混淆裝置的結(jié)構(gòu)示意圖;

圖13是根據(jù)本申請實施例的又一種可選的代碼混淆裝置的結(jié)構(gòu)示意圖;

圖14是根據(jù)本申請實施例的又一種可選的代碼混淆裝置的結(jié)構(gòu)示意圖;

圖15是根據(jù)本申請實施例的又一種可選的代碼混淆裝置的結(jié)構(gòu)示意圖;

圖16是根據(jù)本申請實施例的又一種可選的代碼混淆裝置的結(jié)構(gòu)示意圖;

圖17是根據(jù)本申請實施例的又一種可選的代碼混淆裝置的結(jié)構(gòu)示意圖;

圖18是根據(jù)本申請實施例的一種計算機終端的結(jié)構(gòu)框圖。

具體實施方式

為了使本技術(shù)領(lǐng)域的人員更好地理解本申請方案,下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分的實施例,而不是全部的實施例。基于本申請中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應(yīng)當(dāng)屬于本申請保護(hù)的范圍。

需要說明的是,本申請的說明書和權(quán)利要求書及上述附圖中的術(shù)語“第一”、“第二”等是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本申請的實施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。

實施例1

根據(jù)本申請實施例,還提供了一種代碼運行方法的實施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。

本申請實施例一所提供的方法實施例可以在移動終端、計算機終端或者類似的運算裝置中執(zhí)行。以運行在計算機終端上為例,圖1是本申請實施例的一種代碼運行方法的計算機終端的硬件結(jié)構(gòu)框圖。如圖1所示,計算機終端10可以包括一個或多個(圖中僅示出一個)處理器102(處理器102可以包括但不限于微處理器mcu或可編程邏輯器件fpga等的處理裝置)、用于存儲數(shù)據(jù)的存儲器104、以及用于通信功能的傳輸 裝置106。本領(lǐng)域普通技術(shù)人員可以理解,圖1所示的結(jié)構(gòu)僅為示意,其并不對上述電子裝置的結(jié)構(gòu)造成限定。例如,計算機終端10還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。

存儲器104可用于存儲應(yīng)用軟件的軟件程序以及模塊,如本申請實施例中的代碼運行方法對應(yīng)的程序指令/模塊,處理器102通過運行存儲在存儲器104內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實現(xiàn)上述的代碼運行方法。存儲器104可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器104可進(jìn)一步包括相對于處理器102遠(yuǎn)程設(shè)置的存儲器,這些遠(yuǎn)程存儲器可以通過網(wǎng)絡(luò)連接至計算機終端10。上述網(wǎng)絡(luò)的實例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動通信網(wǎng)及其組合。

傳輸裝置106用于經(jīng)由一個網(wǎng)絡(luò)接收或者發(fā)送數(shù)據(jù)。上述的網(wǎng)絡(luò)具體實例可包括計算機終端10的通信供應(yīng)商提供的無線網(wǎng)絡(luò)。在一個實例中,傳輸裝置106包括一個網(wǎng)絡(luò)適配器(networkinterfacecontroller,nic),其可通過基站與其他網(wǎng)絡(luò)設(shè)備相連從而可與互聯(lián)網(wǎng)進(jìn)行通訊。在一個實例中,傳輸裝置106可以為射頻(radiofrequency,rf)模塊,其用于通過無線方式與互聯(lián)網(wǎng)進(jìn)行通訊。

在上述運行環(huán)境下,本申請?zhí)峁┝巳鐖D2所示的代碼運行方法。圖2是根據(jù)本申請實施例一的代碼運行方法的流程圖。

如圖2所示,該代碼運行方法可以包括如下實現(xiàn)步驟:

步驟s202,通過預(yù)設(shè)的靜態(tài)替換操作,獲取待調(diào)用的對象名,其中,靜態(tài)替換操作為預(yù)先在目標(biāo)應(yīng)用程序的第一目標(biāo)文件中配置的函數(shù),第一目標(biāo)文件用于記錄目標(biāo)應(yīng)用程序的安裝信息。

本申請上述步驟s202中,靜態(tài)替換操作可以為android系統(tǒng)中的java層靜態(tài)替換操作,具體地,可以通過在要混淆dex文件中插入或者修改相應(yīng)的調(diào)用指令的方式,進(jìn)行java層函數(shù)的攔截。其中,該第一目標(biāo)文件可以為dex文件(android系統(tǒng)中的可執(zhí)行文件),該靜態(tài)替換操作可以為so靜態(tài)替換操作。

步驟s204,判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,其中,混淆表為根據(jù)第一目標(biāo)文件以及第二目標(biāo)文件生成的表,混淆表用于指示對象名與混淆名之間的對應(yīng)關(guān)系,第二目標(biāo)文件用于記錄目標(biāo)應(yīng)用程序的聲明信息。

本申請上述步驟s204中,第一目標(biāo)文件可以為dex文件,該dex文件可以為安裝文件;第二目標(biāo)文件可以為xml(extensiblemarkuplanguage,可擴展標(biāo)記語言) 文件,該xml文件可以用于聲明應(yīng)用程序支持版本的合理范圍。該混淆表可預(yù)先存儲。

步驟s206,若待調(diào)用的對象名包含在混淆表中,從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名。

本申請上述步驟s206中,從混淆表中輸出與待調(diào)用的對象名對應(yīng)的混淆名可以為將混淆后的類名傳給代碼保存的寄存器。若待調(diào)用的對象名未包含在混淆表中,則記錄傳入的類名、拋出異常并中止程序,發(fā)生該情況的原因主要在于混淆表生成錯誤或者攔截錯誤,因此需要根據(jù)異常來查找問題。

可選地,對象名包括以下一種或幾種的組合:類名、方法名以及成員變量名。

由上可知,本申請上述實施例一所提供的方案,通過預(yù)設(shè)的靜態(tài)替換操作獲取待調(diào)用的對象名,以及判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,達(dá)到了在判斷為是的情況下從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名的目的,從而實現(xiàn)了提高java層代碼混淆率、降低開發(fā)人員的代碼混淆配置難度、擴充混淆功能以及增強代碼破解難度的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中應(yīng)用程序的java層代碼混淆率較低的技術(shù)問題。

實施例2

根據(jù)本申請實施例,還提供了一種代碼混淆方法的實施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。

本申請實施例二所提供的方法實施例仍舊可以在移動終端、計算機終端或者類似的運算裝置中執(zhí)行。此處需要說明的是,實施例二所提供的方法實施例仍舊可以運行在圖1所示的計算機終端上。

在上述運行環(huán)境下,本申請?zhí)峁┝巳鐖D3所示的代碼混淆方法,圖3是根據(jù)本申請實施例二的代碼混淆方法的流程示意圖。

如圖3所示,該代碼混淆方法包括:

步驟s302,從目標(biāo)應(yīng)用程序中獲取第一目標(biāo)文件及第二目標(biāo)文件。

本申請上述步驟s302中,目標(biāo)應(yīng)用程序為基于android系統(tǒng)的應(yīng)用程序,第一目標(biāo)文件可以為dex文件,該dex文件可以為安裝文件;第二目標(biāo)文件可以為xml文件,該xml文件可以用于聲明應(yīng)用程序支持版本的合理范圍。

步驟s304,解析第一目標(biāo)文件及第二目標(biāo)文件,按照預(yù)設(shè)規(guī)則生成混淆表,其中,混淆表中不包含從第二目標(biāo)文件中解析出的對象名。

本申請上述步驟s304中,解析第一目標(biāo)文件可以為解析dex文件中所有的類名、方法名以及成員變量名稱,該dex文件一般基于osgi框架。解析第二目標(biāo)文件可以為解析androidmanifest.xml文件中需要給android系統(tǒng)提供的類。

步驟s306,對第一目標(biāo)文件執(zhí)行靜態(tài)替換操作。

本申請上述步驟s306中,在第一目標(biāo)文件中配置的靜態(tài)替換操作可以為so靜態(tài)替換操作。

步驟s308,按照混淆表,將第一目標(biāo)文件的對象名混淆為與對象名對應(yīng)的混淆名。

本申請上述步驟s308中,可以按照混淆表,對要混淆的dex文件進(jìn)行類名,方法名,成員變量名進(jìn)行混淆。

步驟s310,將混淆后的第一目標(biāo)文件存入目標(biāo)應(yīng)用程序。

本申請上述步驟s310中,可以將需要進(jìn)行so攔截的so文件,修改后的各個bundle中的dex文件重新打包進(jìn)入android應(yīng)用程序中。

由上可知,本申請上述實施例二所提供的方案,通過預(yù)設(shè)的靜態(tài)替換操作獲取待調(diào)用的對象名,以及判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,達(dá)到了在判斷為是的情況下從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名的目的,從而實現(xiàn)了提高java層代碼混淆率、降低開發(fā)人員的代碼混淆配置難度、擴充混淆功能以及增強代碼破解難度的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中應(yīng)用程序的java層代碼混淆率較低的技術(shù)問題。

可選地,圖4是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖,如圖4所示,步驟s302,從目標(biāo)應(yīng)用程序中獲取第一目標(biāo)文件及第二目標(biāo)文件包括:

步驟s402,解壓縮目標(biāo)應(yīng)用程序,得到第一目標(biāo)文件。

本申請上述步驟s402中,目標(biāo)應(yīng)用程序可以基于android系統(tǒng),可以對目標(biāo)應(yīng)用程序中的apk包(androidpackage,安卓安裝包)進(jìn)行解壓縮,進(jìn)而得到該apk包中的所有dex文件。

步驟s404,反編譯目標(biāo)應(yīng)用程序,得到第二目標(biāo)文件。

本申請上述步驟s404中,反編譯android應(yīng)用程序中的androidmanifest.xml文件,得到第二目標(biāo)文件。

可選地,圖5是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖,如圖5所示,步驟s304,解析第一目標(biāo)文件及第二目標(biāo)文件,按照預(yù)設(shè)規(guī)則生成混淆表包括:

步驟s502,解析第一目標(biāo)文件,得到第一目標(biāo)文件中的對象名。

本申請上述步驟s502中,第一目標(biāo)文件中的對象名可以為dex文件的文件名。

步驟s504,解析第二目標(biāo)文件,得到第二目標(biāo)文件中的對象名。

本申請上述步驟s504中,第二目標(biāo)文件中的對象名可以為xml文件的文件名。

步驟s506,從第一目標(biāo)文件中的對象名中,濾除第二目標(biāo)文件中的對象名,得到不包含第二目標(biāo)文件中的對象名的對象名集合。

本申請上述步驟s506中,可以根據(jù)解析上述第一目標(biāo)文件及第二目標(biāo)文件而獲取到的類名,方法名以及成員變量名稱來做一張原始名到混淆名的映射表,并濾除第二目標(biāo)文件所獲取的類名。

步驟s508,根據(jù)對象名集合,生成混淆表。

本申請上述步驟s508中,可以根據(jù)android應(yīng)用程序包中的dex文件和androidmanifest.xml文件,生成能夠混淆的類,方法和成員變量的混淆表。

可選地,對第一目標(biāo)文件執(zhí)行靜態(tài)替換操作包括:修改第一目標(biāo)文件中的函數(shù)調(diào)用關(guān)系以及常量,以使目標(biāo)應(yīng)用程序在運行時通過靜態(tài)替換操作獲取待調(diào)用的對象名,其中,函數(shù)調(diào)用關(guān)系包括影響類加載的關(guān)鍵函數(shù)的調(diào)用關(guān)系和/或類加載函數(shù)的調(diào)用關(guān)系,常量包括影響類加載的且與注解相關(guān)的常量。

可選地,圖6是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖,如圖6所示,步驟s306,對所述第一目標(biāo)文件執(zhí)行靜態(tài)替換操作還包括:

步驟s602,在第一目標(biāo)文件中添加包含混淆前后映射轉(zhuǎn)換方法的類。

本申請上述步驟s602中,可以在需要混淆的dex文件中添加包含混淆前后映射轉(zhuǎn)換方法的類。

步驟s604,修改關(guān)鍵函數(shù)的調(diào)用關(guān)系,其中,關(guān)鍵函數(shù)為影響類加載的函數(shù)。

本申請上述步驟s604中,可以修改影響到類加載的關(guān)鍵函數(shù)的調(diào)用關(guān)系,其中,主要進(jìn)行修改的調(diào)用關(guān)系可以包括javaclass類中的getname方法、javasystem類中的loadlibrary方法等。

步驟s606,修改目標(biāo)常量,其中,目標(biāo)常量為影響類加載的且與注解相關(guān)的常量。

本申請上述步驟s606中,可以修改影響到類加載的java注解相關(guān)的常量。

步驟s608,修改類加載的函數(shù)調(diào)用關(guān)系,并在類中添加相應(yīng)的方法。

本申請上述步驟s608中,可以修改類加載的函數(shù)調(diào)用關(guān)系,并且在該類中添加混淆前后轉(zhuǎn)換關(guān)系的方法,其中,主要進(jìn)行修改的調(diào)用關(guān)系可以包括javaclass類中的forname方法、javasystem類中的loadlibrary方法等。

步驟s610,處理含有第一調(diào)用的有關(guān)類加載的類,重新在含有第一調(diào)用的有關(guān)類加載的類中生成私有方法,并且將第一調(diào)用為第二調(diào)用,其中,第一調(diào)用為用于調(diào)用父類的調(diào)用,第二調(diào)用為用于調(diào)用類中的私有方法的調(diào)用;對于有關(guān)類加載機制中繼承自系統(tǒng)的類加載器但未實現(xiàn)類加載方法的類,重新在有關(guān)類加載機制中繼承自系統(tǒng)的類加載器但未實現(xiàn)類加載方法的類中生成私有方法,并對私有方法進(jìn)行重載調(diào)用。

本申請上述步驟s610中,第一調(diào)用可以為invoke-super調(diào)用,第二調(diào)用可以為invoke-direct調(diào)用。invoke-super調(diào)用是直接調(diào)用父類的虛方法,編譯時靜態(tài)確認(rèn);invoke-direct調(diào)用是指沒有被覆蓋方法的調(diào)用,即不用根據(jù)動態(tài)實例所引用的調(diào)用,編譯時靜態(tài)確認(rèn)的一般是private或者init方法。對于有關(guān)類加載機制中繼承自系統(tǒng)的類加載器但未實現(xiàn)類加載方法的類,重新在有關(guān)類加載機制中繼承自系統(tǒng)的類加載器但未實現(xiàn)類加載方法(如loadclass方法)的類中生成私有方法,并對私有方法進(jìn)行重載調(diào)用。

本實施例中,私有方法是指別的類不能調(diào)用的方法。

可選地,圖7是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖,如圖7所示,步驟s308,按照混淆表,將第一目標(biāo)文件的對象名混淆為與對象名對應(yīng)的混淆名包括:

步驟s702,解析混淆表,將對象名與混淆名的對應(yīng)關(guān)系存放在哈希表中。

本申請上述步驟s702中,哈希表(hashmap)又名散列表,是根據(jù)關(guān)鍵碼值(keyvalue)而直接進(jìn)行訪問的數(shù)據(jù)結(jié)構(gòu)。

步驟s704,解析出第一目標(biāo)文件中的對象名。

本申請上述步驟s704中,可以解析要混淆的dex文件,分析出來其類名,方法名和成員變量名。

步驟s706,重新將解析出的對象名寫入第一目標(biāo)文件,其中,在寫入解析出的對 象名時,查詢哈希表,將解析出的對象名混淆為與解析出的對象名對應(yīng)的混淆名。

本申請上述步驟s706中,執(zhí)行該步驟可以通過以下兩種方法:

方法一,重新寫回dex文件,在寫回類名,方法名和成員變量名的時候查詢1中的hashmap,當(dāng)發(fā)現(xiàn)有需要修改的地方按照返回值進(jìn)行修改。

方法二,重新寫回dex文件,在寫回方法,成員變量的調(diào)用引用的時候查詢1中的hashmap,當(dāng)發(fā)現(xiàn)有需要修改的地方按照返回值進(jìn)行修改。

可選地,圖8是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖,如圖8所示,步驟s310,將混淆后的第一目標(biāo)文件存入目標(biāo)應(yīng)用程序包括:

步驟s802,將混淆后的第一目標(biāo)文件進(jìn)行壓縮,并對混淆后的第一目標(biāo)文件進(jìn)行重新簽名。

本申請上述步驟s802中,可以將所有更改后dex文件壓縮替換到其原有的bundle壓縮包中,并對所有修改過的bundle壓縮包進(jìn)行重新簽名。

步驟s804,將預(yù)先配置的用于獲取待調(diào)用的對象名的第三目標(biāo)文件以及混淆后的第一目標(biāo)文件打包寫入目標(biāo)應(yīng)用程序。

本申請上述步驟s804中,將第三目標(biāo)文件以及第一目標(biāo)文件打包寫入目標(biāo)應(yīng)用程序可以包括以下幾個步驟:

步驟s10,將所有更改后dex文件壓縮替換到其原有的bundle壓縮包中;

步驟s20,對所有修改過的bundle壓縮包進(jìn)行重新簽名;

步驟s30,將要進(jìn)行so攔截的so文件添加到主壓縮包中的assets目錄中;

步驟s40,將主框架的dex文件壓縮替換到主壓縮包中的根目錄中。

可選地,圖9是根據(jù)本申請實施例的又一種可選的代碼混淆方法的流程示意圖,如圖9所示,步驟s804,在將預(yù)先配置的用于獲取待調(diào)用的對象名的第三目標(biāo)文件以及混淆后的第一目標(biāo)文件打包寫入目標(biāo)應(yīng)用程序之后,方法還包括:

步驟s902,對目標(biāo)應(yīng)用程序進(jìn)行重新簽名。

本申請上述步驟s902中,可以使用初始或原有的應(yīng)用程序(即未對其經(jīng)混淆操作的應(yīng)用程序)中的簽名文件對目標(biāo)應(yīng)用程序進(jìn)行重新簽名,該目標(biāo)應(yīng)用程序可以為重新打包后的android應(yīng)用程序。其中,簽名文件(signaturefile)可以是用作標(biāo)準(zhǔn)文件的簡短文本文件。需要說明的是,由于android系統(tǒng)對于安裝的應(yīng)用程序都要求 必須簽名,因此,在執(zhí)行完成上述混淆方法之后,需要對應(yīng)用程序進(jìn)行重新簽名,保證應(yīng)用程序能夠正常安裝及運行。

需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本申請并不受所描述的動作順序的限制,因為依據(jù)本申請,某些步驟可以采用其他順序或者同時進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實施例均屬于優(yōu)選實施例,所涉及的動作和模塊并不一定是本申請所必須的。

通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個實施例所述的方法。

實施例3

根據(jù)本申請實施例,還提供了一種用于實施上述代碼運行方法的代碼運行裝置,如圖10所示,該裝置可以包括:第一獲取單元1001、判斷單元1003、第一處理單元1005。

其中,第一獲取單元1001,用于通過預(yù)設(shè)的靜態(tài)替換操作,獲取待調(diào)用的對象名,其中,靜態(tài)替換操作為預(yù)先在目標(biāo)應(yīng)用程序的第一目標(biāo)文件中配置的函數(shù),第一目標(biāo)文件用于記錄目標(biāo)應(yīng)用程序的安裝信息;判斷單元1003,用于判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,其中,混淆表為根據(jù)第一目標(biāo)文件以及第二目標(biāo)文件生成的表,混淆表用于指示對象名與混淆名之間的對應(yīng)關(guān)系,第二目標(biāo)文件用于記錄目標(biāo)應(yīng)用程序的聲明信息;第一處理單元1005,用于若待調(diào)用的對象名包含在混淆表中,從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名。

此處需要說明的是,上述第一獲取單元1001、判斷單元1003、第一處理單元1005對應(yīng)于實施例一中的步驟s202至步驟s206,三個單元與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述單元作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

可選地,本申請上述實施例中的對象名包括以下一種或幾種的組合:類名、方法名以及成員變量名。

由上可知,本申請上述實施例三所提供的方案,通過預(yù)設(shè)的靜態(tài)替換操作獲取待調(diào)用的對象名,以及判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,達(dá)到了在判斷為是的情況下從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名的目的,從而實現(xiàn)了提高java層代碼混淆率、降低開發(fā)人員的代碼混淆配置難度、擴充混淆功能以及增強代碼破解難度的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中應(yīng)用程序的java層代碼混淆率較低的技術(shù)問題。

實施例4

根據(jù)本申請實施例,又提供了一種用于實施上述代碼混淆方法的代碼混淆裝置,如圖11所示,該裝置可以包括:第二獲取單元1101、生成單元1103、第二處理單元1105、第三處理單元1107、存儲單元1109。

其中,第二獲取單元1101,用于從目標(biāo)應(yīng)用程序中獲取第一目標(biāo)文件及第二目標(biāo)文件;生成單元1103,用于解析第一目標(biāo)文件及第二目標(biāo)文件,生成混淆表,其中,混淆表中不包含從第二目標(biāo)文件中解析出的對象名;第二處理單元1105,用于在第一目標(biāo)文件中配置靜態(tài)替換操作;第三處理單元1107,用于按照混淆表,將第一目標(biāo)文件的對象名混淆為與對象名對應(yīng)的混淆名;存儲單元1109,用于將混淆后的第一目標(biāo)文件存入目標(biāo)應(yīng)用程序。

此處需要說明的是,上述第二獲取單元1101、生成單元1103、第二處理單元1105、第三處理單元1107、存儲單元1109對應(yīng)于實施例二中的步驟s302至步驟s310,五個單元與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述單元作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

由上可知,本申請上述實施例四所提供的方案,通過預(yù)設(shè)的靜態(tài)替換操作獲取待調(diào)用的對象名,以及判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,達(dá)到了在判斷為是的情況下從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名的目的,從而實現(xiàn)了提高java層代碼混淆率、降低開發(fā)人員的代碼混淆配置難度、擴充混淆功能以及增強代碼破解難度的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中應(yīng)用程序的java層代碼混淆率較低的技術(shù)問題。

可選地,如圖12所示,第二獲取單元1101可以包括:第一處理子單元1201、第二處理子單元1203。

其中,第一處理子單元1201,用于解壓縮目標(biāo)應(yīng)用程序,得到第一目標(biāo)文件;以及第二處理子單元1203,用于反編譯目標(biāo)應(yīng)用程序,得到第二目標(biāo)文件。

此處需要說明的是,上述第一處理子單元1201、第二處理子單元1203對應(yīng)于實施例一中的步驟s402至步驟s404,兩個子單元與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例二所公開的內(nèi)容。需要說明的是,上述子單元作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

可選地,如圖13所示,生成單元1103可以包括:第一解析子單元1301、第二解析子單元1303、第三處理子單元1305、生成子單元1307。

其中,第一解析子單元1301,用于解析第一目標(biāo)文件,得到第一目標(biāo)文件中的對象名;第二解析子單元1303,用于解析第二目標(biāo)文件,得到第二目標(biāo)文件中的對象名;第三處理子單元1305,用于從第一目標(biāo)文件中的對象名中,濾除第二目標(biāo)文件中的對象名,得到不包含第二目標(biāo)文件中的對象名的對象名集合;生成子單元1307,用于根據(jù)對象名集合,生成混淆表。

此處需要說明的是,上述第一解析子單元1301、第二解析子單元1303、第三處理子單元1305、生成子單元1307對應(yīng)于實施例二中的步驟s502至步驟s508,四個子單元與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述子單元作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

可選地,第二處理單元1105可以包括:修改子單元。

其中,修改子單元,用于修改第一目標(biāo)文件中的函數(shù)調(diào)用關(guān)系以及常量,以使目標(biāo)應(yīng)用程序在運行時通過靜態(tài)替換操作獲取待調(diào)用的對象名,其中,函數(shù)調(diào)用關(guān)系包括影響類加載的關(guān)鍵函數(shù)的調(diào)用關(guān)系和/或類加載函數(shù)的調(diào)用關(guān)系,常量包括影響類加載的且與注解相關(guān)的常量。

可選地,如圖14所示,第二處理單元1105還可以包括:添加子單元1401、第一修改子單元1403、第二修改子單元1405、第三修改子單元1407、第四處理子單元1409。

其中,添加子單元1401,用于在第一目標(biāo)文件中添加包含混淆前后映射轉(zhuǎn)換裝置的類;第一修改子單元1403,用于修改關(guān)鍵函數(shù)的調(diào)用關(guān)系,其中,關(guān)鍵函數(shù)為影響類加載的函數(shù);第二修改子單元1405,用于修改目標(biāo)常量,其中,目標(biāo)常量為影響類加載的且與注解相關(guān)的常量;第三修改子單元1407,用于修改類加載的函數(shù)調(diào)用關(guān)系,并在類中添加混淆前后轉(zhuǎn)換關(guān)系的方法;第四處理子單元1409,用于處理含有第一調(diào)用的有關(guān)類加載的類,重新在含有第一調(diào)用的有關(guān)類加載的類中生成私有方法,并且將第一調(diào)用為第二調(diào)用,其中,第一調(diào)用為用于調(diào)用父類的調(diào)用,第二調(diào)用為用于調(diào)用類中的私有方法的調(diào)用;對于有關(guān)類加載機制中繼承自系統(tǒng)的類加載器但未實現(xiàn)類 加載方法的類,重新在有關(guān)類加載機制中繼承自系統(tǒng)的類加載器但未實現(xiàn)類加載方法的類中生成私有方法,并對私有方法進(jìn)行重載調(diào)用。

此處需要說明的是,上述添加子單元1401、第一修改子單元1403、第二修改子單元1405、第三修改子單元1407、第四處理子單元1409對應(yīng)于實施例一中的步驟s602至步驟s610,五個子單元與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述子單元作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

可選地,如圖15所示,第三處理單元1107可以包括:第三解析子單元1501、第四解析子單元1503、第五處理子單元1505。

其中,第三解析子單元1501,用于解析混淆表,將對象名與混淆名的對應(yīng)關(guān)系存放在哈希表中;第四解析子單元1503,用于解析出第一目標(biāo)文件中的對象名;第五處理子單元1505,用于重新將解析出的對象名寫入第一目標(biāo)文件,其中,在寫入解析出的對象名時,查詢哈希表,將解析出的對象名混淆為與解析出的對象名對應(yīng)的混淆名。

此處需要說明的是,上述第三解析子單元1501、第四解析子單元1503、第五處理子單元1505對應(yīng)于實施例一中的步驟s702至步驟s706,三個子單元與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述子單元作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

可選地,如圖16所示,存儲單元1109可以包括:第六處理子單元1601、寫入子單元1603。

其中,第六處理子單元1601,用于將混淆后的第一目標(biāo)文件進(jìn)行壓縮,并對混淆后的第一目標(biāo)文件進(jìn)行重新簽名;寫入子單元1603,用于將預(yù)先配置的用于獲取待調(diào)用的對象名的第三目標(biāo)文件以及混淆后的第一目標(biāo)文件打包寫入目標(biāo)應(yīng)用程序。

此處需要說明的是,上述第六處理子單元1601、寫入子單元1603對應(yīng)于實施例一中的步驟s802至步驟s804,兩個子單元與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi)容。需要說明的是,上述子單元作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

可選地,如圖17所示,裝置還可以包括:第三處理單元1701。

其中,第四處理單元1701,用于對目標(biāo)應(yīng)用程序進(jìn)行重新簽名。

此處需要說明的是,上述第三處理單元1701對應(yīng)于實施例一中的步驟s902,該單元與對應(yīng)的步驟所實現(xiàn)的示例和應(yīng)用場景相同,但不限于上述實施例一所公開的內(nèi) 容。需要說明的是,上述單元作為裝置的一部分可以運行在實施例一提供的計算機終端10中。

實施例5

本申請的實施例可以提供一種計算機終端,該計算機終端可以是計算機終端群中的任意一個計算機終端設(shè)備??蛇x地,在本實施例中,上述計算機終端也可以替換為移動終端等終端設(shè)備。

可選地,在本實施例中,上述計算機終端可以位于計算機網(wǎng)絡(luò)的多個網(wǎng)絡(luò)設(shè)備中的至少一個網(wǎng)絡(luò)設(shè)備。

在本實施例中,上述計算機終端可以執(zhí)行代碼運行方法中以下步驟的程序代碼:通過預(yù)設(shè)的靜態(tài)替換操作,獲取待調(diào)用的對象名,其中,靜態(tài)替換操作為預(yù)先在目標(biāo)應(yīng)用程序的第一目標(biāo)文件中配置的函數(shù),第一目標(biāo)文件用于記錄目標(biāo)應(yīng)用程序的安裝信息;判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,其中,混淆表為根據(jù)第一目標(biāo)文件以及第二目標(biāo)文件生成的表,混淆表用于指示對象名與混淆名之間的對應(yīng)關(guān)系,第二目標(biāo)文件用于記錄目標(biāo)應(yīng)用程序的聲明信息;若待調(diào)用的對象名包含在混淆表中,從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名。

由上可知,本申請上述實施例五所提供的方案,通過預(yù)設(shè)的靜態(tài)替換操作獲取待調(diào)用的對象名,以及判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,達(dá)到了在判斷為是的情況下從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名的目的,從而實現(xiàn)了提高java層代碼混淆率、降低開發(fā)人員的代碼混淆配置難度、擴充混淆功能以及增強代碼破解難度的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中應(yīng)用程序的java層代碼混淆率較低的技術(shù)問題。

可選地,圖18是根據(jù)本申請實施例的一種計算機終端的結(jié)構(gòu)框圖。如圖18所示,該計算機終端a可以包括:一個或多個(圖中僅示出一個)處理器1801、存儲器1803、以及傳輸裝置1805。

其中,存儲器1803可用于存儲軟件程序以及模塊,如本申請實施例中的代碼運行方法和裝置對應(yīng)的程序指令/模塊,處理器1801通過運行存儲在存儲器1803內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實現(xiàn)上述的代碼運行方法。存儲器1803可包括高速隨機存儲器,還可以包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態(tài)存儲器。在一些實例中,存儲器1803可進(jìn)一步包括相對于處理器遠(yuǎn)程設(shè)置的存儲器,這些遠(yuǎn)程存儲器可以通過網(wǎng)絡(luò)連接至終端a。上述網(wǎng)絡(luò)的實例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動通信網(wǎng)及其組合。

上述的傳輸裝置1805用于經(jīng)由一個網(wǎng)絡(luò)接收或者發(fā)送數(shù)據(jù)。上述的網(wǎng)絡(luò)具體實例可包括有線網(wǎng)絡(luò)及無線網(wǎng)絡(luò)。在一個實例中,傳輸裝置1805包括一個網(wǎng)絡(luò)適配器(networkinterfacecontroller,nic),其可通過網(wǎng)線與其他網(wǎng)絡(luò)設(shè)備與路由器相連從而可與互聯(lián)網(wǎng)或局域網(wǎng)進(jìn)行通訊。在一個實例中,傳輸裝置1805為射頻(radiofrequency,rf)模塊,其用于通過無線方式與互聯(lián)網(wǎng)進(jìn)行通訊。

實施例6

本申請的實施例可以提供一種計算機終端,該計算機終端可以是計算機終端群中的任意一個計算機終端設(shè)備??蛇x地,在本實施例中,上述計算機終端也可以替換為移動終端等終端設(shè)備。

可選地,在本實施例中,上述計算機終端可以位于計算機網(wǎng)絡(luò)的多個網(wǎng)絡(luò)設(shè)備中的至少一個網(wǎng)絡(luò)設(shè)備。

在本實施例中,上述計算機終端可以執(zhí)行應(yīng)用程序的漏洞檢測方法中以下步驟的程序代碼:從目標(biāo)應(yīng)用程序中獲取第一目標(biāo)文件及第二目標(biāo)文件;解析第一目標(biāo)文件及第二目標(biāo)文件,按照預(yù)設(shè)規(guī)則生成混淆表,其中,混淆表中不包含從第二目標(biāo)文件中解析出的對象名;對第一目標(biāo)文件執(zhí)行靜態(tài)替換操作;按照混淆表,將第一目標(biāo)文件的對象名混淆為與對象名對應(yīng)的混淆名;將混淆后的第一目標(biāo)文件存入目標(biāo)應(yīng)用程序。

由上可知,本申請上述實施例六所提供的方案,通過預(yù)設(shè)的靜態(tài)替換操作獲取待調(diào)用的對象名,以及判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,達(dá)到了在判斷為是的情況下從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名的目的,從而實現(xiàn)了提高java層代碼混淆率、降低開發(fā)人員的代碼混淆配置難度、擴充混淆功能以及增強代碼破解難度的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中應(yīng)用程序的java層代碼混淆率較低的技術(shù)問題。

可選的,上述處理器1801還可以執(zhí)行如下步驟的程序代碼:解壓縮目標(biāo)應(yīng)用程序,得到第一目標(biāo)文件;以及反編譯目標(biāo)應(yīng)用程序,得到第二目標(biāo)文件。

可選的,上述處理器1801還可以執(zhí)行如下步驟的程序代碼:解析第一目標(biāo)文件,得到第一目標(biāo)文件中的對象名;解析第二目標(biāo)文件,得到第二目標(biāo)文件中的對象名;從第一目標(biāo)文件中的對象名中,濾除第二目標(biāo)文件中的對象名,得到不包含第二目標(biāo)文件中的對象名的對象名集合;根據(jù)對象名集合,生成混淆表。

可選的,上述處理器1801還可以執(zhí)行如下步驟的程序代碼:修改第一目標(biāo)文件中的函數(shù)調(diào)用關(guān)系以及常量,以使目標(biāo)應(yīng)用程序在運行時通過靜態(tài)替換操作獲取待調(diào)用 的對象名,其中,函數(shù)調(diào)用關(guān)系包括影響類加載的關(guān)鍵函數(shù)的調(diào)用關(guān)系和/或類加載函數(shù)的調(diào)用關(guān)系,常量包括影響類加載的且與注解相關(guān)的常量。

可選的,上述處理器1801還可以執(zhí)行如下步驟的程序代碼:在第一目標(biāo)文件中添加包含混淆前后映射轉(zhuǎn)換方法的類;處理含有第一調(diào)用的有關(guān)類加載的類,重新在含有第一調(diào)用的有關(guān)類加載的類中生成私有方法,并且將第一調(diào)用為第二調(diào)用,其中,第一調(diào)用為用于調(diào)用父類的調(diào)用,第二調(diào)用為用于調(diào)用類中的私有方法的調(diào)用;對于有關(guān)類加載機制中繼承自系統(tǒng)的類加載器但未實現(xiàn)類加載方法的類,重新在有關(guān)類加載機制中繼承自系統(tǒng)的類加載器但未實現(xiàn)類加載方法的類中生成私有方法,并對私有方法進(jìn)行重載調(diào)用。

可選的,上述處理器1801還可以執(zhí)行如下步驟的程序代碼:解析混淆表,將對象名與混淆名的對應(yīng)關(guān)系存放在哈希表中;解析出第一目標(biāo)文件中的對象名;重新將解析出的對象名寫入第一目標(biāo)文件,其中,在寫入解析出的對象名時,查詢哈希表,將解析出的對象名混淆為與解析出的對象名對應(yīng)的混淆名。

可選的,上述處理器1801還可以執(zhí)行如下步驟的程序代碼:將混淆后的第一目標(biāo)文件進(jìn)行壓縮,并對混淆后的第一目標(biāo)文件進(jìn)行重新簽名;將預(yù)先配置的用于獲取待調(diào)用的對象名的第三目標(biāo)文件以及混淆后的第一目標(biāo)文件打包寫入目標(biāo)應(yīng)用程序。

可選的,上述處理器1801還可以執(zhí)行如下步驟的程序代碼:對目標(biāo)應(yīng)用程序進(jìn)行重新簽名。

本領(lǐng)域普通技術(shù)人員可以理解,圖18所示的結(jié)構(gòu)僅為示意,計算機終端也可以是智能手機(如android手機、ios手機等)、平板電腦、掌聲電腦以及移動互聯(lián)網(wǎng)設(shè)備(mobileinternetdevices,mid)、pad等終端設(shè)備。圖18其并不對上述電子裝置的結(jié)構(gòu)造成限定。例如,計算機終端a還可包括比圖18中所示更多或者更少的組件(如網(wǎng)絡(luò)接口、顯示裝置等),或者具有與圖18所示不同的配置。

本領(lǐng)域普通技術(shù)人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令終端設(shè)備相關(guān)的硬件來完成,該程序可以存儲于一計算機可讀存儲介質(zhì)中,存儲介質(zhì)可以包括:閃存盤、只讀存儲器(read-onlymemory,rom)、隨機存取器(randomaccessmemory,ram)、磁盤或光盤等。

實施例7

本申請的實施例還提供了一種存儲介質(zhì)??蛇x地,在本實施例中,上述存儲介質(zhì)可以用于保存上述實施例一所提供的代碼運行方法所執(zhí)行的程序代碼。

可選地,在本實施例中,上述存儲介質(zhì)可以位于計算機網(wǎng)絡(luò)中計算機終端群中的任意一個計算機終端中,或者位于移動終端群中的任意一個移動終端中。

可選地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:通過預(yù)設(shè)的靜態(tài)替換操作,獲取待調(diào)用的對象名,其中,靜態(tài)替換操作為預(yù)先在目標(biāo)應(yīng)用程序的第一目標(biāo)文件中配置的函數(shù),第一目標(biāo)文件用于記錄目標(biāo)應(yīng)用程序的安裝信息;判斷待調(diào)用的對象名是否包含在預(yù)設(shè)的混淆表中,其中,混淆表為根據(jù)第一目標(biāo)文件以及第二目標(biāo)文件生成的表,混淆表用于指示對象名與混淆名之間的對應(yīng)關(guān)系,第二目標(biāo)文件用于記錄目標(biāo)應(yīng)用程序的聲明信息;若待調(diào)用的對象名包含在混淆表中,從混淆表中查找并輸出與待調(diào)用的對象名對應(yīng)的混淆名。

此處需要說明的是,上述計算機終端群中的任意一個可以與網(wǎng)站服務(wù)器和掃描器建立通信關(guān)系,掃描器可以掃描計算機終端上php執(zhí)行的web應(yīng)用程序的值命令。

實施例8

本申請的實施例還提供了一種存儲介質(zhì)。可選地,在本實施例中,上述存儲介質(zhì)可以用于保存上述實施例一所提供的代碼混淆方法所執(zhí)行的程序代碼。

可選地,在本實施例中,上述存儲介質(zhì)可以位于計算機網(wǎng)絡(luò)中計算機終端群中的任意一個計算機終端中,或者位于移動終端群中的任意一個移動終端中。

可選地,在本實施例中,存儲介質(zhì)被設(shè)置為存儲用于執(zhí)行以下步驟的程序代碼:從目標(biāo)應(yīng)用程序中獲取第一目標(biāo)文件及第二目標(biāo)文件;解析第一目標(biāo)文件及第二目標(biāo)文件,按照預(yù)設(shè)規(guī)則生成混淆表,其中,混淆表中不包含從第二目標(biāo)文件中解析出的對象名;對第一目標(biāo)文件執(zhí)行靜態(tài)替換操作;按照混淆表,將第一目標(biāo)文件的對象名混淆為與對象名對應(yīng)的混淆名;將混淆后的第一目標(biāo)文件存入目標(biāo)應(yīng)用程序。

此處需要說明的是,上述計算機終端群中的任意一個可以與網(wǎng)站服務(wù)器和掃描器建立通信關(guān)系,掃描器可以掃描計算機終端上php執(zhí)行的web應(yīng)用程序的值命令。

上述本申請實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。

在本申請的上述實施例中,對各個實施例的描述都各有側(cè)重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關(guān)描述。

在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過其它的方式實現(xiàn)。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所 顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。

所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。

另外,在本申請各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。

所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中。基于這樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可為個人計算機、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。

以上所述僅是本申請的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本申請原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也應(yīng)視為本申請的保護(hù)范圍。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1