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