本申請涉及智能終端安全
技術(shù)領(lǐng)域:
:,尤其涉及一種應(yīng)用程序樣本的分類方法及裝置。
背景技術(shù):
::隨著科技發(fā)展,智能終端具有越來越多的功能。例如,人們的手機(jī)從傳統(tǒng)的GSM、TDMA數(shù)字手機(jī)轉(zhuǎn)向了擁有能夠處理多媒體資源、提供網(wǎng)頁瀏覽、電話會議、電子商務(wù)等多種信息服務(wù)的智能手機(jī)。然而,品種日益繁多的手機(jī)惡意代碼攻擊以及形勢日益嚴(yán)峻的個(gè)人數(shù)據(jù)安全問題也隨之而來,越來越多的手機(jī)病毒讓智能手機(jī)用戶飽受其苦。目前,為提高手機(jī)病毒識別的效率,業(yè)界可以通過預(yù)先根據(jù)應(yīng)用程序的相似度,將大量的應(yīng)用程序樣本進(jìn)行分類,以得到由相似度較高的多個(gè)應(yīng)用程序樣本構(gòu)成的家族。這樣,在識別手機(jī)病毒應(yīng)用時(shí),若發(fā)現(xiàn)某應(yīng)用程序?qū)儆诓《緫?yīng)用的家族,則直接可以判定其為病毒樣本?,F(xiàn)有技術(shù)中,通常是通過人工篩選方式來對大量的應(yīng)用程序樣本進(jìn)行分類,隨著移動平臺應(yīng)用的越來越多,人工分類的效率不高。技術(shù)實(shí)現(xiàn)要素:本申請實(shí)施例提供一種克服上述問題或者至少部分地解決上述問題的應(yīng)用程序樣本的分類方法及裝置。本申請實(shí)施例采用下述技術(shù)方案:一種應(yīng)用程序樣本的分類方法,包括:獲取待分類的應(yīng)用程序樣本集合中的第一應(yīng)用程序樣本的第一虛擬機(jī)執(zhí) 行文件;對所述第一虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第一函數(shù)信息結(jié)構(gòu),提取所述反編譯的第一函數(shù)信息結(jié)構(gòu)中的第一函數(shù)指令序列;獲取待分類的應(yīng)用程序樣本集合中的第二應(yīng)用程序樣本的第二虛擬機(jī)執(zhí)行文件;對所述第二虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第二函數(shù)信息結(jié)構(gòu),提取所述反編譯的第二函數(shù)信息結(jié)構(gòu)中的第二函數(shù)指令序列;確定所述第一函數(shù)指令序列與所述第二函數(shù)指令序列之間的編輯距離;判斷所述編輯距離是否小于預(yù)設(shè)閾值;若是,將所述第一應(yīng)用程序樣本和所述第二應(yīng)用程序樣本劃分到同一類別。優(yōu)選地,所述第一函數(shù)指令序列是由所述第一函數(shù)信息結(jié)構(gòu)包含的機(jī)器碼字段中每一行的前n位字符組成的序列,所述第二函數(shù)指令序列是由所述第二函數(shù)信息結(jié)構(gòu)包含的機(jī)器碼字段中每一行的前n位字符組成的序列。優(yōu)選地,判斷所述編輯距離是否小于預(yù)設(shè)閾值之前,所述方法還包括:確定所述第一函數(shù)指令序列或所述第二函數(shù)指令序列的字符總數(shù);將所述字符總數(shù)與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè)數(shù)值介于0~1之間。優(yōu)選地,判斷所述編輯距離是否小于預(yù)設(shè)閾值之前,所述方法還包括:確定所述第一函數(shù)指令序列和所述第二函數(shù)指令序列的字符數(shù)之和;將所述字符數(shù)之和與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè)數(shù)值介于0~1之間。一種應(yīng)用程序樣本的分類方法,包括:獲取待分類的應(yīng)用程序樣本集合中的第一應(yīng)用程序樣本的第一虛擬機(jī)執(zhí)行文件;對所述第一虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第一函數(shù)信息結(jié)構(gòu), 提取所述反編譯的第一函數(shù)信息結(jié)構(gòu)中的第一助記符序列;獲取待分類的應(yīng)用程序樣本集合中的第二應(yīng)用程序樣本的第二虛擬機(jī)執(zhí)行文件;對所述第二虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第二函數(shù)信息結(jié)構(gòu),提取所述反編譯的第二函數(shù)信息結(jié)構(gòu)中的第二助記符序列;確定所述第一助記符序列與所述第二助記符序列之間的編輯距離;判斷所述編輯距離是否小于預(yù)設(shè)閾值;若是,將所述第一應(yīng)用程序樣本和所述第二應(yīng)用程序樣本劃分到同一類別。優(yōu)選地,所述第一助記符序列是由所述第一函數(shù)信息結(jié)構(gòu)包含的代碼字段中的函數(shù)字符組成的序列,所述第二助記符序列是由所述第二函數(shù)信息結(jié)構(gòu)包含的代碼字段中的函數(shù)字符組成的序列。優(yōu)選地,判斷所述編輯距離是否小于預(yù)設(shè)閾值之前,所述方法還包括:確定所述第一助記符序列或所述第二助記符序列的字符總數(shù);將所述字符總數(shù)與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè)數(shù)值介于0~1之間。一種應(yīng)用程序樣本的分類裝置,包括:第一獲取單元,用于獲取待分類的應(yīng)用程序樣本集合中的第一應(yīng)用程序樣本的第一虛擬機(jī)執(zhí)行文件;第一提取單元,用于對所述第一虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第一函數(shù)信息結(jié)構(gòu),提取所述反編譯的第一函數(shù)信息結(jié)構(gòu)中的第一函數(shù)指令序列;第二獲取單元,用于獲取待分類的應(yīng)用程序樣本集合中的第二應(yīng)用程序樣本的第二虛擬機(jī)執(zhí)行文件;第二提取單元,用于對所述第二虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第二函數(shù)信息結(jié)構(gòu),提取所述反編譯的第二函數(shù)信息結(jié)構(gòu)中的第二函數(shù)指令序 列;確定單元,用于確定所述第一函數(shù)指令序列與所述第二函數(shù)指令序列之間的編輯距離;判斷單元,用于判斷所述編輯距離是否小于預(yù)設(shè)閾值;分類單元,用于在所述編輯距離小于預(yù)設(shè)閾值時(shí),將所述第一應(yīng)用程序樣本和所述第二應(yīng)用程序樣本劃分到同一類別。優(yōu)選地,所述第一函數(shù)指令序列是由所述第一函數(shù)信息結(jié)構(gòu)包含的機(jī)器碼字段中每一行的前n位字符組成的序列,所述第二函數(shù)指令序列是由所述第二函數(shù)信息結(jié)構(gòu)包含的機(jī)器碼字段中每一行的前n位字符組成的序列。優(yōu)選地,所述裝置還包括:預(yù)設(shè)閾值確定單元,用于在判斷所述編輯距離是否小于預(yù)設(shè)閾值之前,確定所述第一函數(shù)指令序列或所述第二函數(shù)指令序列的字符總數(shù);將所述字符總數(shù)與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè)數(shù)值介于0~1之間。優(yōu)選地,所述裝置還包括:預(yù)設(shè)閾值確定單元,用于在判斷所述編輯距離是否小于預(yù)設(shè)閾值之前,確定所述第一函數(shù)指令序列和所述第二函數(shù)指令序列的字符數(shù)之和;將所述字符數(shù)之和與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè)數(shù)值介于0~1之間。一種應(yīng)用程序樣本的分類裝置,包括:第一獲取單元,用于獲取待分類的應(yīng)用程序樣本集合中的第一應(yīng)用程序樣本的第一虛擬機(jī)執(zhí)行文件;第一提取單元,用于對所述第一虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第一函數(shù)信息結(jié)構(gòu),提取所述反編譯的第一函數(shù)信息結(jié)構(gòu)中的第一助記符序列;第二獲取單元,用于獲取待分類的應(yīng)用程序樣本集合中的第二應(yīng)用程序樣本的第二虛擬機(jī)執(zhí)行文件;第二提取單元,用于對所述第二虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第二函數(shù)信息結(jié)構(gòu),提取所述反編譯的第二函數(shù)信息結(jié)構(gòu)中的第二助記符序列;確定單元,用于確定所述第一助記符序列與所述第二助記符序列之間的編輯距離;判斷單元,用于判斷所述編輯距離是否小于預(yù)設(shè)閾值;分類單元,用于在所述編輯距離小于預(yù)設(shè)閾值時(shí),將所述第一應(yīng)用程序樣本和所述第二應(yīng)用程序樣本劃分到同一類別。優(yōu)選地,所述第一助記符序列是由所述第一函數(shù)信息結(jié)構(gòu)包含的代碼字段中的函數(shù)字符組成的序列,所述第二助記符序列是由所述第二函數(shù)信息結(jié)構(gòu)包含的代碼字段中的函數(shù)字符組成的序列。優(yōu)選地,所述裝置還包括:預(yù)設(shè)閾值確定單元,用于在判斷所述編輯距離是否小于預(yù)設(shè)閾值之前,確定所述第一助記符序列或所述第二助記符序列的字符總數(shù);將所述字符總數(shù)與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè)數(shù)值介于0~1之間。本申請實(shí)施例采用的上述至少一個(gè)技術(shù)方案能夠達(dá)到以下有益效果:通過對待分類的應(yīng)用程序樣本集合中的第一、第二應(yīng)用程序樣本的虛擬機(jī)執(zhí)行文件進(jìn)行分析和反編譯,分別得到上述第一、第二應(yīng)用程序樣本對應(yīng)的第一、第二函數(shù)指令序列(或助記符序列),隨后,利用編輯距離算法確定上述第一、第二函數(shù)指令序列(或助記符序列)的編輯距離,通過判斷上述編輯距離是否小于預(yù)設(shè)閾值,并在小于時(shí),將上述第一、第二應(yīng)用程序樣本劃分到同一類別。通過上述方法,可以將待分類的應(yīng)用程序樣本集合中相似度較近(編輯距離小于預(yù)設(shè)閾值)的應(yīng)用程序樣本劃分到同一類,得到家族樣本,從而實(shí)現(xiàn)應(yīng)用程序樣本集合中樣本的自動分類,提高分類的效率。附圖說明此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實(shí)施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:圖1為本申請一實(shí)施例中提供的應(yīng)用程序樣本的分類方法的流程圖;圖2為本申請實(shí)施例中對dex文件進(jìn)行反編譯得到的函數(shù)信息結(jié)構(gòu)的示例;圖3為本申請另一實(shí)施例中提供的應(yīng)用程序樣本的分類方法的流程圖;圖4為本申請一實(shí)施例中提供的應(yīng)用程序樣本的分類裝置的模塊圖。具體實(shí)施方式為使本申請的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本申請具體實(shí)施例及相應(yīng)的附圖對本申請技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實(shí)施例僅是本申請一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾堉械膶?shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本申請保護(hù)的范圍。以安卓(Android)操作系統(tǒng)為例,包括應(yīng)用程序?qū)?app層)和系統(tǒng)框架層(framework層),至于從功能劃分上有可能包括的其他層本申請則不作討論。其中,通常app層可以理解為上層,負(fù)責(zé)與用戶交互的界面,例如應(yīng)用程序維護(hù)、以及點(diǎn)擊頁面時(shí)識別不同種類的點(diǎn)擊內(nèi)容從而顯示不同的上下文菜單等。通常framework層作為中間層,這一層的主要職責(zé)是,將app層獲得的用戶請求,如啟動用用程序、點(diǎn)擊鏈接、點(diǎn)擊保存圖片之類,轉(zhuǎn)發(fā)往下層去;將下層處理好的內(nèi)容,或者通過消息,或者通過中間代理類,來分發(fā)至上層,對用戶展現(xiàn)出來。Dalvik是用于Android平臺的Java虛擬機(jī)。Dalvik經(jīng)過優(yōu)化,允許在有限的內(nèi)存中同時(shí)運(yùn)行多個(gè)虛擬機(jī)的實(shí)例,并且每一個(gè)Dalvik應(yīng)用作為一個(gè)獨(dú)立的Linux進(jìn)程執(zhí)行。獨(dú)立的進(jìn)程可以防止在虛擬機(jī)崩潰的時(shí)候所有程序都被關(guān)閉。 Dalvik虛擬機(jī)可以支持已轉(zhuǎn)換為dex(DalvikExecutable)格式的Java應(yīng)用程序的運(yùn)行,dex格式是專為Dalvik設(shè)計(jì)的一種壓縮格式,適合內(nèi)存和處理器速度有限的系統(tǒng)??梢?,在Android系統(tǒng)中,dex文件是可以直接在Dalvik虛擬機(jī)(DalvikVM)中加載運(yùn)行的虛擬機(jī)執(zhí)行文件。通過ADT(AndroidDevelopmentTools),經(jīng)過復(fù)雜的編譯,可以把java源代碼轉(zhuǎn)換為dex文件。dex文件是針對嵌入式系統(tǒng)優(yōu)化的結(jié)果,Dalvik虛擬機(jī)的指令碼并不是標(biāo)準(zhǔn)的Java虛擬機(jī)指令碼,而是使用了自己獨(dú)有的一套指令集。dex文件中共用了很多類名稱、常量字符串,使它的體積比較小,運(yùn)行效率也比較高。以下結(jié)合附圖,詳細(xì)說明本申請各實(shí)施例提供的技術(shù)方案。圖1為本申請一實(shí)施例中提供的應(yīng)用程序樣本的分類方法的流程,包括:S101:獲取待分類的應(yīng)用程序樣本集合中的第一應(yīng)用程序樣本的第一虛擬機(jī)執(zhí)行文件。本申請的目的是對應(yīng)用程序樣本集合Q中的若干待分類的應(yīng)用程序樣本按照相似度進(jìn)行自動分類。上述虛擬機(jī)執(zhí)行文件例如是dex文件。如前所述,Android操作系統(tǒng)包括應(yīng)用程序?qū)?app層)和系統(tǒng)框架層(framework層),本申請重點(diǎn)在于對app層的研究和改進(jìn)。但是,本領(lǐng)域技術(shù)人員理解,當(dāng)Android啟動時(shí),DalvikVM監(jiān)視所有的程序(APK文件)和框架,并且為它們創(chuàng)建一個(gè)依存關(guān)系樹。DalvikVM通過這個(gè)依存關(guān)系樹來為每個(gè)程序優(yōu)化代碼并存儲在Dalvik緩存(dalvik-cache)中。這樣,所有程序在運(yùn)行時(shí)都會使用優(yōu)化過的代碼。當(dāng)一個(gè)程序(或者框架庫)發(fā)生變更,DalvikVM將會重新優(yōu)化代碼并且再次將其存在緩存中。在cache/dalvik-cache是存放system上的程序生成的dex文件,而data/dalvik-cache則是存放data/app生成的dex文件。也就是,本申請重點(diǎn)在于對data/app生成的dex文件進(jìn)行的分析和處理,但是應(yīng)該理解,對于system上的程序生成的dex文件,本申請的理論和操作同樣適用。關(guān)于獲取dex文件的方式,可以通過解析APK(AndroidPackage,Android 安裝包)獲得。APK文件其實(shí)是zip格式的一個(gè)壓縮包,但后綴名被修改為apk,通過UnZip解壓后,就可以得到Dex文件。S102:對所述第一虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第一函數(shù)信息結(jié)構(gòu),提取所述反編譯的第一函數(shù)信息結(jié)構(gòu)中的第一函數(shù)指令序列。本申請實(shí)施例中,所述第一函數(shù)指令序列是由所述第一函數(shù)信息結(jié)構(gòu)包含的機(jī)器碼字段中每一行的前n位字符組成的指令序列。對dex文件進(jìn)行反編譯(或稱為:反匯編)有多種方式。第一種方式是,根據(jù)dex文件格式對dex文件進(jìn)行解析,得到每個(gè)類的函數(shù)信息結(jié)構(gòu)體;根據(jù)函數(shù)信息結(jié)構(gòu)體中的字段,確定dex文件的函數(shù)的位置及大小,得到反編譯的函數(shù)信息結(jié)構(gòu)。其中,通過解析函數(shù)信息結(jié)構(gòu)體,得到指示dex文件的函數(shù)位置的字節(jié)碼數(shù)組字段以及指示dex文件的函數(shù)大小的列表長度字段,從而確定dex文件的函數(shù)的位置及大小。第二種方式是,利用dex文件反編譯工具,將dex文件反編譯為虛擬機(jī)字節(jié)碼。如前介紹的,Dalvik虛擬機(jī)運(yùn)行的是Dalvik字節(jié)碼,其以一個(gè)dex(DalvikExecutable)可執(zhí)行文件形式存在,Dalvik虛擬機(jī)通過解釋dex文件來執(zhí)行代碼。目前有一些工具,可將DEX文件反匯編成Dalvik匯編代碼。這類dex文件反編譯工具包括:baksmali、Dedexer1.26、dexdump、dexinspecto03-12-12r、IDAPro、androguard、dex2jar、010Editor等??梢姡ㄟ^對dex文件的反編譯,可以得到反編譯的所有函數(shù)信息結(jié)構(gòu)。其中,函數(shù)信息結(jié)構(gòu)包含函數(shù)執(zhí)行代碼,本申請實(shí)施例中,是由虛擬機(jī)指令序列和虛擬機(jī)助記符序列構(gòu)成的,如下面的例子,由DalvikVM的指令序列和DalvikVM的助記符序列構(gòu)成函數(shù)信息結(jié)構(gòu)。例如,圖2所示的是本申請實(shí)施例中對dex文件進(jìn)行反編譯得到的函數(shù)信息結(jié)構(gòu)的示例??梢?,dex文件被反編譯成DalvikVM的指令序列和DalvikVM的助記符序列。如上圖2的例子,在反編譯得到的函數(shù)信息結(jié)構(gòu)中,機(jī)器碼字段中的每一行的前2個(gè)數(shù)字是指令序列(上例子左側(cè)被圈部分),而指令序列對應(yīng)的部分為助記符(上例子右側(cè),部分被圈,未全部選擇)。助記符主要是為了方便用戶交流和代碼編寫。如上例子,dex文件經(jīng)過反編譯就可以得到函數(shù)的指令序列為:“125438710c6e0c6e0a3854546e0c6e546e0c6e0c38720a391238546e54710e012854136e”。助記符序列為:“const/4iget-objectif-eqzinvoke-staticmove-result-objectinvoke-virtualmove-result-objectinvoke-virtualmove-resultif-eqziget-objectiget-objectinvoke-virtualmove-result-objectinvoke-virtualiget-objectinvoke-virtualmove-result-objectinvoke-virtualmove-result-objectif-eqzinvoke-interfacemove-resultif-nezconst/4if-eqziget-objectinvoke-virtualiget-objectinvoke-staticreturn-voidmovegotoiget-objectconst/16invoke-virtual”。S103:獲取待分類的應(yīng)用程序樣本集合中的第二應(yīng)用程序樣本的第二虛擬機(jī)執(zhí)行文件。S104:對所述第二虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第二函數(shù)信息結(jié)構(gòu),提取所述反編譯的第二函數(shù)信息結(jié)構(gòu)中的第二函數(shù)指令序列。本申請實(shí)施例中,所述第二函數(shù)指令序列是由所述第二函數(shù)信息結(jié)構(gòu)包含的機(jī)器碼字段中每一行的前n位字符組成的指令序列。上述步驟S103和S104的具體過程可以參照上述步驟S101和S102的內(nèi)容。S105:確定所述第一函數(shù)指令序列與所述第二函數(shù)指令序列之間的編輯距離。上述第一應(yīng)用程序樣本和第二應(yīng)用程序樣本是上述待分類的應(yīng)用程序樣本集合Q中的任意未被分類的兩個(gè)樣本。在實(shí)際應(yīng)用過程中,當(dāng)對上述應(yīng)用程序樣本集合Q的首個(gè)樣本進(jìn)行分類時(shí)(還沒有劃分任何類別),可以新建一個(gè)類別A并將上述首個(gè)樣本歸入該類別A,這樣,在對上述應(yīng)用程序樣本集合Q的第二個(gè)樣本進(jìn)行分類時(shí),即可通過判定該第二個(gè)樣本是否屬于上述首個(gè)樣本 的同類,若是,則繼續(xù)將該第二個(gè)樣本歸入上述首個(gè)樣本的類別A,若不是,則可以繼續(xù)新建一個(gè)類別B并將該第二個(gè)樣本歸入該類別B,以此類推。S106:判斷所述編輯距離是否小于預(yù)設(shè)閾值。本申請實(shí)施例中,通過計(jì)算編輯距離的方式來確定上述第一、第二函數(shù)指令序列的相似度。編輯距離(EditDistance),又稱Levenshtein距離,是指兩個(gè)字串之間,由一個(gè)轉(zhuǎn)成另一個(gè)所需的最少編輯操作次數(shù)。比如:要計(jì)算cafe和coffee的編輯距離,將cafe操作為coffee的過程是:cafe→caffe→coffe→coffee,則得到編輯距離是3。一般地,對于兩個(gè)函數(shù)指令序列,如果這兩個(gè)函數(shù)指令序列之間的編輯距離越小,表明這兩個(gè)函數(shù)指令序列相似度越高,也就是表明待分類的上述第一、第二應(yīng)用程序樣本的代碼越有可能屬于同族或同類別。S107:若所述編輯距離小于預(yù)設(shè)閾值,將所述第一應(yīng)用程序樣本和所述第二應(yīng)用程序樣本劃分到同一類別。例如,通過步驟S102得到的第一函數(shù)指令序列為:“125438710c6e0c6e0a3854546e0c6e546e0c6e0c38720a391238546e54710e012854136e”。通過步驟S104得到的第二函數(shù)指令序列為:“123854710c6e0c6e0a3854546e0c6e546e0c6e0c38720a391238546e54710e012854136e”。通過計(jì)算上述第一、第二函數(shù)指令序列的編輯距離,得到編輯距離=4,假設(shè)預(yù)設(shè)閾值是5,則通過比對發(fā)現(xiàn)上述兩個(gè)指令序列的編輯距離是小于上述預(yù)設(shè)閾值的,故可以確定上述第一、第二函數(shù)指令序列的相似度滿足預(yù)設(shè)要求,也就是說,上述第一、第二應(yīng)用程序樣本屬于同族或同類別。本申請實(shí)施例中,為了提高確定上述預(yù)設(shè)閾值的準(zhǔn)確性,進(jìn)而提高樣本分類的精確性,在上述步驟S106之前,所述方法還可以包括:確定所述第一函數(shù)指令序列或所述第二函數(shù)指令序列的字符總數(shù);將所述字符總數(shù)與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè) 數(shù)值介于0~1之間。舉例來說,可以確定上述得到的第一函數(shù)指令序列:“123854710c6e0c6e0a3854546e0c6e546e0c6e0c38720a391238546e54710e012854136e”或上述第二函數(shù)指令序列:“123854710c6e0c6e0a3854546e0c6e546e0c6e0c38720a391238546e54710e012854136e”的字符總數(shù)是72,則可以設(shè)定預(yù)設(shè)數(shù)值是0.05(介于0~1之間),最終可以確定預(yù)設(shè)閾值為72*0.05≈4。其中,該預(yù)設(shè)數(shù)值也是可以是經(jīng)驗(yàn)值。通過上述步驟,可以將相似度達(dá)到95%以上的函數(shù)指令序列的應(yīng)用程序樣本劃分到同一個(gè)類別。在本申請另一種實(shí)施例中,上述步驟S107之前,還可以包括:確定所述第一函數(shù)指令序列和所述第二函數(shù)指令序列的字符數(shù)之和;將所述字符數(shù)之和與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè)數(shù)值介于0~1之間。舉例而言,第一、第二函數(shù)指令序列的字符數(shù)之和是144,則以該字符數(shù)之和和預(yù)設(shè)數(shù)值的乘積來確定上述預(yù)設(shè)閾值。需要說明的是,本申請不限定采用何種惡意代碼防護(hù)方案對惡意代碼進(jìn)行檢測,例如,可以采用上面介紹的樣本特征查殺(特征值掃描)、基于虛擬機(jī)查殺或者啟發(fā)式查殺,另外還可以進(jìn)行相似樣本聚類。而且,對于匹配算法也不作限制,例如,可以采用上面介紹的模糊匹配算法或者相似匹配算法等。圖3為本申請另一實(shí)施例中提供的應(yīng)用程序樣本的分類方法的流程,包括:S201:獲取待分類的應(yīng)用程序樣本集合中的第一應(yīng)用程序樣本的第一虛擬機(jī)執(zhí)行文件;S202:對所述第一虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第一函數(shù)信息結(jié)構(gòu),提取所述反編譯的第一函數(shù)信息結(jié)構(gòu)中的第一助記符序列;本申請實(shí)施例中,所述第一助記符序列是由所述第一函數(shù)信息結(jié)構(gòu)包含的代碼字段中的函數(shù)字符組成的序列。S203:獲取待分類的應(yīng)用程序樣本集合中的第二應(yīng)用程序樣本的第二虛擬機(jī)執(zhí)行文件;S204:對所述第二虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第二函數(shù)信息結(jié)構(gòu),提取所述反編譯的第二函數(shù)信息結(jié)構(gòu)中的第二助記符序列;所述第二助記符序列是由所述第二函數(shù)信息結(jié)構(gòu)包含的代碼字段中的函數(shù)字符組成的序列。S205:確定所述第一助記符序列與所述第二助記符序列之間的編輯距離;S206:判斷所述編輯距離是否小于預(yù)設(shè)閾值;S207:若所述編輯距離小于預(yù)設(shè)閾值,將所述第一應(yīng)用程序樣本和所述第二應(yīng)用程序樣本劃分到同一類別。本申請實(shí)施例中,參照上述內(nèi)容,再判斷所述編輯距離是否小于預(yù)設(shè)閾值的步驟之前,所述方法還包括:確定所述第一助記符序列或所述第二助記符序列的字符總數(shù);將所述字符總數(shù)與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè)數(shù)值介于0~1之間。通過上述過程可以提高樣本分類的精確性。可見,在上述各實(shí)施例提供的方法中,通過對待分類的應(yīng)用程序樣本集合中的第一、第二應(yīng)用程序樣本的虛擬機(jī)執(zhí)行文件進(jìn)行分析和反編譯,分別得到上述第一、第二應(yīng)用程序樣本對應(yīng)的第一、第二函數(shù)指令序列(或助記符序列),隨后,利用編輯距離算法確定上述第一、第二函數(shù)指令序列(或助記符序列)的編輯距離,通過判斷上述編輯距離是否小于預(yù)設(shè)閾值,并在小于時(shí),將上述第一、第二應(yīng)用程序樣本劃分到同一類別。通過上述方法,可以將待分類的應(yīng)用程序樣本集合中相似度較近(編輯距離小于預(yù)設(shè)閾值)的應(yīng)用程序樣本劃分到同一類,得到家族樣本,從而實(shí)現(xiàn)應(yīng)用程序樣本集合中樣本的自動分類,提高分類的效率。圖4為本申請一實(shí)施例中提供的應(yīng)用程序樣本的分類裝置的模塊圖。其中,該裝置中各單元的功能與上述方法中各步驟的功能類似,故該裝置可以參照上述方法實(shí)施例的具體內(nèi)容。該裝置包括:第一獲取單元401,用于獲取待分類的應(yīng)用程序樣本集合中的第一應(yīng)用程序樣本的第一虛擬機(jī)執(zhí)行文件;第一提取單元402,用于對所述第一虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第一函數(shù)信息結(jié)構(gòu),提取所述反編譯的第一函數(shù)信息結(jié)構(gòu)中的第一函數(shù)指令序列;第二獲取單元403,用于獲取待分類的應(yīng)用程序樣本集合中的第二應(yīng)用程序樣本的第二虛擬機(jī)執(zhí)行文件;第二提取單元404,用于對所述第二虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第二函數(shù)信息結(jié)構(gòu),提取所述反編譯的第二函數(shù)信息結(jié)構(gòu)中的第二函數(shù)指令序列;確定單元405,用于確定所述第一函數(shù)指令序列與所述第二函數(shù)指令序列之間的編輯距離;判斷單元406,用于判斷所述編輯距離是否小于預(yù)設(shè)閾值;分類單元407,用于在所述編輯距離小于預(yù)設(shè)閾值時(shí),將所述第一應(yīng)用程序樣本和所述第二應(yīng)用程序樣本劃分到同一類別。本申請實(shí)施例中,為了提高確定上述預(yù)設(shè)閾值的準(zhǔn)確性,進(jìn)而提高樣本分類的精確性,所述裝置還包括:預(yù)設(shè)閾值確定單元,用于在將所述第一應(yīng)用程序樣本和所述第二應(yīng)用程序樣本劃分到同一類別之前,確定所述第一函數(shù)指令序列或所述第二函數(shù)指令序列的字符總數(shù);將所述字符總數(shù)與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè)數(shù)值介于0~1之間。本申請實(shí)施例中,為了提高確定上述預(yù)設(shè)閾值的準(zhǔn)確性,進(jìn)而提高樣本分類的精確性,所述裝置還包括:預(yù)設(shè)閾值確定單元,用于在將所述第一應(yīng)用程序樣本和所述第二應(yīng)用程序樣本劃分到同一類別之前,確定所述第一函數(shù)指令序列和所述第二函數(shù)指令序列的字符數(shù)之和;將所述字符數(shù)之和與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè)數(shù)值介于0~1之間。本申請實(shí)施例中,所述第一提取單元402具體用于:根據(jù)虛擬機(jī)執(zhí)行文件格式對第一虛擬機(jī)執(zhí)行文件進(jìn)行解析,得到每個(gè)類的函數(shù)信息結(jié)構(gòu)體;根據(jù)所述函數(shù)信息結(jié)構(gòu)體中的字段,確定所述第一虛擬機(jī)執(zhí)行文件的函數(shù)的位置及大小,得到所述反編譯的第一函數(shù)信息結(jié)構(gòu);所述第一提取單元404具體用于:根據(jù)虛擬機(jī)執(zhí)行文件格式對第二虛擬機(jī)執(zhí)行文件進(jìn)行解析,得到每個(gè)類的函數(shù)信息結(jié)構(gòu)體;根據(jù)所述函數(shù)信息結(jié)構(gòu)體中的字段,確定所述第二虛擬機(jī)執(zhí)行文件的函數(shù)的位置及大小,得到所述反編譯的第二函數(shù)信息結(jié)構(gòu)。作為替代的實(shí)施例,上述應(yīng)用程序樣本的分類裝置,包括:第一獲取單元401,用于獲取待分類的應(yīng)用程序樣本集合中的第一應(yīng)用程序樣本的第一虛擬機(jī)執(zhí)行文件;第一提取單元402,用于對所述第一虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第一函數(shù)信息結(jié)構(gòu),提取所述反編譯的第一函數(shù)信息結(jié)構(gòu)中的第一助記符序列;第二獲取單元403,用于獲取待分類的應(yīng)用程序樣本集合中的第二應(yīng)用程序樣本的第二虛擬機(jī)執(zhí)行文件;第二提取單元404,用于對所述第二虛擬機(jī)執(zhí)行文件進(jìn)行反編譯得到反編譯的第二函數(shù)信息結(jié)構(gòu),提取所述反編譯的第二函數(shù)信息結(jié)構(gòu)中的第二助記符序列;確定單元405,用于確定所述第一助記符序列與所述第二助記符序列之間的編輯距離;判斷單元406,用于判斷所述編輯距離是否小于預(yù)設(shè)閾值;分類單元407,用于在所述編輯距離小于預(yù)設(shè)閾值時(shí),將所述第一應(yīng)用程序樣本和所述第二應(yīng)用程序樣本劃分到同一類別。本申請實(shí)施例中,為了提高確定上述預(yù)設(shè)閾值的準(zhǔn)確性,進(jìn)而提高樣本分類的精確性,所述裝置還包括:預(yù)設(shè)閾值確定單元,用于在判斷所述編輯距離是否小于預(yù)設(shè)閾值之前,確 定所述第一助記符序列或所述第二助記符序列的字符總數(shù);將所述字符總數(shù)與預(yù)設(shè)數(shù)值的乘積確定為所述預(yù)設(shè)閾值;其中,所述預(yù)設(shè)數(shù)值介于0~1之間。在上述各實(shí)施例提供的裝置中,通過對待分類的應(yīng)用程序樣本集合中的第一、第二應(yīng)用程序樣本的虛擬機(jī)執(zhí)行文件進(jìn)行分析和反編譯,分別得到上述第一、第二應(yīng)用程序樣本對應(yīng)的第一、第二函數(shù)指令序列(或助記符序列),隨后,利用編輯距離算法確定上述第一、第二函數(shù)指令序列(或助記符序列)的編輯距離,通過判斷上述編輯距離是否小于預(yù)設(shè)閾值,并在小于時(shí),將上述第一、第二應(yīng)用程序樣本劃分到同一類別。通過上述方法,可以將待分類的應(yīng)用程序樣本集合中相似度較近(編輯距離小于預(yù)設(shè)閾值)的應(yīng)用程序樣本劃分到同一類,得到家族樣本,從而實(shí)現(xiàn)應(yīng)用程序樣本集合中樣本的自動分類,提高分類的效率。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。本申請是參照根據(jù)本申請實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。這些計(jì)算機(jī)程序指令也可存儲在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲器中,使得存儲在該計(jì)算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè) 流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flashRAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲器(SRAM)、動態(tài)隨機(jī)存取存儲器(DRAM)、其他類型的隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。以上所述僅為本申請的實(shí)施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3