本發(fā)明涉及移動(dòng)互聯(lián)網(wǎng)app代碼混淆測(cè)評(píng)領(lǐng)域,特別是涉及一種基于proguard軟件的移動(dòng)互聯(lián)網(wǎng)app代碼混淆測(cè)評(píng)方法。
背景技術(shù):
隨著移動(dòng)互聯(lián)網(wǎng)和移動(dòng)智能終端的普及和快速發(fā)展,移動(dòng)應(yīng)用程序的數(shù)量呈爆發(fā)式增長(zhǎng),其中android平臺(tái)智能終端及其應(yīng)用占據(jù)市場(chǎng)主導(dǎo)地位。然而,面對(duì)日益增長(zhǎng)的應(yīng)用市場(chǎng),app被盜版后加入惡意代碼的情況越來(lái)越嚴(yán)重,部分破壞者利用這些惡意程序收集用戶隱私、篡改數(shù)據(jù),給用戶帶來(lái)巨大的經(jīng)濟(jì)利益損失及安全威脅。對(duì)開發(fā)者來(lái)說(shuō),盜版app不僅影響正版app的下載量,破壞其口碑,還會(huì)帶來(lái)一定的經(jīng)濟(jì)損失。針對(duì)移動(dòng)應(yīng)用程序的代碼保護(hù)及知識(shí)產(chǎn)權(quán)保護(hù)亟待加強(qiáng)。
根據(jù)國(guó)家互聯(lián)網(wǎng)應(yīng)急中心(簡(jiǎn)稱cncert)發(fā)布的《2015年我國(guó)互聯(lián)網(wǎng)網(wǎng)絡(luò)安全態(tài)勢(shì)綜述》報(bào)告顯示,目前我國(guó)移動(dòng)互聯(lián)網(wǎng)環(huán)境有所惡化,2015年捕獲的新增移動(dòng)互聯(lián)網(wǎng)惡意程序樣本近148萬(wàn)個(gè),較2014年增長(zhǎng)了55.3%,主要針對(duì)安卓平臺(tái)。從威脅類型來(lái)說(shuō),排名前三位的惡意行為分別是惡意扣費(fèi)類、流氓行為和遠(yuǎn)程控制類,占比分別為23.6%、22.2%和15.1%。同時(shí),經(jīng)過(guò)連續(xù)三年的整治,國(guó)內(nèi)主流應(yīng)用商店積極落實(shí)安全責(zé)任,不斷完善安全監(jiān)督、安全審核、社會(huì)監(jiān)督舉報(bào)、惡意程序下架等制度,使安全情況有所好轉(zhuǎn),大量移動(dòng)惡意程序的傳播渠道轉(zhuǎn)移到網(wǎng)盤或廣告平臺(tái)等網(wǎng)站。
android應(yīng)用程序的開發(fā)語(yǔ)言是java。由于java源代碼經(jīng)編譯后生成的是一種中間代碼,它保留了程序大量的信息,反編譯后得到的代碼基本可以重構(gòu)程序,使得android應(yīng)用程序在知識(shí)產(chǎn)權(quán)保護(hù)上面臨極大的風(fēng)險(xiǎn)。代碼保護(hù)技術(shù)可以防止應(yīng)用程序被盜版,保護(hù)其知識(shí)產(chǎn)權(quán),因此針對(duì)android智能終端應(yīng)用程序的代碼保護(hù)技術(shù)研究就顯得更加緊迫和重要。
一般來(lái)說(shuō),移動(dòng)智能終端應(yīng)用程序面對(duì)的主要是程序分析及惡意篡改兩種竊取知識(shí)產(chǎn)權(quán)的方式。
程序分析,是指對(duì)程序進(jìn)行分析并從中獲取重要信息,包括程序的主要算法和數(shù)據(jù)結(jié)構(gòu)等。這種方式通過(guò)惡意的程序分析方法來(lái)得到正版程序中的重要信息,并將其應(yīng)用到相應(yīng)的產(chǎn)品中,以實(shí)現(xiàn)相同的功能。
惡意篡改是指對(duì)應(yīng)用程序的重要信息進(jìn)行篡改,侵害用戶或開發(fā)者的經(jīng)濟(jì)利益或聲譽(yù),常見(jiàn)的方式有對(duì)程序中的加密或付費(fèi)模塊進(jìn)行惡意篡改。從本質(zhì)上來(lái)說(shuō),這種侵犯應(yīng)用程序知識(shí)產(chǎn)權(quán)的方式與程序分析的方式是一樣的,它們都是以對(duì)程序的深度分析作為基礎(chǔ)。
為了防止惡意主機(jī)對(duì)移動(dòng)應(yīng)用有目的的篡改,代碼混淆技術(shù)被提出,其基本做法是使用代碼混淆技術(shù)對(duì)軟件的代碼進(jìn)行混淆變換,使混淆變換后的代碼的分析難度增加,從而在一定程度上阻止對(duì)軟件的篡改。代碼混淆技術(shù)實(shí)際上是一種用于對(duì)移動(dòng)代碼保護(hù)和軟件知識(shí)產(chǎn)權(quán)進(jìn)行保護(hù)的安全技術(shù)。在實(shí)際應(yīng)用中,對(duì)軟件提供絕對(duì)的安全保護(hù)是不可能,也是沒(méi)有必要的,只要能使攻擊者的攻擊付出較高的代價(jià),就可以認(rèn)為混淆技術(shù)達(dá)到了安全保護(hù)的作用。因此,代碼混淆技術(shù)就成為容易實(shí)現(xiàn)的保護(hù)安卓app有效保護(hù)技術(shù)。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述存在的問(wèn)題,本發(fā)明提供一種基于proguard軟件的移動(dòng)互聯(lián)網(wǎng)app代碼混淆測(cè)評(píng)方法,可以防止惡意主機(jī)對(duì)移動(dòng)app有目的的篡改,使用代碼混淆軟件對(duì)移動(dòng)app的源代碼進(jìn)行混淆變換,使混淆變換后的代碼的分析難度增加,從而在一定程度上阻止對(duì)移動(dòng)app的篡改。按照本發(fā)明公開的測(cè)評(píng)方法可以開展相關(guān)混淆工作分析,有效地評(píng)估經(jīng)過(guò)proguard軟件混淆后的代碼安全防護(hù)效果,為達(dá)此目的,本發(fā)明提供一種基于proguard軟件的移動(dòng)互聯(lián)網(wǎng)app代碼混淆測(cè)評(píng)方法,具體測(cè)評(píng)方法步驟如下:
1)在集成了proguard的android的編譯環(huán)境中,啟用proguard讓它跟隨ant或eclipse編譯時(shí)一起運(yùn)行,在<project_root>/default.properties文件中設(shè)置proguard.config屬性,路徑可以是絕對(duì)路徑或是工程根目錄的相對(duì)路徑,若把proguard.cfg文件放在默認(rèn)的位置即工程的根目錄,可以這樣指定它的位置:proguard.config=proguard.cfg;或者把該文件移到任何位置,然后指定絕對(duì)路徑:proguard.config=/path/to/proguard.cfg;
2)當(dāng)在release模式下編譯程序時(shí),不管是用antrelease還是用eclipse的導(dǎo)出向?qū)?,編譯系統(tǒng)都會(huì)自動(dòng)檢查proguard.config屬性是否設(shè)置,若已經(jīng)設(shè)置,proguard就會(huì)在打包成.apk文件之前,自動(dòng)處理應(yīng)用程序的字節(jié)碼;
3)proguard開始對(duì)源代碼文件文件中的java代碼進(jìn)行壓縮、優(yōu)化、混淆、預(yù)檢;
4)proguard運(yùn)行結(jié)束后,會(huì)生成一個(gè)名為proguard的文件夾,其中有以下文件:dump.txt描述.apk文件中所有類文件間的內(nèi)部結(jié)構(gòu);mapping.txt列出了原始的類,方法和字段名與混淆后代碼間的映射,當(dāng)從release版本中收到一個(gè)bug報(bào)告時(shí),可以用它來(lái)翻譯被混淆的代碼;seeds.txt列出了未被混淆的類和成員;usage.txt列出了從apk文件中刪除的代碼;
5)分別挑選其中合適的方法來(lái)統(tǒng)計(jì)各項(xiàng)屬性指標(biāo)值,分析各項(xiàng)屬性指標(biāo)值及其變化,對(duì)proguard的代碼混淆工作進(jìn)行評(píng)價(jià);
6)基于各項(xiàng)屬性指標(biāo)值統(tǒng)計(jì)無(wú)法對(duì)混淆工具整體混淆效果做出合理評(píng)價(jià)的結(jié)論,還需從混淆工具的功能點(diǎn)出發(fā)對(duì)代碼混淆工具的工作有效性進(jìn)行評(píng)價(jià)。
作為本發(fā)明進(jìn)一步改進(jìn),步驟五各項(xiàng)屬性指標(biāo)值包括指令執(zhí)行率、控制流復(fù)雜度、指令序列相似度、控制流圖相似度。
作為本發(fā)明進(jìn)一步改進(jìn),步驟六混淆工具的功能包括標(biāo)識(shí)符重命名、類再封裝、過(guò)度重載。
本發(fā)明公開了一種基于proguard軟件的移動(dòng)互聯(lián)網(wǎng)app代碼混淆測(cè)評(píng)方法:為了防止惡意主機(jī)對(duì)移動(dòng)app有目的的篡改,使用代碼混淆軟件對(duì)移動(dòng)app的源代碼進(jìn)行混淆變換,使混淆變換后的代碼的分析難度增加,從而在一定程度上阻止對(duì)移動(dòng)app的篡改。按照本發(fā)明公開的測(cè)評(píng)方法可以開展相關(guān)混淆工作分析,有效地評(píng)估經(jīng)過(guò)proguard軟件混淆后的代碼安全防護(hù)效果,其有益效果如下:
1)本發(fā)明方法可以開展對(duì)經(jīng)過(guò)proguard軟件混淆過(guò)的移動(dòng)app代碼開展有效性評(píng)價(jià);
2)本發(fā)明方法可以結(jié)合各項(xiàng)屬性指標(biāo)值統(tǒng)計(jì),以及混淆工具的功能點(diǎn)出發(fā)對(duì)代碼混淆工具的工作進(jìn)行全面評(píng)估。
附圖說(shuō)明
圖1為hello.apk類結(jié)構(gòu)圖;
圖2為hello_proguard.apk類結(jié)構(gòu)圖;
圖3為hello.apk與hello_proguard.apk類結(jié)構(gòu)對(duì)比圖;、
圖4為proguard過(guò)度重載效果圖。
具體實(shí)施方式
下面結(jié)合附圖與具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)描述:
本發(fā)明提供一種基于proguard軟件的移動(dòng)互聯(lián)網(wǎng)app代碼混淆測(cè)評(píng)方法,可以防止惡意主機(jī)對(duì)移動(dòng)app有目的的篡改,使用代碼混淆軟件對(duì)移動(dòng)app的源代碼進(jìn)行混淆變換,使混淆變換后的代碼的分析難度增加,從而在一定程度上阻止對(duì)移動(dòng)app的篡改。按照本發(fā)明公開的測(cè)評(píng)方法可以開展相關(guān)混淆工作分析,有效地評(píng)估經(jīng)過(guò)proguard軟件混淆后的代碼安全防護(hù)效果。
作為本發(fā)明一種具體實(shí)施例,本發(fā)明提供一種基于proguard軟件的移動(dòng)互聯(lián)網(wǎng)app代碼混淆測(cè)評(píng)方法,以源代碼文件hello.apk以及經(jīng)過(guò)proguard混淆后的測(cè)試文件hello_proguard.apk為例,本發(fā)明的具體實(shí)施步驟如下:
1)在集成了proguard的android的編譯環(huán)境中,啟用proguard讓它跟隨ant或eclipse編譯時(shí)一起運(yùn)行,在<project_root>/default.properties文件中設(shè)置proguard.config屬性。路徑可以是絕對(duì)路徑或是工程根目錄的相對(duì)路徑。若把proguard.cfg文件放在默認(rèn)的位置(工程的根目錄),可以這樣指定它的位置:proguard.config=proguard.cfg;或者把該文件移到任何位置,然后指定絕對(duì)路徑:proguard.config=/path/to/proguard.cfg;
2)當(dāng)在release模式下編譯程序時(shí),不管是用antrelease還是用eclipse的導(dǎo)出向?qū)?,編譯系統(tǒng)都會(huì)自動(dòng)檢查proguard.config屬性是否設(shè)置。若已經(jīng)設(shè)置,proguard就會(huì)在打包成.apk文件之前,自動(dòng)處理應(yīng)用程序的字節(jié)碼;
3)proguard開始對(duì)hello.apk文件中的java代碼進(jìn)行壓縮、優(yōu)化、混淆、預(yù)檢;
4)proguard運(yùn)行結(jié)束后,會(huì)生成一個(gè)名為proguard的文件夾,其中有以下文件:dump.txt描述.apk文件中所有類文件間的內(nèi)部結(jié)構(gòu);mapping.txt列出了原始的類,方法和字段名與混淆后代碼間的映射,當(dāng)從release版本中收到一個(gè)bug報(bào)告時(shí),可以用它來(lái)翻譯被混淆的代碼;seeds.txt列出了未被混淆的類和成員;usage.txt列出了從apk文件中刪除的代碼。
5)分別挑選其中合適的方法來(lái)統(tǒng)計(jì)各項(xiàng)屬性指標(biāo)值,如指令執(zhí)行率、控制流復(fù)雜度、指令序列相似度、控制流圖相似度等,分析各項(xiàng)屬性指標(biāo)值及其變化,對(duì)proguard的代碼混淆工作進(jìn)行評(píng)價(jià)。
6)基于各項(xiàng)屬性指標(biāo)值統(tǒng)計(jì)無(wú)法對(duì)混淆工具整體混淆效果做出合理評(píng)價(jià)的結(jié)論,還需從混淆工具的功能點(diǎn)出發(fā)對(duì)代碼混淆工具的工作有效性進(jìn)行評(píng)價(jià),proguard在應(yīng)用于安卓時(shí)在代碼混淆方面主要有以下功能:標(biāo)識(shí)符重命名、類再封裝、過(guò)度重載。
本發(fā)明評(píng)測(cè)指標(biāo)實(shí)驗(yàn)如下:
表1是本發(fā)明公開的一種基于proguard軟件的移動(dòng)互聯(lián)網(wǎng)app代碼混淆測(cè)評(píng)方法的屬性指標(biāo)值實(shí)驗(yàn)結(jié)果。
(1)指令執(zhí)行率;
對(duì)于程序?qū)傩灾噶頸,可引入指令執(zhí)行率刻畫其特征。指令執(zhí)行率(ie):實(shí)際執(zhí)行的匯編指令條數(shù)占所有反匯編后生成的匯編指令條數(shù)的比重。is表示反匯編后產(chǎn)生的所有指令,即靜態(tài)分析可獲得的所有指令;id表示在動(dòng)態(tài)分析過(guò)程中實(shí)際執(zhí)行的指令條數(shù)。于是有
ie=id/is(1);
經(jīng)過(guò)對(duì)hello.apk反匯編,統(tǒng)計(jì)mainactivity類中onclick(view)方法,其中指令數(shù)共55條,被執(zhí)行的指令數(shù)為44,由公式(1)可知,混淆前的被執(zhí)行指令數(shù)id=44,總指令數(shù)is=55,于是有
ieprior=id/is=44/55=0.80;
故求得混淆前的onclick(view)方法的指令執(zhí)行率為0.80。
使用proguard對(duì)hello項(xiàng)目進(jìn)行混淆后,查看項(xiàng)目中生成的mapping.txt文件,發(fā)現(xiàn)mainactivity類中onclick(view)方法與混淆后項(xiàng)目中cl類onclick(view)對(duì)應(yīng)。再對(duì)hello_proguard.apk反匯編,統(tǒng)計(jì)到cl類中onclick(view)方法中指令數(shù)共52條,其中被執(zhí)行的指令條數(shù)為42,仍由公式(1)可知,混淆后的被執(zhí)行指令數(shù)id=42,總指令數(shù)is=52,于是有;
ielater=id/is=44/55=0.81;
故求得其指令執(zhí)行率為0.81。
(2)控制流復(fù)雜度;
控制流循環(huán)復(fù)雜度記為v(g),計(jì)算公式如下:
v(g)=e-n+2(2);
其中,e表示控制流圖中邊的數(shù)量,n表示控制流圖中節(jié)點(diǎn)的數(shù)量。
使用idapro分別對(duì)hello.apk和hello_proguard.apk進(jìn)行反匯編,得到混淆前工程中mainactivity類中onclick(view)方法以及混淆后工程中cl類中onclick(view)方法的控制流圖。
經(jīng)過(guò)統(tǒng)計(jì),混淆前控制流圖中邊的數(shù)目為10,節(jié)點(diǎn)的數(shù)目為8,由公式(2)可知混淆前的邊數(shù)e=10、節(jié)點(diǎn)數(shù)目n=8,于是有;
v(g)prior=e-n+2=10-8+2=4;
故可知onclick(view)方法混淆前控制流復(fù)雜度為4。混淆后控制流圖邊的數(shù)目為10,節(jié)點(diǎn)的數(shù)目為為8,由公式(2)可知混淆后的邊數(shù)e=10、節(jié)點(diǎn)數(shù)目n=8,于是有;
v(g)later=e-n+2=10-8+2=4;
故可知onclick(view)方法混淆后控制流復(fù)雜度仍為4。
(3)指令序列相似度;
指令序列在程序中為一種常見(jiàn)的結(jié)構(gòu),采用編輯距離比較兩個(gè)長(zhǎng)度不相等的序列,算法的基本思想是將一個(gè)串轉(zhuǎn)換成另一個(gè)串最少需要進(jìn)行的操作來(lái)表示兩者之間的相似度。設(shè)兩個(gè)序列p和q之間的編輯距離為distance(p,q),其為使用插入、刪除以及替換等操作將p轉(zhuǎn)換成q所需最少步驟。p和q之間的相似度可以定義為:
sim(p,q)=1-distance(p,q)/max(p|,|q|)(3);
分別對(duì)hello.apk和hello_proguard.apk進(jìn)行反匯編,得到其中mainactivity類中onclick(view)方法及混淆后cl類中onclick(view)方法的指令序列。記mainactivity類中onclick(view)方法的指令序列為p,記混淆后cl類中onclick(view)方法的指令序列為q,經(jīng)過(guò)統(tǒng)計(jì),若要將變成q變得與p完全一樣,需要對(duì)q使用刪除0步、增加7步、替換10步,故可知兩個(gè)序列p和q之間的編輯距離為distance(p,q)=17,由公式(3)可知p和q之間的相似度sim(p,q)=1-distance(p,q)/max(|p|,|q|)=1-17/55=0.69。
(4)控制流圖相似度;
控制流圖通常為程序逆向分析的重點(diǎn)對(duì)象,通過(guò)比較程序代碼控制流圖的差異性可以定位混淆算法變換代碼的位置,而混淆前后代碼相似度可以采用圖相似度比較方法來(lái)計(jì)算。令g、g1和g2都是圖。如果g1和g2中分別存在一個(gè)子圖與g同構(gòu),則稱g為g1和g2的公共子圖。若不存在比g節(jié)點(diǎn)數(shù)目更多的公共子圖,則稱g為最大公共子圖,將其記為g=mcs(g1,g2)。g1和g2的相似度計(jì)算為:
sim(g1,g2)=|mcs(g1,g2)|/max(|g1|,|g2|)(4);
由控制流復(fù)雜度實(shí)驗(yàn)可知,混淆前mainactivity類中onclick(view)方法的控制流圖(記為g1)與混淆后cl類中onclick(view)方法的控制流圖(記為g2)完全同構(gòu),故公共子圖g=mcs(g1,g2)=g1=g2,由公式(4)可知g1與g2的相似度;
sim(g1,g2)=|mcs(g1,g2)|/max(|g1|,|g2|)=1。
(5)指標(biāo)分析;
根據(jù)上述幾項(xiàng)實(shí)驗(yàn),得到各評(píng)價(jià)屬性指標(biāo)值及變化如表1所示。
由表可以看出經(jīng)過(guò)proguard混淆的程序指令執(zhí)行率幾乎不變、控制流復(fù)雜度沒(méi)有發(fā)生變化、指令序列有一定變化、指令序列相似度降低。
指令序列相似度的降低反映了proguard可以使得混淆后的程序指令發(fā)生變化,一定程度上可以起到隱藏原先程序功能的作用;而指令執(zhí)行率的變化微乎其微,推測(cè)由proguard本身壓縮、優(yōu)化功能的作用引起;而與控制流混淆有關(guān)難的控制流復(fù)雜度卻沒(méi)有絲毫變化,反映proguard確實(shí)不具備控制流混淆的能力。綜合幾項(xiàng)屬性指標(biāo)的變化,幾乎沒(méi)有明顯有力的變化,其中變化稍微明顯的指令序列相似度也只能在一定程度上反映proguard隱蔽性能力,所以這些屬性指標(biāo)難以準(zhǔn)確地反映proguard代碼混淆工作的有效性。
究其原因,主要是因?yàn)閜roguard的代碼混淆功能針對(duì)外形混淆,而上述屬性指標(biāo)并不能絕對(duì)有效地反映外形混淆的效果,例如控制流復(fù)雜度是針對(duì)控制流混淆、不同算法在指令執(zhí)行率上有可能有全然相反的效果,故上述屬性指標(biāo)難以反映proguard代碼混淆工作有效性。另外,如今對(duì)代碼混淆評(píng)估工作的科學(xué)性、合理性還有待考究,各項(xiàng)屬性指標(biāo)在針對(duì)同一類型問(wèn)題的不同算法進(jìn)行評(píng)估時(shí)效果明顯,但對(duì)某個(gè)特定的混淆工具整體進(jìn)行評(píng)估的科學(xué)性還缺乏有力地證明。
本發(fā)明功能點(diǎn)實(shí)驗(yàn)如下:
圖1-4是功能點(diǎn)實(shí)驗(yàn)結(jié)果圖,其中,圖1為hello.apk類結(jié)構(gòu)圖,圖2為hello_proguard.apk類結(jié)構(gòu)圖,圖3為hello.apk與hello_proguard.apk類結(jié)構(gòu)對(duì)比圖,圖4為proguard過(guò)度重載效果圖。
從以上屬性值計(jì)算分析看出當(dāng)前提出的代碼混淆有效性評(píng)估指標(biāo)無(wú)法對(duì)混淆工具整體混淆效果做出合理評(píng)價(jià)的結(jié)論,故以下試圖從混淆工具的功能點(diǎn)出發(fā)對(duì)代碼混淆工具的工作有效性進(jìn)行評(píng)價(jià)。proguard在應(yīng)用于安卓時(shí)在代碼混淆方面主要有以下功能:標(biāo)識(shí)符重命名、類再封裝、過(guò)度重載。標(biāo)識(shí)符重命名是指用任意的名字,例如"a"、"b",對(duì)項(xiàng)目中有意義的類和方法進(jìn)行重命名工作;類再封裝是指將項(xiàng)目中處于多級(jí)目錄下的類全部移動(dòng)到單級(jí)目錄下,重新封裝類的結(jié)構(gòu);過(guò)度重載是指重復(fù)使用相同名字來(lái)命名不同函數(shù)的多個(gè)方法。
(1)標(biāo)識(shí)符重命名;
仍以hello.apk和經(jīng)過(guò)proguard混淆后的hello_proguard.apk為例,分別對(duì)其進(jìn)行反編譯,直接觀察其源代碼,對(duì)混淆工作進(jìn)行評(píng)價(jià)。
hello.apk經(jīng)過(guò)反編譯得到類結(jié)構(gòu)圖如圖1所示,hello_proguard.apk經(jīng)過(guò)反編譯得到的類結(jié)構(gòu)圖如圖2所示。
經(jīng)過(guò)對(duì)比兩幅圖,分析proguard的應(yīng)用效果,可見(jiàn)proguard有效地對(duì)類名、方法名以及變量名進(jìn)行了重命名,有效地實(shí)現(xiàn)了標(biāo)識(shí)符重命名功能。
由混淆后的圖片還可以輕易地看出proguard對(duì)標(biāo)識(shí)符重命名采用了hash改名和重載歸納。圖中類、域以及方法的名字均被修改成了毫不相關(guān)的名字,例如類com.example.hello.mainactivity$1的名字被修改成cl,這屬于hash改名方法;我們還可以發(fā)現(xiàn)混淆后的工程,在a類中存在方法a():boolean、a(fragmentactivity):void和a(stringandroidfiledescriptorandroidprintwriterandroidstring[]):void,這三個(gè)方法同名但參數(shù)和返回類型不全相同,同名但調(diào)用不沖突,將程序中的名字盡可能用相同的來(lái)代替這屬于重載歸納方法。
(2)類再封裝;
對(duì)比混淆前后工程類的結(jié)構(gòu)圖,對(duì)比效果如圖3所示。從對(duì)比圖可以明顯觀察到混淆前項(xiàng)目com.example.hello包下的person類和com.jw.model包下的date類均被移動(dòng)單級(jí)目錄下,打亂了原工程類的結(jié)構(gòu),避免了攻擊者對(duì)類結(jié)構(gòu)進(jìn)行分析,理解開發(fā)者編程思路,并進(jìn)一步獲取項(xiàng)目信息,實(shí)現(xiàn)了類的再封裝。
(3)過(guò)度重載;
觀察hello_proguard.apk項(xiàng)目中不同方法的結(jié)構(gòu),如圖4所示??梢悦黠@地發(fā)現(xiàn)hello_proguard.apk源碼中a類和b類中均有名為a的變量以及名為a的方法,即在不同的類中方法和變量被重復(fù)使用相同的名字重命名。在不同類中重復(fù)使用無(wú)意義的名字進(jìn)行重命名工作,這進(jìn)一步加大了攻擊者閱讀代碼的難度,實(shí)現(xiàn)了過(guò)度重載功能。
以上所述,僅是本發(fā)明的較佳實(shí)施例而已,并非是對(duì)本發(fā)明作任何其他形式的限制,而依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)所作的任何修改或等同變化,仍屬于本發(fā)明所要求保護(hù)的范圍。