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