一種識(shí)別pe文件是否是資源文件的方法及裝置制造方法【專利摘要】本發(fā)明實(shí)施例公開(kāi)一種識(shí)別PE文件是否是資源文件的方法及裝置,涉及計(jì)算機(jī)安全【
技術(shù)領(lǐng)域:
】,能夠提高系統(tǒng)中資源文件的識(shí)別成功率。所述識(shí)別PE文件是否是資源文件的方法,包括:判斷一PE文件中是否含有代碼;若PE文件中不含有代碼,則檢查PE文件是否含有正常的資源信息;若PE文件含有正常的資源信息,則確定PE文件是資源文件。所述識(shí)別PE文件是否是資源文件的裝置,包括:判斷單元,用于判斷一PE文件中是否含有代碼;第一檢查單元,用于若PE文件中不含有代碼,則檢查PE文件是否含有正常的資源信息;確定單元,用于若PE文件含有正常的資源信息,則確定PE文件是資源文件。本發(fā)明適用于需要識(shí)別出系統(tǒng)中資源文件的場(chǎng)合?!緦@f(shuō)明】一種識(shí)別PE文件是否是資源文件的方法及裝置【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及計(jì)算機(jī)安全【
技術(shù)領(lǐng)域:
】,尤其涉及一種識(shí)別PE文件是否是資源文件的方法及裝置。【
背景技術(shù):
】[0002]PE文件被稱為可移植的執(zhí)行體,其英文全稱是PortableExecute。常見(jiàn)的ΕΧΕ、DLL、OCX、SYS、COM都是PE文件,PE文件是微軟Windows操作系統(tǒng)上的程序文件。[0003]資源文件是一種僅含資源數(shù)據(jù),不含代碼的PE文件,占系統(tǒng)中全部PE文件的90%以上。在實(shí)際的應(yīng)用中經(jīng)常需要從系統(tǒng)中的所有PE文件中識(shí)別出資源文件,比如,安全軟件常常需要監(jiān)控和掃描系統(tǒng)中的所有PE文件并判定其是否含有惡意代碼,而通常的做法是先識(shí)別出系統(tǒng)中全部PE文件中的資源文件,然后篩選出系統(tǒng)中全部PE文件中的非資源文件,最后再判定系統(tǒng)中全部PE文件中的非資源文件是否含有惡意代碼。[0004]而現(xiàn)有技術(shù)判斷PE文件是資源文件只需要PE文件滿足不含導(dǎo)入表和導(dǎo)出表,且入口點(diǎn)是O即可,因而會(huì)漏掉很多資源文件(比如,含有空導(dǎo)入表和空導(dǎo)出表,且入口點(diǎn)是O、執(zhí)行時(shí)不會(huì)跳轉(zhuǎn)到惡意代碼的PE文件),且存在潛在的安全風(fēng)險(xiǎn)(比如,不含導(dǎo)入表和導(dǎo)出表,且入口點(diǎn)是O、執(zhí)行時(shí)會(huì)跳轉(zhuǎn)到惡意代碼的PE文件會(huì)被識(shí)別為資源文件),即現(xiàn)有識(shí)別資源文件的成功率較低?!?br/>發(fā)明內(nèi)容】[0005]有鑒于此,本發(fā)明實(shí)施例提供一種識(shí)別PE文件是否是資源文件的方法及裝置,能夠提高系統(tǒng)中資源文件的識(shí)別成功率。[0006]為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:[0007]一方面,本發(fā)明實(shí)施例提供一種識(shí)別PE文件是否是資源文件的方法,包括:[0008]判斷一PE文件中是否含有代碼;[0009]若所述PE文件中不含有代碼,則檢查所述PE文件是否含有正常的資源信息;[0010]若所述PE文件含有正常的資源信息,則確定所述PE文件是資源文件。[0011]本發(fā)明實(shí)施例提供的識(shí)別PE文件是否是資源文件的方法,通過(guò)判斷PE文件中是否含有代碼,并在PE文件中不含有代碼時(shí),檢查PE文件是否含有正常的資源信息,在PE文件含有正常的資源信息時(shí),確定PE文件是資源文件;因而能夠提高系統(tǒng)中資源文件的識(shí)別成功率。[0012]另一方面,本發(fā)明實(shí)施例提供一種識(shí)別PE文件是否是資源文件的裝置,包括:[0013]判斷單元,用于判斷一PE文件中是否含有代碼;[0014]第一檢查單元,用于若所述判斷單元確定出所述PE文件中不含有代碼,則檢查所述PE文件是否含有正常的資源信息;[0015]確定單元,用于若所述第一檢查單元確定所述PE文件含有正常的資源信息,則確定所述PE文件是資源文件。[0016]本發(fā)明實(shí)施例提供的識(shí)別PE文件是否是資源文件的裝置,通過(guò)判斷PE文件中是否含有代碼,并在PE文件中不含有代碼時(shí),檢查PE文件是否含有正常的資源信息,在PE文件含有正常的資源信息時(shí),確定PE文件是資源文件;因而能夠提高系統(tǒng)中資源文件的識(shí)別成功率?!緦@綀D】【附圖說(shuō)明】[0017]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。[0018]圖1為本發(fā)明識(shí)別PE文件是否是資源文件的方法一實(shí)施例的流程示意圖;[0019]圖2為圖1中SI—實(shí)施例的流程示意圖;[0020]圖3為圖2中SlO—實(shí)施例的流程示意圖;[0021]圖4為圖2中Sll—實(shí)施例的流程示意圖;[0022]圖5為圖2中S12—實(shí)施例的流程示意圖;[0023]圖6為圖2中S13—實(shí)施例的流程示意圖;[0024]圖7為圖2中S14—實(shí)施例的流程示意圖;[0025]圖8為圖2中S15—實(shí)施例的流程示意圖;[0026]圖9為圖1中SI另一實(shí)施例的流程示意圖;[0027]圖10為圖1中SI又一實(shí)施例的流程示意圖;[0028]圖11為圖1中SI又一實(shí)施例的流程示意圖;[0029]圖12為圖1中SI又一實(shí)施例的流程示意圖;[0030]圖13為圖1中SI又一實(shí)施例的流程示意圖;[0031]圖14為圖1中S3—實(shí)施例的流程示意圖;[0032]圖15為本發(fā)明識(shí)別PE文件是否是資源文件的裝置一實(shí)施例的方意圖;[0033]圖16為圖15中判斷單元一實(shí)施例的方框結(jié)構(gòu)示意圖;[0034]圖17為圖16中第一判斷子單元一實(shí)施例的方框結(jié)構(gòu)示意圖;[0035]圖18為圖16中第二判斷子單元一實(shí)施例的方框結(jié)構(gòu)示意圖;[0036]圖19為圖16中第三判斷子單元一實(shí)施例的方框結(jié)構(gòu)示意圖;[0037]圖20為圖16中第四判斷子單元一實(shí)施例的方框結(jié)構(gòu)示意圖;[0038]圖21為圖16中第五判斷子單元一實(shí)施例的方框結(jié)構(gòu)示意圖;[0039]圖22為圖16中第六判斷子單元一實(shí)施例的方框結(jié)構(gòu)示意圖;[0040]圖23為圖15中判斷單元另一實(shí)施例的方框結(jié)構(gòu)示意圖;[0041]圖24為圖15中判斷單元又一實(shí)施例的方框結(jié)構(gòu)示意圖;[0042]圖25為圖15中判斷單元又一實(shí)施例的方框結(jié)構(gòu)示意圖;[0043]圖26為圖15中判斷單元又一實(shí)施例的方框結(jié)構(gòu)示意圖;[0044]圖27為圖15中判斷單元又一實(shí)施例的方框結(jié)構(gòu)示意圖;[0045]圖28為圖15中確定單元一實(shí)施例的方框結(jié)構(gòu)示意圖?!揪唧w實(shí)施方式】[0046]下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例一種識(shí)別PE文件是否是資源文件的方法及裝置進(jìn)行詳細(xì)描述。[0047]應(yīng)當(dāng)明確,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。[0048]參看圖1,本發(fā)明的實(shí)施例提供一種識(shí)別PE文件是否是資源文件的方法,包括:[0049]S1、判斷一PE文件中是否含有代碼;[0050]S2、若所述PE文件中不含有代碼,則檢查所述PE文件是否含有正常的資源信息;[0051]S3、若所述PE文件含有正常的資源信息,則確定所述PE文件是資源文件。[0052]本發(fā)明實(shí)施例提供的識(shí)別PE文件是否是資源文件的方法,通過(guò)判斷PE文件中是否含有代碼,并在PE文件中不含有代碼時(shí),檢查PE文件是否含有正常的資源信息,在PE文件含有正常的資源信息時(shí),確定PE文件是資源文件;因而能夠提高系統(tǒng)中資源文件的識(shí)別成功率。[0053]可選地,參看圖2,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷一PE文件中是否含有代碼(SI),包括:[0054]S10、判斷一PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或[0055]S11、判斷所述PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;和/或[0056]S12、判斷所述PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件;和/或[0057]S13、判斷所述PE文件是否能夠通過(guò)重定向?qū)雂ll文件;和/或[0058]S14、判斷所述PE文件是否能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);和/或[0059]S15、判斷所述PE文件的入口點(diǎn)是否為O且在頭部是否會(huì)執(zhí)行跳轉(zhuǎn)指令;[0060]S16、若確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或[0061]若確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;和/或[0062]若確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件;和/或[0063]若確定所述PE文件不能夠通過(guò)重定向?qū)雂ll文件;和/或[0064]若確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);和/或[0065]若確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令,則確定所述PE文件中不含有代碼。[0066]因?yàn)镻E文件能夠通過(guò)導(dǎo)入表、延遲導(dǎo)入表、Manifest文件和重定向?qū)雂ll文件從而使其含有代碼,所以判斷一個(gè)PE文件是否能夠通過(guò)導(dǎo)入dll文件使其含有代碼需要從導(dǎo)入表、延遲導(dǎo)入表、Manifest文件和重定向這四個(gè)方面進(jìn)行判斷。導(dǎo)入表是一個(gè)IMAGE_MP0RT_DESCRIPT0R數(shù)據(jù)結(jié)構(gòu)的數(shù)組,每一個(gè)IMAGEJMP0RT_DESCRIPT0R結(jié)構(gòu)表明一個(gè)dll的信息。本實(shí)施例中,若PE文件的導(dǎo)入表不是空表,那么對(duì)于PE文件的導(dǎo)入表的每一個(gè)IMAGE_IMP0RT_DESCRIPT0R結(jié)構(gòu),需要獲取該IMAGEJMP0RT_DESCRIPT0R結(jié)構(gòu)的成員Name的值(成員Name的值指向一個(gè)導(dǎo)入dll文件的文件名),并根據(jù)該成員Name的值找到該成員Name的值所指向的導(dǎo)入dll文件的文件名。根據(jù)PE文件的導(dǎo)入表所找到的導(dǎo)入dll文件的文件名即為PE文件能夠通過(guò)導(dǎo)入表導(dǎo)入的dll文件的文件名。因?yàn)閙scoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dllL只有.NETFramework本身才會(huì)使用,其他人無(wú)法使用其功能,故若一個(gè)PE文件能夠通過(guò)導(dǎo)入表導(dǎo)入的dll文件為mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一個(gè),則認(rèn)為該P(yáng)E文件未通過(guò)導(dǎo)入表導(dǎo)入dll文件使其含有代碼。[0067]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dl1、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件、所述PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件、所述PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件、所述PE文件是否能夠通過(guò)重定向?qū)雂ll文件、所述PE文件是否能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù)和/或所述PE文件的入口點(diǎn)是否為O且在頭部是否會(huì)執(zhí)行跳轉(zhuǎn)指令,能夠較準(zhǔn)確地確定出所述PE文件中是否含有代碼。[0068]可選地,參看圖3,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷一PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件(SlO),包括:[0069]S100、判斷一PE文件是否含有導(dǎo)入表;[0070]S101、若所述PE文件不含導(dǎo)入表,則確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者[0071]S102、若所述PE文件含有導(dǎo)入表,則判斷所述PE文件的導(dǎo)入表是否為空表;[0072]S103、若所述PE文件的導(dǎo)入表是空表,則確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll>Microsoft.CSharp.dlI>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者[0073]S104、若所述PE文件的導(dǎo)入表不是空表,則判斷所述PE文件通過(guò)導(dǎo)入表導(dǎo)入的dll文件是否為mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一個(gè);[0074]S105、若所述PE文件通過(guò)導(dǎo)入表導(dǎo)入的dll文件為mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一個(gè),則確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件。[0075]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dl1、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件,能夠較準(zhǔn)確地確定出所述PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入dll文件從而使其含有代碼。[0076]可選地,參看圖4,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷所述PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件(Sll),包括:[0077]SI10、判斷所述PE文件是否含有延遲導(dǎo)入表;[0078]Sll1、若所述PE文件不含延遲導(dǎo)入表,則確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;或者[0079]SI12、若所述PE文件含有延遲導(dǎo)入表,則判斷所述PE文件的延遲導(dǎo)入表是否為空表;[0080]S113、若所述PE文件的延遲導(dǎo)入表是空表,則確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件。[0081]PE文件的延遲導(dǎo)入表是一個(gè)數(shù)組,每一項(xiàng)都是一個(gè)ImgDelayDescr結(jié)構(gòu)體,每一項(xiàng)都代表一個(gè)導(dǎo)入的dll。PE文件不含延遲導(dǎo)入表或者延遲導(dǎo)入表是空表,均可以說(shuō)明PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件。[0082]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件,能夠準(zhǔn)確地確定出所述PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件從而使其含有代碼。[0083]可選地,參看圖5,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷所述PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件(S12),包括:[0084]S120、判斷所述PE文件是否含有Manifest文件;[0085]S121、若所述PE文件不含Manifest文件,則確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件;或者[0086]S122、若所述PE文件含有Manifest文件,則判斷所述PE文件的Manifest文件中是否含有dll文件的Manifest文件;[0087]S123、若所述PE文件的Manifest文件中不含有dll文件的Manifest文件,則確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件。[0088]Manifest文件是個(gè)XML格式的描述文件,每個(gè)dll文件都有自己的Manifest文件,通過(guò)dll文件的Manifest文件能夠找到其所對(duì)應(yīng)的dll文件。[0089]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件,能夠準(zhǔn)確地確定出所述PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件從而使其含有代碼。[0090]可選地,參看圖6,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷所述PE文件是否能夠通過(guò)重定向?qū)雂ll文件(S13),包括:[0091]S130、判斷與所述PE文件相同目錄下是否含有后綴名為“.local”的文件或者文件夾;[0092]S131、若與所述PE文件相同目錄下不含有后綴名為“.local”的文件或者文件夾,則確定所述PE文件不能夠通過(guò)重定向?qū)雂ll文件。[0093]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)重定向?qū)雂ll文件,能夠準(zhǔn)確地確定出所述PE文件是否能夠通過(guò)重定向?qū)雂ll文件從而使其含有代碼。[0094]可選地,參看圖7,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷所述PE文件是否能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù)(S14),包括:[0095]S140、判斷所述PE文件是否含有導(dǎo)出表;[0096]S141、若所述PE文件不含有導(dǎo)出表,則確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);或者[0097]S142、若所述PE文件含有導(dǎo)出表,則判斷所述PE文件的導(dǎo)出表是否是空表;[0098]S143、若所述PE文件的導(dǎo)出表是空表,則確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù)。[0099]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù),能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0100]可選地,參看圖8,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷所述PE文件的入口點(diǎn)是否為O且在頭部是否會(huì)執(zhí)行跳轉(zhuǎn)指令(S15),包括:[0101]S150、獲取所述PE文件的入口點(diǎn);[0102]S151、判斷所述PE文件的入口點(diǎn)是否為O;[0103]S152、若所述PE文件的入口點(diǎn)是0,則檢查所述PE文件的第五個(gè)字節(jié)的指令是否是FF、E9或EB;[0104]S153、若所述PE文件的第五個(gè)字節(jié)的指令不是FF、E9和EB,則確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令;或者[0105]S154、若所述PE文件的第五個(gè)字節(jié)的指令是FF,則檢查所述PE文件的第六個(gè)字節(jié)的指令是否是25或15;[0106]S155、若所述PE文件的第六個(gè)字節(jié)的指令不是25和15,則確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令。[0107]如果PE文件的入口點(diǎn)是0,那么在執(zhí)行PE文件的時(shí)候就會(huì)從PE文件的DOS頭開(kāi)始執(zhí)行。PE文件的DOS頭的第一個(gè)域?yàn)閑_magic,其ASCII字符為"MZ"。PE文件執(zhí)行到域e_magic時(shí),會(huì)將字符〃M〃誤認(rèn)為是指令,因而會(huì)執(zhí)行decebp指令(即0x4D),將通用寄存器ebp減I;會(huì)將字符〃Z〃誤認(rèn)為是指令,因而會(huì)執(zhí)行popedx指令(即0x5A),把通用寄存器edx彈出堆棧。如果該P(yáng)E文件已被病毒感染,那么通常接下來(lái)會(huì)先恢復(fù)之前將字符〃M〃和"Z"誤認(rèn)為是指令所做的操作,然后再跳轉(zhuǎn)到病毒代碼處執(zhí)行,即依次執(zhí)行pushedx指令(即0x52)、incebp指令(即0x45)、跳轉(zhuǎn)指令和病毒代碼。因而如果一個(gè)PE文件的入口點(diǎn)是0,那么只需要在該P(yáng)E文件開(kāi)頭處檢查指令序列是否為4D5A5245FF25(FF25為jmp跳轉(zhuǎn))、4D5A5245E9(E9為jmp跳轉(zhuǎn))、4D5A5245EB(EB為jmp跳轉(zhuǎn))、4D5A5245FF15(FF15為call跳轉(zhuǎn))中的一種即可。如果在該P(yáng)E文件開(kāi)頭處檢查出指令序列是以上四種中的一種,那么說(shuō)明該P(yáng)E中文件含有代碼,即該P(yáng)E文件不是資源文件。[0108]本實(shí)施例中,通過(guò)判斷PE文件的入口點(diǎn)是否為O且在頭部是否會(huì)執(zhí)行跳轉(zhuǎn)指令,能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0109]可選地,參看圖9,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷一PE文件中是否含有代碼(SI),包括:[0110]SalO、判斷一PE文件是否含有線程局部存儲(chǔ)目錄;[0111]Sail、若所述PE文件不含線程局部存儲(chǔ)目錄,則確定所述PE文件中不含有代碼;或者[0112]Sal2、若所述PE文件含有線程局部存儲(chǔ)目錄,則獲取所述PE文件的線程局部存儲(chǔ)目錄;[0113]Sal3、判斷所述線程局部存儲(chǔ)目錄中是否含有指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針;[0114]Sal4、若所述線程局部存儲(chǔ)目錄中不含指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針,則確定所述PE文件中不含有代碼;或者[0115]Sal5、若所述線程局部存儲(chǔ)目錄中含有指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針,則判斷所述PE文件的開(kāi)發(fā)環(huán)境是否是Delphi;[0116]Sal6、若所述PE文件的開(kāi)發(fā)環(huán)境是Delphi,則確定所述PE文件中不含有代碼。[0117]本實(shí)施例中,通過(guò)檢查PE文件的線程局部存儲(chǔ)目錄,能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0118]可選地,參看圖10,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷一PE文件中是否含有代碼(SI),包括:[0119]Sa20、獲取一PE文件中的節(jié)的節(jié)名;[0120]Sa21、通過(guò)查詢預(yù)設(shè)的庫(kù)判斷所述PE文件中的節(jié)是否均是非代碼節(jié);其中,所述預(yù)設(shè)的庫(kù)中保存有非代碼節(jié)的節(jié)名;[0121]Sa22、若所述PE文件中的節(jié)均是非代碼節(jié),則確定所述PE文件中不含有代碼。[0122]本實(shí)施例中,通過(guò)查詢預(yù)設(shè)的庫(kù),能夠較方便地確定出PE文件中的節(jié)是否均是非代碼節(jié);通過(guò)判斷PE文件中的節(jié)是否均是非代碼節(jié),能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0123]可選地,參看圖11,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷一PE文件中是否含有代碼(SI),包括:[0124]Sa30、獲取一PE文件中的節(jié)的屬性;[0125]Sa31、判斷所述PE文件中的節(jié)的屬性是否為不可執(zhí)行;[0126]Sa32、若所述PE文件中的節(jié)的屬性為不可執(zhí)行,則確定所述PE文件中不含有代碼。[0127]本實(shí)施例中,通過(guò)判斷PE文件中的節(jié)的屬性是否為不可執(zhí)行,能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0128]可選地,參看圖12,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷一PE文件中是否含有代碼(SI),包括:[0129]Sa40、判斷一PE文件中是否含有.NET程序集;[0130]Sa41、若所述PE文件中不含有.NET程序集,則確定所述PE文件中不含有代碼;或者[0131]Sa42、若所述PE文件中含有.NET程序集,則檢查所述PE文件中的.NET程序集是否能夠引用其它.NET程序集;[0132]Sa43、若所述.NET程序集不能夠引用其它.NET程序集,則確定所述PE文件中不含有代碼;或者[0133]Sa44、若所述.NET程序集能夠引用其它.NET程序集,則判斷所述其它.NET程序集是否為System,dll;[0134]Sa45、若所述其它.NET程序集為System,dll,則確定所述PE文件中不含有代碼。[0135]在.NET程序編寫中,常常需要引用到其他的一些程序集,System,dll就是.NETFramework的一個(gè)基本的程序集,幾乎所有的程序都會(huì)引用到它。故如果一個(gè)PE文件中的.NET程序集只引用了System,dll,那么可以認(rèn)為該P(yáng)E文件未通過(guò)自身的.NET程序集能夠引用的其它.NET程序集從而使其含有代碼。[0136]本實(shí)施例中,通過(guò)檢查PE文件中的.NET程序集是否能夠引用其它.NET程序集,能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0137]可選地,參看圖13,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述判斷一PE文件中是否含有代碼(SI),包括:[0138]Sa50、判斷一PE文件中是否含有.NET程序集;[0139]Sa51、若所述PE文件中含有.NET程序集,則檢查所述PE文件中的.NET程序集中是否定義了類;[0140]Sa52、若所述.NET程序集中未定義類,則確定所述PE文件中不含有代碼;或者[0141]Sa53、若所述.NET程序集中定義了類,則檢查所述.NET程序集中定義的類是否均不含有方法;[0142]Sa54、若所述.NET程序集中定義的類均不含有方法,則確定所述PE文件中不含有代碼;或者[0143]Sa55、若所述.NET程序集中定義的類中存在含有方法的類,則檢查所述含有方法的類中的方法是否為不含方法體的構(gòu)造函數(shù);[0144]Sa56、若所述含有方法的類中的方法為不含方法體的構(gòu)造函數(shù),則確定所述PE文件中不含有代碼。[0145]本實(shí)施例中,通過(guò)檢查PE文件中定義的類是否均不含有方法或者PE文件中定義的含有方法的類中的方法是否為不含方法體的構(gòu)造函數(shù),能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0146]可選地,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,在所述判斷一PE文件中是否含有代碼之前,還包括:[0147]檢查所述PE文件的大小、所述PE文件的類型和/或所述PE文件的路徑;[0148]其中,所述判斷一PE文件中是否含有代碼,包括:[0149]若所述PE文件的大小在預(yù)設(shè)的文件大小范圍內(nèi)、所述PE文件的類型屬于預(yù)設(shè)的類型集合和/或所述PE文件的路徑屬于預(yù)設(shè)的路徑集合,則判斷所述PE文件中是否含有代碼。[0150]本實(shí)施例中,通過(guò)檢查PE文件的大小、類型和路徑,并篩選出大小在預(yù)設(shè)的文件大小范圍內(nèi)、類型屬于預(yù)設(shè)的類型集合和路徑屬于預(yù)設(shè)的路徑集合的PE文件,能夠進(jìn)一步保證識(shí)別PE文件是否是資源文件的準(zhǔn)確性。[0151]可選地,參看圖14,在本發(fā)明識(shí)別PE文件是否是資源文件的方法的另一實(shí)施例中,所述若所述PE文件含有正常的資源信息,則確定所述PE文件是資源文件(S3),包括:[0152]S30、若所述PE文件含有正常的資源信息,則檢查所述PE文件中的資源是否綁定了其它PE文件和/或是否捆綁了包;[0153]S31、若所述PE文件中的資源未綁定其它PE文件和/或未捆綁包,則確定所述PE文件是資源文件。[0154]本實(shí)施例中,通過(guò)檢查PE文件中的資源是否綁定了其它PE文件和/或是否捆綁了包,能夠更準(zhǔn)確地確定出PE文件是否是資源文件。[0155]參看圖15,本發(fā)明的實(shí)施例提供一種識(shí)別PE文件是否是資源文件的裝置,包括:[0156]判斷單元1,用于判斷一PE文件中是否含有代碼;[0157]第一檢查單元2,用于若所述判斷單元I確定出所述PE文件中不含有代碼,則檢查所述PE文件是否含有正常的資源信息;[0158]確定單元3,用于若所述第一檢查單元2確定所述PE文件含有正常的資源信息,則確定所述PE文件是資源文件。[0159]本發(fā)明實(shí)施例提供的識(shí)別PE文件是否是資源文件的裝置,通過(guò)判斷PE文件中是否含有代碼,并在PE文件中不含有代碼時(shí),檢查PE文件是否含有正常的資源信息,在PE文件含有正常的資源信息時(shí),確定PE文件是資源文件;因而能夠提高系統(tǒng)中資源文件的識(shí)別成功率。[0160]可選地,參看圖16,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述判斷單元1,包括:[0161]第一判斷子單元10,用于判斷一PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或[0162]第二判斷子單元11,用于判斷所述PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;和/或[0163]第三判斷子單元12,用于判斷所述PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件;和/或[0164]第四判斷子單元13,用于判斷所述PE文件是否能夠通過(guò)重定向?qū)雂ll文件;和/或[0165]第五判斷子單元14,用于判斷所述PE文件是否能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);和/或[0166]第六判斷子單元15,用于判斷所述PE文件的入口點(diǎn)是否為O且在頭部是否會(huì)執(zhí)行跳轉(zhuǎn)指令;[0167]第一確定子單元16,用于若所述第一判斷子單元10確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或[0168]若所述第二判斷子單元11確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;和/或[0169]若所述第三判斷子單元12確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件;和/或[0170]若所述第四判斷子單元13確定所述PE文件不能夠通過(guò)重定向?qū)雂ll文件;和/或[0171]若所述第五判斷子單元14確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);和/或[0172]若所述第六判斷子單元15確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令,則確定所述PE文件中不含有代碼。[0173]因?yàn)镻E文件能夠通過(guò)導(dǎo)入表、延遲導(dǎo)入表、Manifest文件和重定向?qū)雂ll文件從而使其含有代碼,所以判斷一個(gè)PE文件是否能夠通過(guò)導(dǎo)入dll文件使其含有代碼需要從導(dǎo)入表、延遲導(dǎo)入表、Manifest文件和重定向這四個(gè)方面進(jìn)行判斷。導(dǎo)入表是一個(gè)IMAGE_MP0RT_DESCRIPT0R數(shù)據(jù)結(jié)構(gòu)的數(shù)組,每一個(gè)IMAGEJMP0RT_DESCRIPT0R結(jié)構(gòu)表明一個(gè)dll的信息。本實(shí)施例中,若PE文件的導(dǎo)入表不是空表,那么對(duì)于PE文件的導(dǎo)入表的每一個(gè)IMAGE_IMPORT_DESCRIPTOR結(jié)構(gòu),需要獲取該IMAGEJMPORT_DESCRIPTOR結(jié)構(gòu)的成員Name的值(成員Name的值指向一個(gè)導(dǎo)入dll文件的文件名),并根據(jù)該成員Name的值找到該成員Name的值所指向的導(dǎo)入dll文件的文件名。根據(jù)PE文件的導(dǎo)入表所找到的導(dǎo)入dll文件的文件名即為PE文件能夠通過(guò)導(dǎo)入表導(dǎo)入的dll文件的文件名。因?yàn)閙scoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dllL只有.NETFramework本身才會(huì)使用,其他人無(wú)法使用其功能,故若一個(gè)PE文件能夠通過(guò)導(dǎo)入表導(dǎo)入的dll文件為mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一個(gè),則認(rèn)為該P(yáng)E文件未通過(guò)導(dǎo)入表導(dǎo)入dll文件使其含有代碼。[0174]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dl1、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件、所述PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件、所述PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件、所述PE文件是否能夠通過(guò)重定向?qū)雂ll文件、所述PE文件是否能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù)和/或所述PE文件的入口點(diǎn)是否為O且在頭部是否會(huì)執(zhí)行跳轉(zhuǎn)指令,能夠較準(zhǔn)確地確定出所述PE文件中是否含有代碼。[0175]可選地,參看圖17,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述第一判斷子單元10,包括:[0176]第一判斷模塊100,用于判斷一PE文件是否含有導(dǎo)入表;[0177]第一確定模塊101,用于若所述第一判斷模塊100確定所述PE文件不含導(dǎo)入表,則確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件;或者[0178]第二判斷模塊102,用于若所述第一判斷模塊100確定所述PE文件含有導(dǎo)入表,則判斷所述PE文件的導(dǎo)入表是否為空表;[0179]第二確定模塊103,用于若所述第二判斷模塊102確定所述PE文件的導(dǎo)入表是空表,則確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件;或者[0180]第三判斷模塊104,用于若所述第二判斷模塊102確定所述PE文件的導(dǎo)入表不是空表,則判斷所述PE文件通過(guò)導(dǎo)入表導(dǎo)入的dll文件是否為mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一個(gè);[0181]第三確定模塊105,用于若所述第三判斷模塊104確定所述PE文件通過(guò)導(dǎo)入表導(dǎo)入的dll文件為mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一個(gè),貝1J確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll>Microsoft.CSharp.dlI>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件。[0182]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dl1、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件,能夠較準(zhǔn)確地確定出所述PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入dll文件從而使其含有代碼。[0183]可選地,參看圖18,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述第二判斷子單元11,包括:[0184]第四判斷模塊110,用于判斷所述PE文件是否含有延遲導(dǎo)入表;[0185]第四確定模塊111,用于若所述第四判斷模塊110確定所述PE文件不含延遲導(dǎo)入表,則確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;或者[0186]第五判斷模塊112,用于若所述第四判斷模塊110確定所述PE文件含有延遲導(dǎo)入表,則判斷所述PE文件的延遲導(dǎo)入表是否為空表;[0187]第五確定模塊113,用于若所述第五判斷模塊112確定所述PE文件的延遲導(dǎo)入表是空表,則確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件。[0188]PE文件的延遲導(dǎo)入表是一個(gè)數(shù)組,每一項(xiàng)都是一個(gè)ImgDelayDescr結(jié)構(gòu)體,每一項(xiàng)都代表一個(gè)導(dǎo)入的dll。PE文件不含延遲導(dǎo)入表或者延遲導(dǎo)入表是空表,均可以說(shuō)明PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件。[0189]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件,能夠準(zhǔn)確地確定出所述PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件從而使其含有代碼。[0190]可選地,參看圖19,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述第三判斷子單元12,包括:[0191]第六判斷模塊120,用于判斷所述PE文件是否含有Manifest文件;[0192]第六確定模塊121,用于若所述第六判斷模塊120確定所述PE文件不含Manifest文件,則確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件;或者[0193]第七判斷模塊122,用于若所述第六判斷模塊120確定所述PE文件含有Manifest文件,則判斷所述PE文件的Manifest文件中是否含有dll文件的Manifest文件;[0194]第七確定模塊123,用于若所述第七判斷模塊122確定所述PE文件的Manifest文件中不含有dll文件的Manifest文件,則確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件。[0195]Manifest文件是個(gè)XML格式的描述文件,每個(gè)dll文件都有自己的Manifest文件,通過(guò)dll文件的Manifest文件能夠找到其所對(duì)應(yīng)的dll文件。[0196]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件,能夠準(zhǔn)確地確定出所述PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件從而使其含有代碼。[0197]可選地,參看圖20,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述第四判斷子單元13,包括:[0198]第八判斷模塊130,用于判斷與所述PE文件相同目錄下是否含有后綴名為local”的文件或者文件夾;[0199]第八確定模塊131,用于若所述第八判斷模塊130確定與所述PE文件相同目錄下不含有后綴名為“.local”的文件或者文件夾,則確定所述PE文件不能夠通過(guò)重定向?qū)雂ll文件。[0200]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)重定向?qū)雂ll文件,能夠準(zhǔn)確地確定出所述PE文件是否能夠通過(guò)重定向?qū)雂ll文件從而使其含有代碼。[0201]可選地,參看圖21,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述第五判斷子單元14,包括:[0202]第九判斷模塊140,用于判斷所述PE文件是否含有導(dǎo)出表;[0203]第九確定模塊141,用于若所述第九判斷模塊140確定所述PE文件不含有導(dǎo)出表,則確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);或者[0204]第十判斷模塊142,用于若所述第九判斷模塊140確定所述PE文件含有導(dǎo)出表,則判斷所述PE文件的導(dǎo)出表是否是空表;[0205]第十確定模塊143,用于若所述第十判斷模塊142確定所述PE文件的導(dǎo)出表是空表,則確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù)。[0206]本實(shí)施例中,通過(guò)判斷PE文件是否能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù),能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0207]可選地,參看圖22,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述第六判斷子單元15,包括:[0208]A口點(diǎn)獲取模塊150,用于獲取所述PE文件的入口點(diǎn);[0209]第十一判斷模塊151,用于判斷所述PE文件的入口點(diǎn)是否為O;[0210]第一檢查模塊152,用于若所述第i^一判斷模塊151確定所述PE文件的入口點(diǎn)是0,則檢查所述PE文件的第五個(gè)字節(jié)的指令是否是FF、E9或EB;[0211]第十一確定模塊153,用于若所述第一檢查模塊152確定所述PE文件的第五個(gè)字節(jié)的指令不是FF、E9和EB,則確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令;或者[0212]第二檢查模塊154,用于若所述第一檢查模塊152確定所述PE文件的第五個(gè)字節(jié)的指令是FF,則檢查所述PE文件的第六個(gè)字節(jié)的指令是否是25或15;[0213]第十二確定模塊155,用于若所述第二檢查模塊154確定所述PE文件的第六個(gè)字節(jié)的指令不是25和15,則確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令。[0214]如果PE文件的入口點(diǎn)是0,那么在執(zhí)行PE文件的時(shí)候就會(huì)從PE文件的DOS頭開(kāi)始執(zhí)行。PE文件的DOS頭的第一個(gè)域?yàn)閑_magic,其ASCII字符為"MZ"。PE文件執(zhí)行到域e_magic時(shí),會(huì)將字符〃M〃誤認(rèn)為是指令,因而會(huì)執(zhí)行decebp指令(即0x4D),將通用寄存器ebp減I;會(huì)將字符〃Z〃誤認(rèn)為是指令,因而會(huì)執(zhí)行popedx指令(即0x5A),把通用寄存器edx彈出堆棧。如果該P(yáng)E文件已被病毒感染,那么通常接下來(lái)會(huì)先恢復(fù)之前將字符〃M〃和"Z"誤認(rèn)為是指令所做的操作,然后再跳轉(zhuǎn)到病毒代碼處執(zhí)行,即依次執(zhí)行pushedx指令(即0x52)、incebp指令(即0x45)、跳轉(zhuǎn)指令和病毒代碼。因而如果一個(gè)PE文件的入口點(diǎn)是0,那么只需要在該P(yáng)E文件開(kāi)頭處檢查指令序列是否為4D5A5245FF25(FF25為jmp跳轉(zhuǎn))、4D5A5245E9(E9為jmp跳轉(zhuǎn))、4D5A5245EB(EB為jmp跳轉(zhuǎn))、4D5A5245FF15(FF15為call跳轉(zhuǎn))中的一種即可。如果在該P(yáng)E文件開(kāi)頭處檢查出指令序列是以上四種中的一種,那么說(shuō)明該P(yáng)E中文件含有代碼,即該P(yáng)E文件不是資源文件。[0215]本實(shí)施例中,通過(guò)判斷PE文件的入口點(diǎn)是否為O且在頭部是否會(huì)執(zhí)行跳轉(zhuǎn)指令,能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0216]可選地,參看圖23,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述判斷單元1,包括:[0217]第七判斷子單元alO,用于判斷一PE文件是否含有線程局部存儲(chǔ)目錄;[0218]第二確定子單元all,用于若所述第七判斷子單元alO確定所述PE文件不含線程局部存儲(chǔ)目錄,則確定所述PE文件中不含有代碼;或者[0219]第一獲取子單元al2,用于若所述第七判斷子單元alO確定所述PE文件含有線程局部存儲(chǔ)目錄,則獲取所述PE文件的線程局部存儲(chǔ)目錄;[0220]第八判斷子單元al3,用于判斷所述第一獲取子單元al2獲取的所述線程局部存儲(chǔ)目錄中是否含有指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針;[0221]第三確定子單元al4,用于若所述第八判斷子單元al3確定所述線程局部存儲(chǔ)目錄中不含指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針,則確定所述PE文件中不含有代碼;或者[0222]第九判斷子單元al5,用于若所述第八判斷子單元al3確定所述線程局部存儲(chǔ)目錄中含有指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針,則判斷所述PE文件的開(kāi)發(fā)環(huán)境是否是Delphi;[0223]第四確定子單元al6,用于若所述第九判斷子單元al5確定所述PE文件的開(kāi)發(fā)環(huán)境是Delphi,則確定所述PE文件中不含有代碼。[0224]本實(shí)施例中,通過(guò)檢查PE文件的線程局部存儲(chǔ)目錄,能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0225]可選地,參看圖24,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述判斷單元1,包括:[0226]第二獲取子單元a20,用于獲取一PE文件中的節(jié)的節(jié)名;[0227]第十判斷子單元a21,用于通過(guò)查詢預(yù)設(shè)的庫(kù)判斷所述PE文件中的節(jié)是否均是非代碼節(jié);其中,所述預(yù)設(shè)的庫(kù)中保存有非代碼節(jié)的節(jié)名;[0228]第五確定子單元a22,用于若所述第十判斷子單元a21確定所述PE文件中的節(jié)均是非代碼節(jié),則確定所述PE文件中不含有代碼。[0229]本實(shí)施例中,通過(guò)查詢預(yù)設(shè)的庫(kù),能夠較方便地確定出PE文件中的節(jié)是否均是非代碼節(jié);通過(guò)判斷PE文件中的節(jié)是否均是非代碼節(jié),能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0230]可選地,參看圖25,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述判斷單元1,包括:[0231]第三獲取子單元a30,用于獲取一PE文件中的節(jié)的屬性;[0232]第十一判斷子單元a31,用于判斷所述第三獲取子單元a30獲取的所述PE文件中的節(jié)的屬性是否為不可執(zhí)行;[0233]第六確定子單元a32,用于若所述第十一判斷子單元a31確定所述PE文件中的節(jié)的屬性為不可執(zhí)行,則確定所述PE文件中不含有代碼。[0234]本實(shí)施例中,通過(guò)判斷PE文件中的節(jié)的屬性是否為不可執(zhí)行,能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0235]可選地,參看圖26,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述判斷單元1,包括:[0236]第十二判斷子單元a40,用于判斷一PE文件中是否含有.NET程序集;[0237]第七確定子單元a41,用于若所述第十二判斷子單元a40確定所述PE文件中不含有.NET程序集,則確定所述PE文件中不含有代碼;或者[0238]第一檢查子單元a42,用于若所述第十二判斷子單元a40確定所述PE文件中含有.NET程序集,則檢查所述PE文件中的.NET程序集是否能夠引用其它.NET程序集;[0239]第八確定子單元a43,用于若所述第一檢查子單元a42確定所述.NET程序集不能夠引用其它.NET程序集,則確定所述PE文件中不含有代碼;或者[0240]第十三判斷子單元a44,用于若所述第一檢查子單元a42確定所述.NET程序集能夠引用其它.NET程序集,則判斷所述其它.NET程序集是否為System,dll;[0241]第九確定子單元a45,用于若所述第十三判斷子單元a44確定所述其它.NET程序集為System,dll,則確定所述PE文件中不含有代碼。[0242]在.NET程序編寫中,常常需要引用到其他的一些程序集,System,dll就是.NETFramework的一個(gè)基本的程序集,幾乎所有的程序都會(huì)引用到它。故如果一個(gè)PE文件中的.NET程序集只引用了System,dlI,那么可以認(rèn)為該P(yáng)E文件未通過(guò)自身的.NET程序集能夠引用的其它.NET程序集從而使其含有代碼。[0243]本實(shí)施例中,通過(guò)檢查PE文件中的.NET程序集是否能夠引用其它.NET程序集,能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0244]可選地,參看圖27,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述判斷單元1,包括:[0245]第十四判斷子單元a50,用于判斷一PE文件中是否含有.NET程序集;[0246]第二檢查子單元a51,用于若所述第十四判斷子單元a50確定所述PE文件中含有.NET程序集,則檢查所述PE文件中的.NET程序集中是否定義了類;[0247]第十確定子單元a52,用于若所述第二檢查子單元a51確定所述.NET程序集中未定義類,則確定所述PE文件中不含有代碼;或者[0248]第三檢查子單元a53,用于若所述第二檢查子單元a51確定所述.NET程序集中定義了類,則檢查所述.NET程序集中定義的類是否均不含有方法;[0249]第十一確定子單元a54,用于若所述第三檢查子單元a53確定所述.NET程序集中定義的類均不含有方法,則確定所述PE文件中不含有代碼;或者[0250]第四檢查子單元a55,用于若所述第三檢查子單元a53確定所述.NET程序集中定義的類中存在含有方法的類,則檢查所述含有方法的類中的方法是否為不含方法體的構(gòu)造函數(shù);[0251]第十二確定子單元a56,用于若所述第四檢查子單元a55確定所述含有方法的類中的方法為不含方法體的構(gòu)造函數(shù),則確定所述PE文件中不含有代碼。[0252]本實(shí)施例中,通過(guò)檢查PE文件中定義的類是否均不含有方法或者PE文件中定義的含有方法的類中的方法是否為不含方法體的構(gòu)造函數(shù),能夠更準(zhǔn)確地確定出PE文件中是否含有代碼。[0253]可選地,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,還包括:[0254]第二檢查單元,用于在所述判斷單元確定一PE文件中是否含有代碼之前,檢查所述PE文件的大小、所述PE文件的類型和/或所述PE文件的路徑;[0255]其中,所述判斷單元,用于若所述第二檢查單元確定所述PE文件的大小在預(yù)設(shè)的文件大小范圍內(nèi)、所述PE文件的類型屬于預(yù)設(shè)的類型集合和/或所述PE文件的路徑屬于預(yù)設(shè)的路徑集合,則判斷所述PE文件中是否含有代碼。[0256]本實(shí)施例中,通過(guò)檢查PE文件的大小、類型和路徑,并篩選出大小在預(yù)設(shè)的文件大小范圍內(nèi)、類型屬于預(yù)設(shè)的類型集合和路徑屬于預(yù)設(shè)的路徑集合的PE文件,能夠進(jìn)一步保證識(shí)別PE文件是否是資源文件的準(zhǔn)確性。[0257]可選地,參看圖28,在本發(fā)明識(shí)別PE文件是否是資源文件的裝置的另一實(shí)施例中,所述確定單元3,包括:[0258]第五檢查子單元30,用于若所述第一檢查單元2確定所述PE文件含有正常的資源信息,則檢查所述PE文件中的資源是否綁定了其它PE文件和/或是否捆綁了包;[0259]第十三確定子單元31,用于若所述第五檢查子單元30確定所述PE文件中的資源未綁定其它PE文件和/或未捆綁包,則確定所述PE文件是資源文件。[0260]本實(shí)施例中,通過(guò)檢查PE文件中的資源是否綁定了其它PE文件和/或是否捆綁了包,能夠更準(zhǔn)確地確定出PE文件是否是資源文件。[0261]本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(Read-OnlyMemory,ROM)或隨機(jī)存儲(chǔ)記憶體(RandomAccessMemory,RAM)等。[0262]以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【
技術(shù)領(lǐng)域:
】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)?!緳?quán)利要求】1.一種識(shí)別PE文件是否是資源文件的方法,其特征在于,包括:判斷一PE文件中是否含有代碼;若所述PE文件中不含有代碼,則檢查所述PE文件是否含有正常的資源信息;若所述PE文件含有正常的資源信息,則確定所述PE文件是資源文件。2.根據(jù)權(quán)利要求1所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述判斷一PE文件中是否含有代碼,包括:判斷一PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll>mscoree1.dll>mscoreeis.dll和mscorlib.dll夕卜的其它dll文件;和/或判斷所述PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;和/或判斷所述PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件;和/或判斷所述PE文件是否能夠通過(guò)重定向?qū)雂ll文件;和/或判斷所述PE文件是否能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);和/或判斷所述PE文件的入口點(diǎn)是否為O且在頭部是否會(huì)執(zhí)行跳轉(zhuǎn)指令;若確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll>mscoree1.dll>mscoreeis.dll和mscorlib.dll夕卜的其它dll文件;和/或若確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;和/或若確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件;和/或若確定所述PE文件不能夠通過(guò)重定向?qū)雂ll文件;和/或若確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);和/或若確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令,則確定所述PE文件中不含有代碼。3.根據(jù)權(quán)利要求2所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述判斷一PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件,包括:判斷一PE文件是否含有導(dǎo)入表;若所述PE文件不含導(dǎo)入表,則確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者若所述PE文件含有導(dǎo)入表,則判斷所述PE文件的導(dǎo)入表是否為空表;若所述PE文件的導(dǎo)入表是空表,則確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者若所述PE文件的導(dǎo)入表不是空表,則判斷所述PE文件通過(guò)導(dǎo)入表導(dǎo)入的dll文件是否為mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一個(gè);若所述PE文件通過(guò)導(dǎo)入表導(dǎo)入的dll文件為mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一個(gè),則確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件。4.根據(jù)權(quán)利要求2所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述判斷所述PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件,包括:判斷所述PE文件是否含有延遲導(dǎo)入表;若所述PE文件不含延遲導(dǎo)入表,則確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;或者若所述PE文件含有延遲導(dǎo)入表,則判斷所述PE文件的延遲導(dǎo)入表是否為空表;若所述PE文件的延遲導(dǎo)入表是空表,則確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件。5.根據(jù)權(quán)利要求2所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述判斷所述PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件,包括:判斷所述PE文件是否含有Manifest文件;若所述PE文件不含Manifest文件,則確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件;或者若所述PE文件含有Manifest文件,則判斷所述PE文件的Manifest文件中是否含有dll文件的Manifest文件;若所述PE文件的Manifest文件中不含有dll文件的Manifest文件,則確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件。6.根據(jù)權(quán)利要求2所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述判斷所述PE文件是否能夠通過(guò)重定向?qū)雂ll文件,包括:判斷與所述PE文件相同目錄下是否含有后綴名為local”的文件或者文件夾;若與所述PE文件相同目錄下不含有后綴名為local”的文件或者文件夾,則確定所述PE文件不能夠通過(guò)重定向?qū)雂ll文件。7.根據(jù)權(quán)利要求2所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述判斷所述PE文件是否能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù),包括:判斷所述PE文件是否含有導(dǎo)出表;若所述PE文件不含有導(dǎo)出表,則確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);或者若所述PE文件含有導(dǎo)出表,則判斷所述PE文件的導(dǎo)出表是否是空表;若所述PE文件的導(dǎo)出表是空表,則確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù)。8.根據(jù)權(quán)利要求2所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述判斷所述PE文件的入口點(diǎn)是否為O且在頭部是否會(huì)執(zhí)行跳轉(zhuǎn)指令,包括:獲取所述PE文件的入口點(diǎn);判斷所述PE文件的入口點(diǎn)是否為O;若所述PE文件的入口點(diǎn)是0,則檢查所述PE文件的第五個(gè)字節(jié)的指令是否是FF、E9或EB;若所述PE文件的第五個(gè)字節(jié)的指令不是FF、E9和EB,則確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令;或者若所述PE文件的第五個(gè)字節(jié)的指令是FF,則檢查所述PE文件的第六個(gè)字節(jié)的指令是否是25或15;若所述PE文件的第六個(gè)字節(jié)的指令不是25和15,則確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令。9.根據(jù)權(quán)利要求1所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述判斷一PE文件中是否含有代碼,包括:判斷一PE文件是否含有線程局部存儲(chǔ)目錄;若所述PE文件不含線程局部存儲(chǔ)目錄,則確定所述PE文件中不含有代碼;或者若所述PE文件含有線程局部存儲(chǔ)目錄,則獲取所述PE文件的線程局部存儲(chǔ)目錄;判斷所述線程局部存儲(chǔ)目錄中是否含有指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針;若所述線程局部存儲(chǔ)目錄中不含指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針,則確定所述PE文件中不含有代碼;或者若所述線程局部存儲(chǔ)目錄中含有指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針,則判斷所述PE文件的開(kāi)發(fā)環(huán)境是否是Delphi;若所述PE文件的開(kāi)發(fā)環(huán)境是Delphi,則確定所述PE文件中不含有代碼。10.根據(jù)權(quán)利要求1所述的識(shí)別PE文件中資源文件的方法,其特征在于,所述判斷一PE文件中是否含有代碼,包括:獲取一PE文件中的節(jié)的節(jié)名;通過(guò)查詢預(yù)設(shè)的庫(kù)判斷所述PE文件中的節(jié)是否均是非代碼節(jié);其中,所述預(yù)設(shè)的庫(kù)中保存有非代碼節(jié)的節(jié)名;若所述PE文件中的節(jié)均是非代碼節(jié),則確定所述PE文件中不含有代碼。11.根據(jù)權(quán)利要求1所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述判斷一PE文件中是否含有代碼,包括:獲取一PE文件中的節(jié)的屬性;判斷所述PE文件中的節(jié)的屬性是否為不可執(zhí)行;若所述PE文件中的節(jié)的屬性為不可執(zhí)行,則確定所述PE文件中不含有代碼。12.根據(jù)權(quán)利要求1所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述判斷一PE文件中是否含有代碼,包括:判斷一PE文件中是否含有.NET程序集;若所述PE文件中不含有.NET程序集,則確定所述PE文件中不含有代碼;或者若所述PE文件中含有.NET程序集,則檢查所述PE文件中的.NET程序集是否能夠引用其它.NET程序集;若所述.NET程序集不能夠引用其它.NET程序集,則確定所述PE文件中不含有代碼;或者若所述.NET程序集能夠引用其它.NET程序集,則判斷所述其它.NET程序集是否為System,dll;若所述其它.NET程序集為System,dll,則確定所述PE文件中不含有代碼。13.根據(jù)權(quán)利要求1所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述判斷一PE文件中是否含有代碼,包括:判斷一PE文件中是否含有.NET程序集;若所述PE文件中含有.NET程序集,則檢查所述PE文件中的.NET程序集中是否定義了類;若所述.NET程序集中未定義類,則確定所述PE文件中不含有代碼;或者若所述.NET程序集中定義了類,則檢查所述.NET程序集中定義的類是否均不含有方法;若所述.NET程序集中定義的類均不含有方法,則確定所述PE文件中不含有代碼;或者若所述.NET程序集中定義的類中存在含有方法的類,則檢查所述含有方法的類中的方法是否為不含方法體的構(gòu)造函數(shù);若所述含有方法的類中的方法為不含方法體的構(gòu)造函數(shù),則確定所述PE文件中不含有代碼。14.根據(jù)權(quán)利要求1所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,在所述判斷一PE文件中是否含有代碼之前,還包括:檢查所述PE文件的大小、所述PE文件的類型和/或所述PE文件的路徑;其中,所述判斷一PE文件中是否含有代碼,包括:若所述PE文件的大小在預(yù)設(shè)的文件大小范圍內(nèi)、所述PE文件的類型屬于預(yù)設(shè)的類型集合和/或所述PE文件的路徑屬于預(yù)設(shè)的路徑集合,則判斷所述PE文件中是否含有代碼。15.根據(jù)權(quán)利要求1所述的識(shí)別PE文件是否是資源文件的方法,其特征在于,所述若所述PE文件含有正常的資源信息,則確定所述PE文件是資源文件,包括:若所述PE文件含有正常的資源信息,則檢查所述PE文件中的資源是否綁定了其它PE文件和/或是否捆綁了包;若所述PE文件中的資源未綁定其它PE文件和/或未捆綁包,則確定所述PE文件是資源文件。16.一種識(shí)別PE文件是否是資源文件的裝置,其特征在于,包括:判斷單元,用于判斷一PE文件中是否含有代碼;第一檢查單元,用于若所述判斷單元確定出所述PE文件中不含有代碼,則檢查所述PE文件是否含有正常的資源信息;確定單元,用于若所述第一檢查單元確定所述PE文件含有正常的資源信息,則確定所述PE文件是資源文件。17.根據(jù)權(quán)利要求16所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述判斷單元,包括:第一判斷子單元,用于判斷一PE文件是否能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件;和/或第二判斷子單元,用于判斷所述PE文件是否能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;和/或第三判斷子單元,用于判斷所述PE文件是否能夠通過(guò)Manifest文件導(dǎo)入dll文件;和/或第四判斷子單元,用于判斷所述PE文件是否能夠通過(guò)重定向?qū)雂ll文件;和/或第五判斷子單元,用于判斷所述PE文件是否能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);和/或第六判斷子單元,用于判斷所述PE文件的入口點(diǎn)是否為O且在頭部是否會(huì)執(zhí)行跳轉(zhuǎn)指令;第一確定子單元,用于若所述第一判斷子單元確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或若所述第二判斷子單元確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;和/或若所述第三判斷子單元確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件;和/或若所述第四判斷子單元確定所述PE文件不能夠通過(guò)重定向?qū)雂ll文件;和/或若所述第五判斷子單元確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);和/或若所述第六判斷子單元確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令,則確定所述PE文件中不含有代碼。18.根據(jù)權(quán)利要求17所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述第一判斷子單元,包括:第一判斷模塊,用于判斷一PE文件是否含有導(dǎo)入表;第一確定模塊,用于若所述第一判斷模塊確定所述PE文件不含導(dǎo)入表,則確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者第二判斷模塊,用于若所述第一判斷模塊確定所述PE文件含有導(dǎo)入表,則判斷所述PE文件的導(dǎo)入表是否為空表;第二確定模塊,用于若所述第二判斷模塊確定所述PE文件的導(dǎo)入表是空表,則確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者第三判斷模塊,用于若所述第二判斷模塊確定所述PE文件的導(dǎo)入表不是空表,則判斷所述PE文件通過(guò)導(dǎo)入表導(dǎo)入的dll文件是否為mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一個(gè);第三確定模塊,用于若所述第三判斷模塊確定所述PE文件通過(guò)導(dǎo)入表導(dǎo)入的dll文件為mscoree.dll>Microsoft.CSharp.dlI>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一個(gè),則確定所述PE文件不能夠通過(guò)導(dǎo)入表導(dǎo)入除mscoree.dll、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件。19.根據(jù)權(quán)利要求17所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述第二判斷子單元,包括:第四判斷模塊,用于判斷所述PE文件是否含有延遲導(dǎo)入表;第四確定模塊,用于若所述第四判斷模塊確定所述PE文件不含延遲導(dǎo)入表,則確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件;或者第五判斷模塊,用于若所述第四判斷模塊確定所述PE文件含有延遲導(dǎo)入表,則判斷所述PE文件的延遲導(dǎo)入表是否為空表;第五確定模塊,用于若所述第五判斷模塊確定所述PE文件的延遲導(dǎo)入表是空表,則確定所述PE文件不能夠通過(guò)延遲導(dǎo)入表導(dǎo)入dll文件。20.根據(jù)權(quán)利要求17所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述第三判斷子單元,包括:第六判斷模塊,用于判斷所述PE文件是否含有Manifest文件;第六確定模塊,用于若所述第六判斷模塊確定所述PE文件不含Manifest文件,則確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件;或者第七判斷模塊,用于若所述第六判斷模塊確定所述PE文件含有Manifest文件,則判斷所述PE文件的Manifest文件中是否含有dll文件的Manifest文件;第七確定模塊,用于若所述第七判斷模塊確定所述PE文件的Manifest文件中不含有dll文件的Manifest文件,則確定所述PE文件不能夠通過(guò)Manifest文件導(dǎo)入dll文件。21.根據(jù)權(quán)利要求17所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述第四判斷子單元,包括:第八判斷模塊,用于判斷與所述PE文件相同目錄下是否含有后綴名為local”的文件或者文件夾;第八確定模塊,用于若所述第八判斷模塊確定與所述PE文件相同目錄下不含有后綴名為local”的文件或者文件夾,則確定所述PE文件不能夠通過(guò)重定向?qū)雂ll文件。22.根據(jù)權(quán)利要求17所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述第五判斷子單元,包括:第九判斷模塊,用于判斷所述PE文件是否含有導(dǎo)出表;第九確定模塊,用于若所述第九判斷模塊確定所述PE文件不含有導(dǎo)出表,則確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù);或者第十判斷模塊,用于若所述第九判斷模塊確定所述PE文件含有導(dǎo)出表,則判斷所述PE文件的導(dǎo)出表是否是空表;第十確定模塊,用于若所述第十判斷模塊確定所述PE文件的導(dǎo)出表是空表,則確定所述PE文件不能夠通過(guò)導(dǎo)出表導(dǎo)出函數(shù)。23.根據(jù)權(quán)利要求17所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述第六判斷子單元,包括:入口點(diǎn)獲取模塊,用于獲取所述PE文件的入口點(diǎn);第十一判斷模塊,用于判斷所述PE文件的入口點(diǎn)是否為O;第一檢查模塊,用于若所述第十一判斷模塊確定所述PE文件的入口點(diǎn)是0,則檢查所述PE文件的第五個(gè)字節(jié)的指令是否是FF、E9或EB;第十一確定模塊,用于若所述第一檢查模塊確定所述PE文件的第五個(gè)字節(jié)的指令不是FF、E9和EB,則確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令;或者第二檢查模塊,用于若所述第一檢查模塊確定所述PE文件的第五個(gè)字節(jié)的指令是FF,則檢查所述PE文件的第六個(gè)字節(jié)的指令是否是25或15;第十二確定模塊,用于若所述第二檢查模塊確定所述PE文件的第六個(gè)字節(jié)的指令不是25和15,則確定所述PE文件的入口點(diǎn)為O且在頭部不會(huì)執(zhí)行跳轉(zhuǎn)指令。24.根據(jù)權(quán)利要求16所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述判斷單元,包括:第七判斷子單元,用于判斷一PE文件是否含有線程局部存儲(chǔ)目錄;第二確定子單元,用于若所述第七判斷子單元確定所述PE文件不含線程局部存儲(chǔ)目錄,則確定所述PE文件中不含有代碼;或者第一獲取子單元,用于若所述第七判斷子單元確定所述PE文件含有線程局部存儲(chǔ)目錄,則獲取所述PE文件的線程局部存儲(chǔ)目錄;第八判斷子單元,用于判斷所述第一獲取子單元獲取的所述線程局部存儲(chǔ)目錄中是否含有指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針;第三確定子單元,用于若所述第八判斷子單元確定所述線程局部存儲(chǔ)目錄中不含指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針,則確定所述PE文件中不含有代碼;或者第九判斷子單元,用于若所述第八判斷子單元確定所述線程局部存儲(chǔ)目錄中含有指向線程局部存儲(chǔ)回調(diào)函數(shù)數(shù)組的指針,則判斷所述PE文件的開(kāi)發(fā)環(huán)境是否是Delphi;第四確定子單元,用于若所述第九判斷子單元確定所述PE文件的開(kāi)發(fā)環(huán)境是Delphi,則確定所述PE文件中不含有代碼。25.根據(jù)權(quán)利要求16所述的識(shí)別PE文件中資源文件的裝置,其特征在于,所述判斷單元,包括:第二獲取子單元,用于獲取一PE文件中的節(jié)的節(jié)名;第十判斷子單元,用于通過(guò)查詢預(yù)設(shè)的庫(kù)判斷所述PE文件中的節(jié)是否均是非代碼節(jié);其中,所述預(yù)設(shè)的庫(kù)中保存有非代碼節(jié)的節(jié)名;第五確定子單元,用于若所述第十判斷子單元確定所述PE文件中的節(jié)均是非代碼節(jié),則確定所述PE文件中不含有代碼。26.根據(jù)權(quán)利要求16所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述判斷單元,包括:第三獲取子單元,用于獲取一PE文件中的節(jié)的屬性;第十一判斷子單元,用于判斷所述第三獲取子單元獲取的所述PE文件中的節(jié)的屬性是否為不可執(zhí)行;第六確定子單元,用于若所述第十一判斷子單元確定所述PE文件中的節(jié)的屬性為不可執(zhí)行,則確定所述PE文件中不含有代碼。27.根據(jù)權(quán)利要求16所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述判斷單元,包括:第十二判斷子單元,用于判斷一PE文件中是否含有.NET程序集;第七確定子單元,用于若所述第十二判斷子單元確定所述PE文件中不含有.NET程序集,則確定所述PE文件中不含有代碼;或者第一檢查子單元,用于若所述第十二判斷子單元確定所述PE文件中含有.NET程序集,則檢查所述PE文件中的.NET程序集是否能夠引用其它.NET程序集;第八確定子單元,用于若所述第一檢查子單元確定所述.NET程序集不能夠引用其它.NET程序集,則確定所述PE文件中不含有代碼;或者第十三判斷子單元,用于若所述第一檢查子單元確定所述.NET程序集能夠引用其它.NET程序集,則判斷所述其它.NET程序集是否為System,dll;第九確定子單元,用于若所述第十三判斷子單元確定所述其它.NET程序集為System,dll,則確定所述PE文件中不含有代碼。28.根據(jù)權(quán)利要求16所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述判斷單元,包括:第十四判斷子單元,用于判斷一PE文件中是否含有.NET程序集;第二檢查子單元,用于若所述第十四判斷子單元確定所述PE文件中含有.NET程序集,則檢查所述PE文件中的.NET程序集中是否定義了類;第十確定子單元,用于若所述第二檢查子單元確定所述.NET程序集中未定義類,則確定所述PE文件中不含有代碼;或者第三檢查子單元,用于若所述第二檢查子單元確定所述.NET程序集中定義了類,則檢查所述.NET程序集中定義的類是否均不含有方法;第十一確定子單元,用于若所述第三檢查子單元確定所述.NET程序集中定義的類均不含有方法,則確定所述PE文件中不含有代碼;或者第四檢查子單元,用于若所述第三檢查子單元確定所述.NET程序集中定義的類中存在含有方法的類,則檢查所述含有方法的類中的方法是否為不含方法體的構(gòu)造函數(shù);第十二確定子單元,用于若所述第四檢查子單元確定所述含有方法的類中的方法為不含方法體的構(gòu)造函數(shù),則確定所述PE文件中不含有代碼。29.根據(jù)權(quán)利要求16所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,還包括:第二檢查單元,用于在所述判斷單元確定一PE文件中是否含有代碼之前,檢查所述PE文件的大小、所述PE文件的類型和/或所述PE文件的路徑;其中,所述判斷單元,用于若所述第二檢查單元確定所述PE文件的大小在預(yù)設(shè)的文件大小范圍內(nèi)、所述PE文件的類型屬于預(yù)設(shè)的類型集合和/或所述PE文件的路徑屬于預(yù)設(shè)的路徑集合,則判斷所述PE文件中是否含有代碼。30.根據(jù)權(quán)利要求16所述的識(shí)別PE文件是否是資源文件的裝置,其特征在于,所述確定單元,包括:第五檢查子單元,用于若所述第一檢查單元確定所述PE文件含有正常的資源信息,則檢查所述PE文件中的資源是否綁定了其它PE文件和/或是否捆綁了包;第十三確定子單元,用于若所述第五檢查子單元確定所述PE文件中的資源未綁定其它PE文件和/或未捆綁包,則確定所述PE文件是資源文件?!疚臋n編號(hào)】G06F21/56GK104298919SQ201410522867【公開(kāi)日】2015年1月21日申請(qǐng)日期:2014年9月30日優(yōu)先權(quán)日:2014年9月30日【發(fā)明者】周楊,劉桂峰,姚輝申請(qǐng)人:珠海市君天電子科技有限公司