一種基于apk加殼軟件動態(tài)行為的查殼方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于移動客戶端App安全技術(shù),涉及安卓應(yīng)用程序安裝包(APK,AndroidPackage)的加殼,尤其涉及一種基于APK加殼軟件動態(tài)行為的查殼方法。
【背景技術(shù)】
[0002]隨著移動端技術(shù)應(yīng)用的日益普及,移動軟件產(chǎn)業(yè)得以飛速發(fā)展,與此同時,針對移動端的木馬、病毒惡意代碼軟件也越來越多。獵豹移動安全數(shù)據(jù)顯示,2014年全球感染病毒的安卓手機達2.8億部,平均每天80萬部安卓手機中毒,中國以近1.2億部手機中毒高居榜首。據(jù)360互聯(lián)網(wǎng)安全中心的報告顯示,2014全年僅360互聯(lián)網(wǎng)安全中心累計截獲Android平臺新增惡意程序樣本326萬個,為2013年的近4倍。
[0003]安卓手機的應(yīng)用采用java開發(fā),惡意代碼也不例外。由于java解釋語言的特性,在應(yīng)用程序不加殼的情況下,通過靜態(tài)分析技術(shù)可以較為容易的逆向得出木馬和病毒的源碼,然后通過分析檢測斷定是否存在木馬病毒的特征,從而對木馬病毒進行查殺。殼程序是一種可以對第三方軟件進行加密或是變換結(jié)構(gòu)而不影響其運行功能以達到躲避被惡意逆向分析的軟件程序。加殼操作基于被保護程序的二進制代碼,與被保護程序的邏輯相分離,因而穩(wěn)定性高,適用度廣。殼程序除了可以用于保護軟件,在惡意代碼反檢測領(lǐng)域中也有廣泛的應(yīng)用。在惡意代碼反檢測領(lǐng)域,為了對加殼的惡意代碼進行逆向分析,就必須先進行脫殼,針對不同的殼程序必須使用對應(yīng)的脫殼程序進行脫殼,所以脫殼的第一步就是對殼進行檢測,即查殼。
[0004]現(xiàn)有查殼方法大多基于靜態(tài)文件特征進行查殼,如查殼工具PEID,是針對殼程序的二進制代碼的特征碼來進行查殼。這種基于靜態(tài)文件特征進行查殼的方法存在較大的局限性,其存在的問題是可通過修改二進制文件抹去特征碼或修改特征碼來混淆查殼的結(jié)果,使得查殼結(jié)果的準確性低,查殼效率低。
【發(fā)明內(nèi)容】
[0005]為了克服上述現(xiàn)有技術(shù)的不足,本發(fā)明提供一種基于APK加殼軟件動態(tài)行為的查殼方法,通過安卓系統(tǒng)的Hook函數(shù)針對殼程序?qū)ο到y(tǒng)函數(shù)和特征函數(shù)的調(diào)用進行監(jiān)控,使加殼的程序運行在部署了監(jiān)控程序的環(huán)境中,一旦被監(jiān)控的函數(shù)被調(diào)用,則跳轉(zhuǎn)到Hook函數(shù)中進行記錄,從而獲得加殼軟件對系統(tǒng)函數(shù)和特征函數(shù)的調(diào)用特征,作為檢測特征;再通過特征比對,得到加殼的程序相應(yīng)的殼程序的類型;本發(fā)明可有效地對主流APK殼的類型進行檢測,提尚分析加殼惡意代碼的準確性和效率。
[0006]本發(fā)明提供的技術(shù)方案是:
[0007]—種基于APK加殼軟件動態(tài)行為的查殼方法,所述查殼方法通過安卓系統(tǒng)的Hook函數(shù),針對殼程序?qū)ο到y(tǒng)函數(shù)和特征函數(shù)的調(diào)用進行動態(tài)行為監(jiān)控,一旦被監(jiān)控的函數(shù)被調(diào)用,則跳轉(zhuǎn)到Hook函數(shù)中進行記錄,再通過特征比對,得到加殼的程序相應(yīng)的殼程序的類型;具體包括如下步驟:
[0008]I)通過Hook函數(shù)對加殼軟件的函數(shù)調(diào)用進行動態(tài)行為監(jiān)控,分別檢測APK加殼軟件對通用系統(tǒng)函數(shù)和特征函數(shù)的調(diào)用行為,構(gòu)造得到所述APK加殼軟件的加殼函數(shù)調(diào)用特征,包括加殼調(diào)用通用系統(tǒng)函數(shù)特征和加殼調(diào)用特征函數(shù)特征;
[0009]2)啟動某一加殼的程序;
[0010]3)針對步驟2)所述加殼的程序,通過Hook函數(shù)對加殼程序的函數(shù)調(diào)用進行動態(tài)行為監(jiān)控,判斷加殼程序調(diào)用的函數(shù)是否是特征函數(shù);
[0011]4)如果加殼程序調(diào)用的函數(shù)是特征函數(shù),則將所述特征函數(shù)的名稱與特征函數(shù)特征庫中的加殼調(diào)用特征函數(shù)特征進行匹配,若找到特征匹配項,則輸出相應(yīng)的殼類型,結(jié)束操作;若未找到特征匹配項,則返回步驟3),通過Hook函數(shù)繼續(xù)監(jiān)控被調(diào)用的函數(shù);
[0012]5)如果加殼程序調(diào)用的函數(shù)不是特征函數(shù),記錄所述被調(diào)用函數(shù)的函數(shù)調(diào)用序列和函數(shù)調(diào)用參數(shù);返回步驟3),通過Hook函數(shù)繼續(xù)監(jiān)控被調(diào)用的函數(shù);
[0013]6)所述APK加殼的程序(原程序)成功啟動后,將步驟5)記錄的函數(shù)調(diào)用序列和函數(shù)調(diào)用參數(shù)與步驟I)中的通用系統(tǒng)函數(shù)特征庫中的加殼調(diào)用通用系統(tǒng)函數(shù)特征進行匹配,匹配成功則得出加殼軟件的類型;匹配不成功則輸出未知殼。
[0014]針對上述基于APK加殼軟件動態(tài)行為的查殼方法,進一步地,步驟I)所述檢測APK加殼軟件對通用系統(tǒng)函數(shù)的調(diào)用行為,構(gòu)造通用系統(tǒng)函數(shù)特征庫包括如下步驟:
[0015]1A)殼程序一啟動即進入Hook函數(shù),記錄即將加載殼程序的動態(tài)鏈接庫a.so ;
[0016]IB)加載殼程序的動態(tài)鏈接庫a.so ;
[0017]1C)進入Hook函數(shù),記錄即將加載殼程序的動態(tài)鏈接庫b.so ;
[0018]1D)加載殼程序的動態(tài)鏈接庫b.so ;
[0019]1E)原程序正常啟動;
[0020]1F)得到函數(shù)調(diào)用序列,作為加殼調(diào)用通用系統(tǒng)函數(shù)特征;
[0021]1G)將1F)所述函數(shù)調(diào)用序列加入到通用系統(tǒng)函數(shù)特征庫。
[0022]步驟I)所述檢測加殼軟件對特征函數(shù)的調(diào)用行為,具體為:使用IDA逆向工具對加殼軟件的主程序或動態(tài)鏈接程序進行逆向,通過人工分析匯編代碼邏輯,定位涉及核心算法的函數(shù),得到加殼軟件在解密原程序前調(diào)用的特征函數(shù),將所述特征函數(shù)的名稱作為加殼調(diào)用特征函數(shù)特征。
[0023]步驟I)所述檢測APK加殼軟件具體為通過分別檢測多種類型的加殼軟件,得到所述多種類型加殼軟件的加殼調(diào)用通用系統(tǒng)函數(shù)特征和加殼調(diào)用特征函數(shù)特征,建立多種類型加殼軟件的加殼調(diào)用通用系統(tǒng)函數(shù)特征和加殼調(diào)用特征函數(shù)特征數(shù)據(jù)庫。
[0024]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
[0025]現(xiàn)有查殼方法大多基于靜態(tài)文件特征進行查殼,基于靜態(tài)文件特征進行查殼的方法存在較大的局限性,可通過修改二進制文件抹去特征碼或修改特征碼來混淆查殼的結(jié)果,使得查殼結(jié)果的準確性低,查殼效率低。本發(fā)明提供一種基于APK加殼軟件動態(tài)行為的查殼方法,使加殼的程序運行在部署了監(jiān)控程序的環(huán)境中,通過安卓系統(tǒng)的Hook函數(shù)針對殼程序?qū)ο到y(tǒng)函數(shù)和特征函數(shù)調(diào)用的動態(tài)行為進行監(jiān)控,一旦被監(jiān)控的函數(shù)被調(diào)用,則跳轉(zhuǎn)到Hook函數(shù)中進行記錄,從而獲得加殼軟件對系統(tǒng)函數(shù)和特征函數(shù)的調(diào)用特征,作為檢測特征;再通過特征比對,得到加殼的程序相應(yīng)的殼程序的類型。利用本發(fā)明提供的技術(shù)方案,可提高混淆殼類型的難度,由于為了繞過本發(fā)明的查殼方法,需要在獲得殼程序源碼的基礎(chǔ)對原有殼程序的調(diào)用流程進行修改,因此,本發(fā)明可以有效地對主流APK殼的類型進行檢測,提高分析加殼惡意代碼的準確性和效率。
【附圖說明】
[0026]圖1是加殼的程序正常啟動的流程框圖。
[0027]圖2是本發(fā)明實施例使用通用系統(tǒng)函數(shù)特征庫和特征函數(shù)特征庫進行查殼的流程框圖。
[0028]圖3是本發(fā)明實施例構(gòu)造通用系統(tǒng)函數(shù)特征庫的流程框圖。
[0029]圖4是本發(fā)明實施例構(gòu)造特征函數(shù)特征庫的流程框圖。
[0030]圖5是使用本發(fā)明提供的查殼方法部署查殼環(huán)境后,加殼的程序啟動的流程框圖。
【具體實施方式】
[0031]下面結(jié)合附圖,通過實施例進一步描述本發(fā)明,但不以任何方式限制本發(fā)明的范圍。
[0032]本發(fā)明提供一種基于APK加殼軟件動態(tài)行為的查殼方法,主要針對市場主流加固軟件如梆梆加固、愛加密加固、娜迦加固、通付盾、騰訊加固、360加固等,通過安卓系統(tǒng)的Hook函數(shù)針對殼程序?qū)ο到y(tǒng)函數(shù)和特征函數(shù)的調(diào)用進行監(jiān)控,使加殼的程序運行在部署了監(jiān)控程序的環(huán)境中,一旦被監(jiān)控的函數(shù)被調(diào)用,則跳轉(zhuǎn)到Hook函數(shù)中進行記錄,從而獲得加殼軟件對系統(tǒng)函數(shù)和特征函數(shù)的調(diào)用特征,作為檢測特征;再通過特征比對,得到加殼的程序相應(yīng)的殼程序的類型;本發(fā)明可有效地對主流APK殼的類型進行檢測,提高分析加殼惡意代碼的準確性和效率。
[0033]圖1是加殼的程序正常啟動的流程框圖。一般地,加殼程序的正常啟動流程包括步驟11)和12):
[0034]11)運行殼程序(代碼),包括:
[0035]加載殼程序的動態(tài)鏈接庫a.so,運行a.so中的代碼對加密后的原程序源碼進行解密;
[0036]加載殼程序的動態(tài)鏈接庫b.so,運行b.so中的代碼對解密后的原程序源碼進行內(nèi)存布局;
[0037]加載殼程序的動態(tài)鏈接庫c.so,運行c.so中的代碼對布局好的源程序源碼進行重定向,并跳轉(zhuǎn)到原程序的啟動代碼處;
[0038]12)原程序正常啟動。
[0039]在安卓系統(tǒng)中,Hook函數(shù)即鉤子函數(shù),是一個處理消息的程序段,通過系統(tǒng)調(diào)用,把它掛入系統(tǒng)。每當特定的消息發(fā)出,在沒有到達目的窗口前,鉤子函數(shù)(程序)就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán),這時鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強制結(jié)束消息的傳遞。本發(fā)明提供的查殼方法通過使用Hook函數(shù)針對殼程序?qū)ο到y(tǒng)函數(shù)和特征函數(shù)的調(diào)用進行監(jiān)控,讓加殼的程序運行在部署了監(jiān)控程序的環(huán)境中,一旦被監(jiān)控的函數(shù)被調(diào)用,則跳轉(zhuǎn)到hook函數(shù)中進行記錄,從而獲得加殼軟件對系統(tǒng)函數(shù)和特征函數(shù)的調(diào)用特征,作為檢測特征;再通過特征比對,得到加殼的程序相應(yīng)的殼程序的類型。
[0040]圖2是本實施例基于APK加殼軟件動態(tài)行為使用通用系統(tǒng)函數(shù)特征庫和特征函數(shù)特征庫進行查殼的流程框圖。本發(fā)明提供的基于APK加殼軟件動態(tài)行為的查殼方法包括如下步驟:
[0041]I)分別檢測APK加殼軟件對通用系統(tǒng)函數(shù)和特征函數(shù)的調(diào)用行為,構(gòu)造得到所述APK加殼軟件的加殼函數(shù)調(diào)用特征,包括加殼調(diào)用通用系統(tǒng)函數(shù)特征和加殼調(diào)用特征函數(shù)特征;
[0042]步驟I)所述檢測APK加殼軟件具體為通過分別檢測多種類型的加殼軟件,得到所述多種類型APK加殼軟件的加殼調(diào)用通用系統(tǒng)函數(shù)特征和加殼調(diào)用特征函數(shù)特征,建立多種類型加殼軟件的加殼調(diào)用通用系統(tǒng)函數(shù)特征和加殼調(diào)用特征函數(shù)特征數(shù)據(jù)庫。
[0043]圖3是本發(fā)明實施例構(gòu)造通用系統(tǒng)函數(shù)特征庫的流程框圖;步驟I)所述檢測APK加殼軟件對通用系統(tǒng)函數(shù)的調(diào)用行為,具體為:Hook函數(shù)加載動態(tài)鏈接庫函數(shù),通過Hook函數(shù)按順序輸出所加載的動態(tài)鏈接庫序列,該序列的庫名、順序和數(shù)量即加殼調(diào)用通用系統(tǒng)函數(shù)特征。本實施例中,具體地,檢測APK加殼軟件對通用系統(tǒng)函數(shù)的調(diào)用