本發(fā)明屬于android應用重打包檢測技術(shù)領域,尤其涉及一種基于java文件目錄結(jié)構(gòu)的android應用重打包檢測方法。
背景技術(shù):
目前android應用重打包檢測方法主要有基于代碼或者行為的檢測方法?;诖a或者行為的檢測方法采用反編譯工具或者動態(tài)行為分析工具得到代碼文件或應用行為序列,然后進行預處理得到序列特征,通過計算序列特征的距離得到應用相似性的量化數(shù)據(jù)。該方法可以檢測應用代碼的改變,解決包括代碼重用、剽竊和重打包等問題,但是序列特征的提取容易受到代碼混淆技術(shù)的影響,因而在針對實際問題進行分析時具有一定的局限性。
技術(shù)實現(xiàn)要素:
發(fā)明目的:為解決現(xiàn)有技術(shù)中存在的問題,本發(fā)明提出一種能有效避免代碼混淆技術(shù)以及惡意代碼的插入帶來的影響的基于java文件目錄結(jié)構(gòu)的android應用重打包檢測方法。
技術(shù)方案:一種基于java文件目錄結(jié)構(gòu)的android應用重打包檢測方法,包括如下步驟:
(1)建立應用簽名庫:對于已知的每一個apk應用程序進行處理,得到應用簽名,并建立應用簽名庫,具體過程為:
1.1對apk應用程序進行解壓縮等處理后得到具有特定目錄結(jié)構(gòu)的java類文件;
1.2對其中每一個java的包名和java類名進行改進的哈希運算,將所得字符串作為節(jié)點簽名,構(gòu)成以應用簽名為節(jié)點的樹形結(jié)構(gòu);
1.3對步驟1.2中得到的樹形結(jié)構(gòu)進行深度優(yōu)先遍歷,將遍歷過的節(jié)點簽名進行連接,得到最后的應用簽名,建立應用簽名庫;
(2)檢測應用程序,得到檢測結(jié)果:對于待檢測apk應用程序,使用步驟(1)中的方法計算出應用簽名后,再計算待檢測應用簽名和應用簽名庫中應用簽名之間的編輯距離以及應用相似度,將所得應用相似度與閾值進行比較,判斷是否為應用簽名庫中apk應用程序的重打包應用,得到檢測結(jié)果;如果所得應用相似度大于閾值,則為apk應用程序的重打包應用。
進一步的,所述步驟1.1中對apk應用程序進行解壓縮等處理后得到具有特定目錄結(jié)構(gòu)的java類文件,具體為:將apk應用程序后綴名改為zip,然后解壓縮,得到可執(zhí)行字節(jié)碼文件classes.dex,通過執(zhí)行dex2jar軟件轉(zhuǎn)化為jar文件,再把后綴名改為zip并進行解壓,得到包含java文件的目錄結(jié)構(gòu)。
進一步的,所述步驟1.2中改進的哈希運算步驟如下:
a)將字符串按照序號模3運算分成三組;
b)每組字符串按照ascii碼表轉(zhuǎn)化為十進制整數(shù)數(shù)組;
c)對每組分別求和并進行模62運算得到三個整數(shù);
d)將三個整數(shù)轉(zhuǎn)化為三個字符,構(gòu)成輸出字符串。轉(zhuǎn)化規(guī)則為:0~9轉(zhuǎn)化為字符“0”到“9”,10~35轉(zhuǎn)化為字符“a”到“z”,36~61轉(zhuǎn)化為字符“a”到“z”。
進一步的,所述步驟(2)中計算待檢測應用簽名和應用簽名庫中應用簽名之間的編輯距離以及應用相似度的計算公式如下:
式(1)中distance(a,b)為簽名a和簽名b的編輯距離,length1和length2為簽名a和簽名b的長度。
進一步的,所述步驟(2)中的閾值為0.85。
有益效果:針對目前大量存在的android重打包應用,本發(fā)明提出了一種基于java文件目錄結(jié)構(gòu)的android應用重打包檢測方法。首先對于應用庫中每一個apk應用程序,解壓縮得到具有特定目錄結(jié)構(gòu)的java類文件,該目錄結(jié)構(gòu)可視為樹形結(jié)構(gòu),然后對其中每一個目錄名(即java的包名)和文件名(即java類名)進行我們自定義的哈希運算,將所得哈希值作為節(jié)點簽名,使用深度優(yōu)先遍歷算法將節(jié)點簽名進行連接得到最終應用簽名。計算出所有已知應用的簽名并組成簽名庫。對于待檢測的apk應用程序,按照類似方法獲得其簽名,并計算該簽名與簽名庫中簽名的編輯距離,得出檢測結(jié)果。本發(fā)明是基于java文件目錄結(jié)構(gòu)的android應用重打包檢測方法提供了一種新的重打包檢測方法。隨著越來越多的重打包軟件采用代碼混淆技術(shù),基于代碼或者行為的檢測方法必然會受到嚴重影響。而本發(fā)明采用的是基于java類文件目錄結(jié)構(gòu)來提取特征,并不受上述行為的影響。所以相對傳統(tǒng)的基于代碼或者行為的檢測方法,本發(fā)明快速有效,可以有效抵抗代碼混淆,對于應用的重打包檢測具有較高的準確率。
附圖說明
圖1為本發(fā)明的流程圖。
具體實施方式
下面將結(jié)合附圖,對本發(fā)明的實施案例進行詳細的描述;
如圖1所示,一種基于java文件目錄結(jié)構(gòu)的android應用重打包檢測方法,包括如下步驟:
(1)建立應用簽名庫:對于已知的每一個apk應用程序進行處理,得到應用簽名,并建立應用簽名庫:
1.1對apk應用程序進行解壓縮等處理后得到具有特定目錄結(jié)構(gòu)的java類文件;
1.2對其中每一個java的包名和java類名進行改進的哈希運算,將所得字符串作為節(jié)點簽名,構(gòu)成以應用簽名為節(jié)點的樹形結(jié)構(gòu);
1.3對步驟1.2中得到的樹形結(jié)構(gòu)進行深度優(yōu)先遍歷,將遍歷過的節(jié)點簽名進行連接,得到最后的應用簽名,建立應用簽名庫;
(2)檢測應用程序,得到檢測結(jié)果:對于待檢測apk應用程序,使用步驟(1)中的方法計算出應用簽名后,再計算待檢測應用簽名和應用簽名庫中應用簽名之間的編輯距離以及應用相似度,將所得應用相似度與閾值進行比較,判斷是否為應用簽名庫中apk應用程序的重打包應用,得到檢測結(jié)果,如果所得應用相似度大于閾值,則為apk應用程序的重打包應用。
本實施例中:
第一步,應用簽名庫的建立;
第二步,應用程序的檢測過程。
應用簽名庫的建立具體過程如下:
(1)將apk應用程序后綴名改為zip,然后解壓縮,得到可執(zhí)行字節(jié)碼文件classes.dex,通過執(zhí)行dex2jar軟件轉(zhuǎn)化為jar文件,再把后綴名改為zip并進行解壓,得到包含java文件的目錄結(jié)構(gòu)。
(2)對其中每一個目錄名(即java的包名)和文件名(即java類名),首先將文件名長度小于3的文件過濾掉,然后對于剩下的文件進行我們自定義的改進的哈希運算,將哈希運算的結(jié)果作為節(jié)點簽名,構(gòu)成以簽名為節(jié)點的樹狀結(jié)構(gòu)。
該哈希運算規(guī)則為:
a)將字符串按照序號模3運算分成3組;
b)按照ascii碼表轉(zhuǎn)化為十進制整數(shù),分別進行求和后對62取余數(shù);
c)按照0~9轉(zhuǎn)化為字符“0”到“9”,10~35轉(zhuǎn)化為字符“a”到“z”,36~61轉(zhuǎn)化為字符“a”到“z”的規(guī)則轉(zhuǎn)化為字符,得到長度為3的字符串。
例如,對于文件“uppayassistex.class”,首先將文件名分成3組字符串,分別是“uassx”、“pyst”和“paie”,然后按照ascii碼表轉(zhuǎn)化為十進制整數(shù)并進行求和,得到85+97+115+115+120、80+121+115+116和80+65+105+69,即532、432和319,對62取余數(shù)后得到36、60和9,再轉(zhuǎn)化為字符,即“a”、“y”和“9”,所以“ay9”為文件“uppayassistex.class”的哈希運算結(jié)果,也即節(jié)點簽名。
(3)進行深度優(yōu)先遍歷算法,將節(jié)點簽名進行連接,得到最后的應用簽名。
(4)將所得到的應用簽名加入簽名庫。
第二步,應用程序的檢測過程。
(1)按照前述第一步中的(1)~(3)得到待檢測應用的簽名。
(2)計算所得簽名與簽名庫中所有簽名之間的編輯距離distance(a,b)。然后計算應用相似度,計算公式如下:
式(1)中distance(a,b)為簽名a和簽名b的編輯距離,length1和length2為簽名a和簽名b的長度。
若存在一個簽名,它們之間的相似度大于給定閾值則表示二者為重打包應用。經(jīng)過我們的試驗,將判斷是否為重打包應用的閾值可設為0.85。
本發(fā)明首先對于每一個已知的apk應用程序,通過解壓縮得到具有特定目錄結(jié)構(gòu)的java類文件,該目錄結(jié)構(gòu)可視為樹形結(jié)構(gòu),然后對其中每一個目錄名(即java的包名)和文件名(即java類名)進行我們自定義的哈希運算,將所得哈希值作為節(jié)點簽名,使用深度優(yōu)先遍歷算法將節(jié)點簽名進行連接得到最終應用簽名。計算出所有已知應用的簽名并組成簽名庫。對于待檢測的apk應用程序,按照類似方法獲得其簽名,并計算該簽名與簽名庫中簽名的編輯距離以及相似度,得出檢測結(jié)果。本發(fā)明可以有效避免代碼混淆技術(shù)以及惡意代碼的插入帶來的影響,從而具有較好的健壯性和準確率。