欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種惡意軟件感染后宿主軟件中惡意代碼識(shí)別方法

文檔序號(hào):10512605閱讀:299來源:國(guó)知局
一種惡意軟件感染后宿主軟件中惡意代碼識(shí)別方法【專利摘要】一種惡意軟件感染后宿主軟件中惡意代碼識(shí)別方法。首先,使用遞歸下降反匯編方法獲得宿主軟件的反匯編代碼,其中需要獲得機(jī)器指令對(duì)應(yīng)的反匯編代碼、代碼中出現(xiàn)的各種引用信息和導(dǎo)入表函數(shù)信息;然后,根據(jù)引用情況確定代碼序列之間的斷點(diǎn),并將兩個(gè)斷點(diǎn)之間的代碼序列構(gòu)成一個(gè)代碼塊;接著根據(jù)相鄰代碼塊之間的關(guān)系進(jìn)行合并;并且,根據(jù)對(duì)導(dǎo)入表函數(shù)使用情況尋找最長(zhǎng)的未使用導(dǎo)入表函數(shù)的代碼塊序列;最后根據(jù)惡意代碼與宿主軟件代碼之間的調(diào)用關(guān)系確定惡意代碼的起始軟件塊和結(jié)束軟件塊,這樣就最終獲得所需要的惡意代碼序列。該方法可以作為宿主軟件中惡意代碼識(shí)別的通用方法,為進(jìn)一步的軟件復(fù)原提供具體的代碼位置信息?!緦@f明】一種惡意軟件感染后宿主軟件中惡意代碼識(shí)別方法
技術(shù)領(lǐng)域
[0001]本發(fā)明屬于計(jì)算機(jī)惡意代碼識(shí)別方法,特別是被感染后宿主軟件中注入惡意代碼的識(shí)別方法?!?br>背景技術(shù)
】[0002]Windows平臺(tái)下,許多惡意軟件通過感染技術(shù)將有效的代碼注入到正常文件中。惡意軟件會(huì)通過感染技術(shù)對(duì)一些文件進(jìn)行批量注入,例如一些WIN32型計(jì)算機(jī)病毒會(huì)遍歷當(dāng)前目錄或重于系統(tǒng)目錄中的文件,對(duì)符合感染條件的所有PE文件進(jìn)行惡意代碼注入;一些惡意軟件會(huì)對(duì)一些關(guān)鍵或常用的系統(tǒng)文件進(jìn)行感染,如Window系統(tǒng)的explorer.exe,常用的.dll文件,大大增加了惡意代碼被執(zhí)行的機(jī)會(huì)。要將這些文件全部檢測(cè)以及正確處理會(huì)花費(fèi)很大代價(jià)。[0003]就絕大多數(shù)的Windows平臺(tái)下PE(PortableExecutables)格式的可執(zhí)行文件而言,在編譯階段和裝載進(jìn)入內(nèi)存時(shí),系統(tǒng)會(huì)對(duì)其進(jìn)行一些優(yōu)化和格式要求,使得代碼本身具有統(tǒng)一性。被惡意代碼注入之后,原有代碼和后注入代碼之間的編碼風(fēng)格、結(jié)構(gòu)特點(diǎn)等就會(huì)存在許多差異。原有軟件在編程為了提高開發(fā)效率,會(huì)經(jīng)常使用庫(kù)函數(shù),這些庫(kù)函數(shù)有標(biāo)準(zhǔn)的參數(shù),比較容易被識(shí)別;注入代碼為了減少代碼數(shù)量,注重代碼執(zhí)行效率而非代碼的重用性。在調(diào)用系統(tǒng)函數(shù)方面,原有代碼在編譯期間會(huì)直接將相應(yīng)的動(dòng)態(tài)鏈接庫(kù)中的相關(guān)函數(shù)填入到導(dǎo)入表中,可以直接通過call指令直接調(diào)用導(dǎo)入表中的函數(shù);而注入代碼事先難以獲知導(dǎo)入表中函數(shù)的邏輯地址,因此不能直接調(diào)用這些函數(shù)。本專利根據(jù)被感染軟件控制流的異常表現(xiàn),研究一種通用的注入惡意代碼識(shí)別方法。[0004]“良性”感染的定義:大多數(shù)惡意代碼感染為了做到隱蔽執(zhí)行,都不希望破壞宿主軟件原有功能,本發(fā)明中稱這種計(jì)算機(jī)軟件感染為“良性”感染。[0005]N-grams序列的定義:N-Grams序列是指相鄰的η個(gè)元素組成序列的表達(dá)方式,本發(fā)明中元素是指合并后的代碼塊。【
發(fā)明內(nèi)容】[0006]本發(fā)明的目的是提供一種計(jì)算機(jī)軟件被“良性”感染后宿主軟件中被注入的惡意代碼通用識(shí)別方法,為軟件復(fù)原提供準(zhǔn)確有效的依據(jù)。[0007]本發(fā)明的目的是這樣實(shí)現(xiàn)的:一種計(jì)算機(jī)軟件感染后宿主軟件中被注入的惡意代碼通用識(shí)別方法,包括以下三個(gè)階段:1、宿主軟件以中間代碼形式分塊;2、根據(jù)軟件塊之間關(guān)系對(duì)相鄰軟件塊進(jìn)行合并;3、對(duì)注入惡意代碼邊界進(jìn)行識(shí)別;具體步驟如下:I)宿主軟件以中間代碼形式分塊1.1)利用遞歸下降方法對(duì)PE格式的宿主軟件進(jìn)行反匯編,將宿主軟件用反匯編代碼表示;1.2)采用斷點(diǎn)分割的方法獲得反匯編代碼序列形式的代碼塊,用“BasicBlock”符號(hào)表示。將引起或出現(xiàn)控制流轉(zhuǎn)移的指令或位置作為整個(gè)代碼段的斷點(diǎn),兩個(gè)斷點(diǎn)之間的代碼序列就可以作為BasicBlock的內(nèi)容。斷點(diǎn)需要滿足下列條件之一即可:(I)操作符為“jmp”、acair和“retn”的指令,這些指令一定能引起控制流的轉(zhuǎn)移。[0008](2)發(fā)生代碼引用的位置,即“jmp”或“call”的跳轉(zhuǎn)目標(biāo)地址。[0009](3)發(fā)生數(shù)據(jù)引用的位置,即軟件其他位置的代碼對(duì)該地址或地址中的數(shù)據(jù)進(jìn)行數(shù)據(jù)引用。[0010]1.3)兩個(gè)相鄰斷點(diǎn)之間反匯編序列就看做一個(gè)BasicBlock;2)根據(jù)軟件塊之間關(guān)系對(duì)相鄰軟件塊進(jìn)行合并2.1)位置相鄰的BasicBlock,如果并非由外部引用或跳轉(zhuǎn)函數(shù)外部指令引起的分割,可以將其合并。[0011]2.2)相鄰BasicBlock之間因?yàn)閷?duì)外部引用造成分割時(shí),如果低地址存在引用高地址時(shí),兩者可以合并。[0012]2.3)相鄰BasicBlock存在相互引用時(shí)可以合并。[0013]2.4)與相同BasicBlock相互引用時(shí)可以合并。[0014]3)對(duì)注入惡意代碼邊界進(jìn)行識(shí)別3.1)求取未引用導(dǎo)入表函數(shù)的最長(zhǎng)BasicBlock塊連續(xù)序列。這個(gè)序列同時(shí)滿足兩個(gè)條件(I)所有BasicBlock除了調(diào)用了GetProcAddress和LoadLibrary這兩個(gè)導(dǎo)入表函數(shù)之外未引用其它的導(dǎo)入表函數(shù);(2)是宿主軟件中滿足條件(I)的最長(zhǎng)序列。惡意3.2)確定注入惡意代碼起始位置。注入代碼起始位置要么是軟件執(zhí)行的入口位置,要么是外部引用的入口處;注入惡意代碼的起始BasicBlock是原有代碼能夠正常引用的唯一基本塊;3.3)確定注入惡意代碼結(jié)束位置。在注入代碼最尾部BasicBlock之后的基本塊中,可能會(huì)和宿主代碼其他BasicBlock之間發(fā)生引用,但是不會(huì)和引用注入代碼的BasicBlock序列。【附圖說明】[0015]圖1是惡意軟件感染后宿主軟件中惡意代碼識(shí)別方法的流程圖。[0016]【具體實(shí)施方式】[0017]根據(jù)圖1中介紹的流程,【具體實(shí)施方式】5個(gè)步驟:步驟1.遞歸下降反匯編方法獲得宿主軟件的反匯編代碼。遞歸下降的方法是根據(jù)二進(jìn)制軟件中機(jī)器代碼執(zhí)行的控制流對(duì)軟件進(jìn)行反匯編,在反匯編過程中能夠識(shí)別一部分結(jié)構(gòu)完整的函數(shù)以及系統(tǒng)定義的導(dǎo)入表函數(shù)。[0018]步驟2.根據(jù)引用情況確定代碼序列之間的斷點(diǎn)。根據(jù)反匯編代碼中的跳轉(zhuǎn)指令和調(diào)用指令,確定發(fā)生代碼引用和數(shù)據(jù)引用的位置,以及被引用的位置,這些位置可以作為斷點(diǎn)。具體而言,操作符為“jmp”、“call”和“retn”的指令,這些指令一定能引起控制流的轉(zhuǎn)移,這些指令之后的一條指令作為斷點(diǎn);發(fā)生代碼引用的位置,即“jmp”或“call”的跳轉(zhuǎn)目標(biāo)地址指令作為斷點(diǎn);發(fā)生數(shù)據(jù)引用的位置,即軟件其他位置的代碼對(duì)該地址或地址中的數(shù)據(jù)進(jìn)行數(shù)據(jù)引用時(shí),該地址的指令作為斷點(diǎn)。相鄰斷點(diǎn)之間的斷點(diǎn)之間指令序列形成一個(gè)基本塊,用BasicBIοck表示,斷點(diǎn)處的指令作為BasicBIock的第一條指令,地址是BasicBlock的起始地址。[0019]步驟3.根據(jù)相鄰BasicBlock之間的關(guān)系進(jìn)行合并。當(dāng)兩個(gè)相鄰Basicblock至少滿足以下四個(gè)條件之一時(shí),可以對(duì)其合并。合并的結(jié)果就是去掉它們之間的斷點(diǎn),將兩個(gè)反匯編代碼序列按地址順序合并成一個(gè)。[0020](I)位置相鄰的BasicBlock,如果并非由外部引用或跳轉(zhuǎn)函數(shù)外部指令引起的分害J,可以將其合并。[0021](2)相鄰BasicBlock之間因?yàn)閷?duì)外部引用造成分割時(shí),如果低地址存在引用高地址時(shí),兩者可以合并。[0022](3)相鄰BasicBlock存在相互引用時(shí)可以合并。[0023](4)與相同BasicBlock相互引用時(shí)可以合并。[0024]步驟4.確定包含注入惡意代碼的BasicBlock序列。具體方法是:首先將標(biāo)注使用BasicBlock中包含導(dǎo)入表函數(shù)(除了GetProcAddress和LoadLibrary兩個(gè)函數(shù))的情況;然后使用尋找所有包含導(dǎo)入表函數(shù)數(shù)量為O的連續(xù)BasicBlock(用n-gramsF_BasicBlock表示);將長(zhǎng)度最大的n-gramsF_BasicBlock作為包含注入代碼的BasicBlock序列。[0025](5)確定惡意代碼的邊界。根據(jù)以下算法確定由注入惡意代碼組成的BasicBlock序列,這些序列中的所有代碼就是本方法所求得的結(jié)果。[0026]名稱:惡意代碼n-grams識(shí)別算法輸入:候選的n-grams數(shù)組Candidate_BBlocks和剩余的Rest_BBlocks變量設(shè)置:head=0,tail=Candidate_BBlocks.Size-1,External_xref=0;輸出:惡意代碼組成的子序列數(shù)組Mal_BBlocks實(shí)現(xiàn)步驟:1.如果head小于tail,則執(zhí)行:1.1如果Candidate_BBlocks[head]首地址是軟件執(zhí)行入口地址,執(zhí)行2;1.2如果Candidate_BBlocks[head]首地址被外部引用,執(zhí)行2;1.3如果Candidate_BBlocks[head]引用Rest_BBlocks,則將其加入Rest_BBlocks,head=head+l,執(zhí)行I;2.如果rail大于head,則執(zhí)行:2.1Candidate_BBlocks[rail]與Rest_BBlocks相互引用,tail=tail_l,執(zhí)行2;2.2執(zhí)行3;3.如果head小于tail且,則執(zhí)行:3.1如果External_xref大于I,head=head+l,Candidate_BBlocks[head]加入Rest_BBlocks,執(zhí)行I;3.2如果Candidate_BBlocks[head]引用Rest_BBlocks,External_xref=External_xref+1,tail=tail_l;4.如果head小于tail,返回0&11(11(1&七6_13131001<:8[]16已(1,...,tail]作為Mal_BBlocks。【主權(quán)項(xiàng)】1.一種惡意軟件感染后宿主軟件中惡意代碼識(shí)別方法,其特征是:包括以下步驟:.1.1)遞歸下降反匯編方法獲得宿主軟件的反匯編代碼:遞歸下降的方法是根據(jù)二進(jìn)制軟件中機(jī)器代碼執(zhí)行的控制流對(duì)軟件進(jìn)行反匯編,在反匯編過程中能夠識(shí)別一部分結(jié)構(gòu)完整的函數(shù)以及系統(tǒng)定義的導(dǎo)入表函數(shù),.1.2)根據(jù)引用情況確定代碼序列之間的斷點(diǎn):根據(jù)反匯編代碼中的跳轉(zhuǎn)指令和調(diào)用指令,確定發(fā)生代碼引用和數(shù)據(jù)引用的位置,以及被引用的位置,這些位置可以作為斷點(diǎn);.1.3)根據(jù)相鄰BasicBlock之間的關(guān)系進(jìn)行合并:當(dāng)兩個(gè)相鄰Basicblock滿足一定關(guān)系時(shí),可以對(duì)其合并,合并的結(jié)果就是去掉它們之間的斷點(diǎn),將兩個(gè)反匯編代碼序列按地址順序合并成一個(gè);.1.4)確定包含注入惡意代碼的BasicBlock序列;.1.5)確定惡意代碼的邊界:通過尋找由注入惡意代碼組成的BasicBlock序列的頭部和尾部確定惡意代碼構(gòu)成BasicBlock的序列,這些序列中的所有代碼就是本方法所求得的結(jié)果。2.根據(jù)權(quán)利要求1所述的一種惡意軟件感染后宿主軟件中惡意代碼識(shí)別方法,其特征是:所述步驟I.2)中對(duì)軟件反匯編代碼分塊的步驟如下:.2.1)具體而言,操作符為“jmp”、“call”和“retn”的指令,這些指令一定能引起控制流的轉(zhuǎn)移,這些指令之后的一條指令作為斷點(diǎn);發(fā)生代碼引用的位置,即“jmp”或“call”的跳轉(zhuǎn)目標(biāo)地址指令作為斷點(diǎn);發(fā)生數(shù)據(jù)引用的位置,即軟件其他位置的代碼對(duì)該地址或地址中的數(shù)據(jù)進(jìn)行數(shù)據(jù)引用時(shí),該地址的指令作為斷點(diǎn),相鄰斷點(diǎn)之間的斷點(diǎn)之間指令序列形成一個(gè)基本塊,用BasicBlock表示,斷點(diǎn)處的指令作為BasicBlock的第一條指令,地址是BasicBlock的起始地址。3.根據(jù)權(quán)利要求1所述的一種惡意軟件感染后宿主軟件中惡意代碼識(shí)別方法,其特征是:所述步驟1.3)根據(jù)相鄰BasicBlock之間的關(guān)系進(jìn)行合并的步驟如下:.3.1)當(dāng)兩個(gè)相鄰Basicblock至少滿足以下四個(gè)條件之一時(shí),可以對(duì)其合并,合并的結(jié)果就是去掉它們之間的斷點(diǎn),將兩個(gè)反匯編代碼序列按地址順序合并成一個(gè):(1)位置相鄰的BasicBlock,如果并非由外部引用或跳轉(zhuǎn)函數(shù)外部指令引起的分割,可以將其合并,(2)相鄰BasicBlock之間因?yàn)閷?duì)外部引用造成分割時(shí),如果低地址存在引用高地址時(shí),兩者可以合并,(3)相鄰BasicBlock存在相互引用時(shí)可以合并,(4)與相同BasicBlock相互引用時(shí)可以合并。4.根據(jù)權(quán)利要求1所述的一種惡意軟件感染后宿主軟件中惡意代碼識(shí)別方法,其特征是:所述步驟1.4)確定包含注入惡意代碼的BasicBlock序列的步驟如下:.4.1)首先將標(biāo)注使用BasicBlock中包含導(dǎo)入表函數(shù)(除了GetProcAddress和LoadLibrary兩個(gè)函數(shù))的情況;然后使用尋找所有包含導(dǎo)入表函數(shù)數(shù)量為O的連續(xù)BasicBlockC用n-gramsF_BasicBlock表不);將長(zhǎng)度最大的n-gramsF_BasicBlock作為包含注入代碼的BasicBlock序列。5.根據(jù)權(quán)利要求1所述的一種惡意軟件感染后宿主軟件中惡意代碼識(shí)別方法,其特征是:所述步驟1.5)確定惡意代碼的邊界的算法如下:.5.1)惡意代碼識(shí)別算法輸入:候選的n-grams數(shù)組Candidate—BBlocks和剩余的Rest—BBlocks變量設(shè)置:head=0,tail=Candidate_BBlocks.Size-1,External_xref=0;輸出:惡意代碼組成的子序列數(shù)組Mai—BBlocks實(shí)現(xiàn)步驟:如果head小于taiI,則執(zhí)行:.1.1如果Candidate—BBlocks[head]首地址是軟件執(zhí)行入口地址,執(zhí)行2;.1.2如果Candidate—BBlocks[head]首地址被外部引用,執(zhí)行2;.1.3如果Candidate—BBlocks[head]引用Rest—BBlocks,則將其加入Rest—BBlocks,head=head+l,執(zhí)行I;如果rail大于head,則執(zhí)行:.2.1Candidate—BBlocks[rail]與Rest—BBlocks相互引用,tail=tail_l,執(zhí)行2;.2.2執(zhí)行3;如果head小于taiI且,則執(zhí)行:.3.1如果External—xref大于I,head=head+l,Candidate—BBlocks[head]加入Rest_BBlocks,執(zhí)行I;.3.2如果Candidate—BBlocks[head]引用Rest—BBlocks,External—xref=External—xref+1,tail=tail_l;如果head小于taiI,返回Candidate—BBlocks[head,…,tail]作為Mai—BBlocks?!疚臋n編號(hào)】G06F21/56GK105868633SQ201610253409【公開日】2016年8月17日【申請(qǐng)日】2016年4月22日【發(fā)明人】王巖,趙宗渠,智慧來,劉本倉(cāng)【申請(qǐng)人】河南理工大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
达拉特旗| 夹江县| 漯河市| 敦煌市| 内丘县| 滦南县| 台江县| 马公市| 色达县| 台东市| 宜春市| 光山县| 安阳市| 安义县| 德化县| 河源市| 内乡县| 呼和浩特市| 阜南县| 东乌| 平顺县| 古丈县| 阳城县| 兴化市| 吴川市| 双牌县| 若尔盖县| 永兴县| 大石桥市| 大同县| 新邵县| 德清县| 哈密市| 乐平市| 潮州市| 威海市| 商河县| 登封市| 赣榆县| 濉溪县| 浮山县|