一種基于反編譯模塊特征的android廣告插件檢測方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于移動應(yīng)用安全領(lǐng)域,涉及移動應(yīng)用廣告插件的檢測,具體是一種基于 反編譯模塊特征的android廣告插件檢測方法。
【背景技術(shù)】
[0002] 近年來,隨著移動互聯(lián)網(wǎng)產(chǎn)業(yè)的快速發(fā)展,以及移動智能終端的高速普及,導(dǎo)致移 動應(yīng)用創(chuàng)新不斷,移動應(yīng)用內(nèi)容已覆蓋導(dǎo)航、閱讀、天氣、教育、時尚、購物、社交、支付、打車 等方面。
[0003] 由于用戶對移動應(yīng)用的大量需求,導(dǎo)致目前的商業(yè)模式通過移動應(yīng)用嵌入廣告, 并通過廣告分成獲得收益大為流行。隨著移動應(yīng)用廣告的產(chǎn)業(yè)規(guī)模不斷擴大,移動應(yīng)用廣 告面臨的安全風(fēng)險日益凸顯。流量消耗、惡意扣費、隱私竊取等安全問題,阻礙了移動應(yīng)用 廣告行業(yè)的發(fā)展壯大。
[0004] 移動互聯(lián)網(wǎng)發(fā)展到現(xiàn)在,大部分移動應(yīng)用采用免費下載的方式,以吸引用戶,建立 廣告分發(fā)渠道,實現(xiàn)互聯(lián)網(wǎng)式的后向收費,通過用戶流量導(dǎo)入廣告展示,向廣告主收取相應(yīng) 廣告費的后向收費盈利模式得到了市場的廣泛支持,是目前移動互聯(lián)網(wǎng)市場中最重要的營 銷手段之一,擁有龐大的用戶基礎(chǔ)和發(fā)展空間。而以提供內(nèi)容和服務(wù)向用戶收取費用的前 向收費模式難以推廣;
[0005] 移動廣告市場的快速增長導(dǎo)致國內(nèi)涌現(xiàn)出上百家移動廣告平臺,這些廣告平臺大 小不一,良莠不齊,主要依靠在移動應(yīng)用中集成廣告插件,收取廣告主的展示費;但是,他們 提供的廣告插件沒有統(tǒng)一的行業(yè)標(biāo)準(zhǔn),給移動安全帶來了一定的風(fēng)險和隱患;因此很有必 要檢測Andro i d軟件中含有的廣告插件。
[0006] 目前,廣告插件的SDK(Software Development Kit)包被開發(fā)者導(dǎo)入應(yīng)用程序包 中,所以在開發(fā)者看來,不用關(guān)心廣告插件的具體實現(xiàn),只需按照要求進(jìn)行配置即可,并且 廣告插件與應(yīng)用功能是完全分離開來的,同樣,應(yīng)用根據(jù)需要還能導(dǎo)入別的插件,如游戲插 件、付費插件及其他一些服務(wù)插件(地圖插件)。這些插件的功能和設(shè)計上都是與應(yīng)用本身 的功能相互獨立的,所以在檢測插件的過程中可以考慮模塊化的思想,提取模塊的整體特 征進(jìn)行檢測。
[0007] 文獻(xiàn)"基于語義分析的Android廣告插件的自動檢測"中提出了:模塊劃分并結(jié)合 語義分析檢測廣告插件,在該模塊劃分方法中,對程序包名整體進(jìn)行劃分,然后分析各個模 塊之間的獨立性對插件進(jìn)行劃分,最后獲取各個模塊中的特征,該方法雖然可以較為精確 的獲取模塊之間的相互關(guān)系,并實現(xiàn)模塊的分解,但是這種方法耗費了大量的計算,影響效 率,對于實際檢測大量的應(yīng)用程序效率較低。
【發(fā)明內(nèi)容】
[0008] 本發(fā)明針對現(xiàn)有方法短時間檢測大量移動應(yīng)用程序效率較低,不能實現(xiàn)快速檢測 移動應(yīng)用中所包含的廣告插件,提出了一種基于反編譯模塊特征的android廣告插件檢測 方法。
[0009] 具體步驟如下:
[00?0]步驟一、收集具有廣告插件的樣本Android應(yīng)用,并對每個樣本Android應(yīng)用反編 譯成Java文件;
[0011] 步驟二、掃描并記錄Java文件所有的包名路徑,以二級包名為分界點,對每個樣本 Android應(yīng)用進(jìn)行模塊分解;
[0012] 針對每個樣本Android應(yīng)用,以二級包名為分界點,將具有相同的一,二級包名的 包文件規(guī)劃到同一個模塊中,將每個樣本Android應(yīng)用分解為m個不同的模塊;m根據(jù)應(yīng)用大 小確定,為整數(shù);
[0013] 步驟三、對于每個樣本Android應(yīng)用分解的各個模塊,按是否含有廣告插件包名, 分別標(biāo)記為廣告插件模塊和非廣告插件模塊。
[0014] 步驟四、提取每個樣本Android應(yīng)用中各個模塊的詞數(shù)特征,得到每個模塊的特征 序列。
[0015] 針對每個模塊,遍歷所有Java文件中的內(nèi)容,將其中的標(biāo)點、空格等非字母的符號 濾除,不統(tǒng)計重復(fù)的詞,只對不同的詞數(shù)進(jìn)行統(tǒng)計,得到對應(yīng)模塊的Java代碼中所包含的唯 一詞數(shù)序列,得到的數(shù)字序列即作為對應(yīng)模塊的模塊特征。
[0016] 步驟五、把每個樣本Android應(yīng)用的m個模塊的特征序列組成模塊集合。
[0017] 每一個模塊的數(shù)字序列作為模塊集合中的一個元素。
[0018] 步驟六、構(gòu)造映射向量將模塊集合中的元素都映射到特征空間向量S中;
[0019] 特征空間向量S包含兩個集合:模塊集合和檢測結(jié)果集合;每個模塊對應(yīng)的特征數(shù) 字序列作為模塊集合中的元素;每一個模塊對應(yīng)一個映射結(jié)果:標(biāo)記為廣告插件模塊的特 征數(shù)字序列對應(yīng)的映射為1;標(biāo)記為非廣告插件模塊的特征數(shù)字序列對應(yīng)的映射為〇,所有 的映射結(jié)果保存在檢測結(jié)果集合中。
[0020] 步驟七、將特征空間向量S輸入到分類器,對分類器進(jìn)行學(xué)習(xí)訓(xùn)練,實現(xiàn)對檢測模 塊的自動進(jìn)行二分類。
[0021] 采用KNN算法對進(jìn)行標(biāo)記的廣告插件模塊和非廣告插件模塊進(jìn)學(xué)習(xí)訓(xùn)練;
[0022] 步驟八、利用訓(xùn)練好的分類器,對未知的應(yīng)用樣本進(jìn)行廣告插件的檢測;
[0023]首先,對未知的應(yīng)用樣本反編譯成Java文件;然后以Java文件的二級包名為分界 點,對樣本Android應(yīng)用進(jìn)行模塊分解;
[0024]然后,提取未知應(yīng)用樣本中各個模塊的詞數(shù)特征,得到每個模塊對應(yīng)的模塊特征 序列。
[0025]最后將未知應(yīng)用樣本的特征序列輸入到訓(xùn)練好的分類器中進(jìn)行檢測,若檢測出含 有廣告插件模塊,即判定該未知樣本含有廣告插件。
[0026]本發(fā)明的優(yōu)點在于:
[0027] 1、一種基于反編譯模塊特征的android廣告插件檢測方法,簡化了模塊劃分的過 程,提高了模塊劃分的效率。
[0028] 2、一種基于反編譯模塊特征的android廣告插件檢測方法,省去了提取廣告插件 中語義特征的過程,簡化了特征提取的過程。
[0029] 3、一種基于反編譯模塊特征的android廣告插件檢測方法,不需要對不同SDK版本 進(jìn)行區(qū)分,涵蓋了所有SDK的版本。
[0030] 4、一種基于反編譯模塊特征的android廣告插件檢測方法,對于被混淆的應(yīng)用,統(tǒng) 計詞數(shù)特征的方法,不受混淆的影響。
[0031] 5、一種基于反編譯模塊特征的android廣告插件檢測方法,獲取的特征則不關(guān)注 文件,而之前的方法,獲取的特征來自文件內(nèi)部的語義特征,所以對文件的模塊劃分做到很 精確才能保證特征的精確獲取。
【附圖說明】
[0032]圖1是本發(fā)明一種基于反編譯模塊特征的android廣告插件檢測方法流程圖。
【具體實施方式】
[0033]下面結(jié)合附圖,對本發(fā)明的具體實施方法進(jìn)行詳細(xì)說明。
[0034]本發(fā)明一種基于反編譯模塊特征的android廣告插件檢測的方法,采用了android 反編譯分析技術(shù),反匯編廣告插件應(yīng)用,采用模塊分解的思想,將應(yīng)用模塊化分解,對各個 模塊(包含廣告模塊、非廣告模塊)進(jìn)行模塊特征的提取,通過機器學(xué)習(xí)的經(jīng)典KNN算法(k最 鄰近分類算法),使廣告插件檢測系統(tǒng)可以檢測出應(yīng)用中包含的廣告插件,具有能短時間檢 測大量移動應(yīng)用的優(yōu)勢,和滿足現(xiàn)今市場需求的移動應(yīng)用廣告插件快速檢測的意義。
[0035] 如圖1所示,具體步驟如下:
[0036]步驟一、收集具有廣告插件的樣本Android應(yīng)用,并對每個樣本Android應(yīng)用反編 譯成Java文件;
[0037]本實施中共收集了300個具有廣告插件的樣本Android應(yīng)用,來自Google Play官 方商城及國內(nèi)第三方商城如豌豆莢、應(yīng)用寶、移動MM商城等。
[0038] 對于Android反編譯,利用Java語法進(jìn)行分析,將Android程序(經(jīng)過編譯的二進(jìn)制 可執(zhí)行文件)反編譯成Java代碼。利用Google發(fā)布的工具Dex2 jar工具,把Android應(yīng)用程序 中的DEX二進(jìn)制文件反編譯成Jar包,然后使用Jad工具將Jar文件包反編譯成為可以打開讀 懂的Java文件。
[0039]步驟二、掃描并記錄Java文件所有的包名路徑,以二級包名為分界點,對樣本 Android應(yīng)用進(jìn)行模塊分解;
[0040]遍歷掃描整個反編譯得到的Java文件,在遍歷掃描的過程中,記錄下整體Java文 件的所有的包名路徑,根據(jù)包名路徑可以得到整體的包文件。
[00411針對每個樣本Andro i d應(yīng)用,以二級包名為分界點,將具有相同的一,二級包名的 包文件規(guī)劃到同一個模塊中,以此標(biāo)準(zhǔn)將每個樣本Android應(yīng)用分解為m個不同的模塊;m根 據(jù)應(yīng)用大小確定,為整數(shù);本實施中經(jīng)過模塊分解,共得到2902個模塊特征數(shù)據(jù)。
[0042]本實施例中通過收集不同廣告插件的包名,共得到了android市場中的66款常見 廣告插件的包名,形式如表1所示。通過分析表中的包名信息可以發(fā)現(xiàn),不同的廣告插件包 名之間的區(qū)別,體現(xiàn)在二級包名的不同。所以模塊分解的重點在于二級包名,將具有相同 一,二級包名的歸屬到同一個模塊之中。
[0043] 表 1
[0044]
[0045]步驟三、對于每個樣本Android應(yīng)用分解的各個模塊,按是否含有廣告插件包名, 分別標(biāo)記為廣告插件模塊和非廣告插件模塊。
[0046]對Android應(yīng)用進(jìn)行檢測通常需要提取整體應(yīng)用的特征信息,而整體中非廣告插 件部分的信息會對廣告插件部分的信息造成干擾,影響廣告插件檢測的準(zhǔn)確率。利用模塊 分解的思想,將整體的應(yīng)用分解為只包含廣告插件的廣告插件模塊,和不包含廣告插件的 非廣告插件模塊;然后通過提取廣告插件模塊的特征信息進(jìn)行廣告插件的檢測。
[0047] 針對于各個模塊,將含有廣告插件包名的模塊定義為廣告插件模塊,未含有廣告 插件