一种识别pe文件是否是资源文件的方法及装置制造方法

文档序号:6629326阅读:274来源:国知局
一种识别pe文件是否是资源文件的方法及装置制造方法【专利摘要】本发明实施例公开一种识别PE文件是否是资源文件的方法及装置,涉及计算机安全【
技术领域
】,能够提高系统中资源文件的识别成功率。所述识别PE文件是否是资源文件的方法,包括:判断一PE文件中是否含有代码;若PE文件中不含有代码,则检查PE文件是否含有正常的资源信息;若PE文件含有正常的资源信息,则确定PE文件是资源文件。所述识别PE文件是否是资源文件的装置,包括:判断单元,用于判断一PE文件中是否含有代码;第一检查单元,用于若PE文件中不含有代码,则检查PE文件是否含有正常的资源信息;确定单元,用于若PE文件含有正常的资源信息,则确定PE文件是资源文件。本发明适用于需要识别出系统中资源文件的场合。【专利说明】一种识别PE文件是否是资源文件的方法及装置【
技术领域
】[0001]本发明涉及计算机安全【
技术领域
】,尤其涉及一种识别PE文件是否是资源文件的方法及装置。【
背景技术
】[0002]PE文件被称为可移植的执行体,其英文全称是PortableExecute。常见的ΕΧΕ、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件。[0003]资源文件是一种仅含资源数据,不含代码的PE文件,占系统中全部PE文件的90%以上。在实际的应用中经常需要从系统中的所有PE文件中识别出资源文件,比如,安全软件常常需要监控和扫描系统中的所有PE文件并判定其是否含有恶意代码,而通常的做法是先识别出系统中全部PE文件中的资源文件,然后筛选出系统中全部PE文件中的非资源文件,最后再判定系统中全部PE文件中的非资源文件是否含有恶意代码。[0004]而现有技术判断PE文件是资源文件只需要PE文件满足不含导入表和导出表,且入口点是O即可,因而会漏掉很多资源文件(比如,含有空导入表和空导出表,且入口点是O、执行时不会跳转到恶意代码的PE文件),且存在潜在的安全风险(比如,不含导入表和导出表,且入口点是O、执行时会跳转到恶意代码的PE文件会被识别为资源文件),即现有识别资源文件的成功率较低。【
发明内容】[0005]有鉴于此,本发明实施例提供一种识别PE文件是否是资源文件的方法及装置,能够提高系统中资源文件的识别成功率。[0006]为达到上述目的,本发明的实施例采用如下技术方案:[0007]一方面,本发明实施例提供一种识别PE文件是否是资源文件的方法,包括:[0008]判断一PE文件中是否含有代码;[0009]若所述PE文件中不含有代码,则检查所述PE文件是否含有正常的资源信息;[0010]若所述PE文件含有正常的资源信息,则确定所述PE文件是资源文件。[0011]本发明实施例提供的识别PE文件是否是资源文件的方法,通过判断PE文件中是否含有代码,并在PE文件中不含有代码时,检查PE文件是否含有正常的资源信息,在PE文件含有正常的资源信息时,确定PE文件是资源文件;因而能够提高系统中资源文件的识别成功率。[0012]另一方面,本发明实施例提供一种识别PE文件是否是资源文件的装置,包括:[0013]判断单元,用于判断一PE文件中是否含有代码;[0014]第一检查单元,用于若所述判断单元确定出所述PE文件中不含有代码,则检查所述PE文件是否含有正常的资源信息;[0015]确定单元,用于若所述第一检查单元确定所述PE文件含有正常的资源信息,则确定所述PE文件是资源文件。[0016]本发明实施例提供的识别PE文件是否是资源文件的装置,通过判断PE文件中是否含有代码,并在PE文件中不含有代码时,检查PE文件是否含有正常的资源信息,在PE文件含有正常的资源信息时,确定PE文件是资源文件;因而能够提高系统中资源文件的识别成功率。【专利附图】【附图说明】[0017]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。[0018]图1为本发明识别PE文件是否是资源文件的方法一实施例的流程示意图;[0019]图2为图1中SI—实施例的流程示意图;[0020]图3为图2中SlO—实施例的流程示意图;[0021]图4为图2中Sll—实施例的流程示意图;[0022]图5为图2中S12—实施例的流程示意图;[0023]图6为图2中S13—实施例的流程示意图;[0024]图7为图2中S14—实施例的流程示意图;[0025]图8为图2中S15—实施例的流程示意图;[0026]图9为图1中SI另一实施例的流程示意图;[0027]图10为图1中SI又一实施例的流程示意图;[0028]图11为图1中SI又一实施例的流程示意图;[0029]图12为图1中SI又一实施例的流程示意图;[0030]图13为图1中SI又一实施例的流程示意图;[0031]图14为图1中S3—实施例的流程示意图;[0032]图15为本发明识别PE文件是否是资源文件的装置一实施例的方意图;[0033]图16为图15中判断单元一实施例的方框结构示意图;[0034]图17为图16中第一判断子单元一实施例的方框结构示意图;[0035]图18为图16中第二判断子单元一实施例的方框结构示意图;[0036]图19为图16中第三判断子单元一实施例的方框结构示意图;[0037]图20为图16中第四判断子单元一实施例的方框结构示意图;[0038]图21为图16中第五判断子单元一实施例的方框结构示意图;[0039]图22为图16中第六判断子单元一实施例的方框结构示意图;[0040]图23为图15中判断单元另一实施例的方框结构示意图;[0041]图24为图15中判断单元又一实施例的方框结构示意图;[0042]图25为图15中判断单元又一实施例的方框结构示意图;[0043]图26为图15中判断单元又一实施例的方框结构示意图;[0044]图27为图15中判断单元又一实施例的方框结构示意图;[0045]图28为图15中确定单元一实施例的方框结构示意图。【具体实施方式】[0046]下面结合附图对本发明实施例一种识别PE文件是否是资源文件的方法及装置进行详细描述。[0047]应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。[0048]参看图1,本发明的实施例提供一种识别PE文件是否是资源文件的方法,包括:[0049]S1、判断一PE文件中是否含有代码;[0050]S2、若所述PE文件中不含有代码,则检查所述PE文件是否含有正常的资源信息;[0051]S3、若所述PE文件含有正常的资源信息,则确定所述PE文件是资源文件。[0052]本发明实施例提供的识别PE文件是否是资源文件的方法,通过判断PE文件中是否含有代码,并在PE文件中不含有代码时,检查PE文件是否含有正常的资源信息,在PE文件含有正常的资源信息时,确定PE文件是资源文件;因而能够提高系统中资源文件的识别成功率。[0053]可选地,参看图2,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断一PE文件中是否含有代码(SI),包括:[0054]S10、判断一PE文件是否能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或[0055]S11、判断所述PE文件是否能够通过延迟导入表导入dll文件;和/或[0056]S12、判断所述PE文件是否能够通过Manifest文件导入dll文件;和/或[0057]S13、判断所述PE文件是否能够通过重定向导入dll文件;和/或[0058]S14、判断所述PE文件是否能够通过导出表导出函数;和/或[0059]S15、判断所述PE文件的入口点是否为O且在头部是否会执行跳转指令;[0060]S16、若确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或[0061]若确定所述PE文件不能够通过延迟导入表导入dll文件;和/或[0062]若确定所述PE文件不能够通过Manifest文件导入dll文件;和/或[0063]若确定所述PE文件不能够通过重定向导入dll文件;和/或[0064]若确定所述PE文件不能够通过导出表导出函数;和/或[0065]若确定所述PE文件的入口点为O且在头部不会执行跳转指令,则确定所述PE文件中不含有代码。[0066]因为PE文件能够通过导入表、延迟导入表、Manifest文件和重定向导入dll文件从而使其含有代码,所以判断一个PE文件是否能够通过导入dll文件使其含有代码需要从导入表、延迟导入表、Manifest文件和重定向这四个方面进行判断。导入表是一个IMAGE_MP0RT_DESCRIPT0R数据结构的数组,每一个IMAGEJMP0RT_DESCRIPT0R结构表明一个dll的信息。本实施例中,若PE文件的导入表不是空表,那么对于PE文件的导入表的每一个IMAGE_IMP0RT_DESCRIPT0R结构,需要获取该IMAGEJMP0RT_DESCRIPT0R结构的成员Name的值(成员Name的值指向一个导入dll文件的文件名),并根据该成员Name的值找到该成员Name的值所指向的导入dll文件的文件名。根据PE文件的导入表所找到的导入dll文件的文件名即为PE文件能够通过导入表导入的dll文件的文件名。因为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dllL只有.NETFramework本身才会使用,其他人无法使用其功能,故若一个PE文件能够通过导入表导入的dll文件为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一个,则认为该PE文件未通过导入表导入dll文件使其含有代码。[0067]本实施例中,通过判断PE文件是否能够通过导入表导入除mscoree.dl1、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件、所述PE文件是否能够通过延迟导入表导入dll文件、所述PE文件是否能够通过Manifest文件导入dll文件、所述PE文件是否能够通过重定向导入dll文件、所述PE文件是否能够通过导出表导出函数和/或所述PE文件的入口点是否为O且在头部是否会执行跳转指令,能够较准确地确定出所述PE文件中是否含有代码。[0068]可选地,参看图3,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断一PE文件是否能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件(SlO),包括:[0069]S100、判断一PE文件是否含有导入表;[0070]S101、若所述PE文件不含导入表,则确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者[0071]S102、若所述PE文件含有导入表,则判断所述PE文件的导入表是否为空表;[0072]S103、若所述PE文件的导入表是空表,则确定所述PE文件不能够通过导入表导入除mscoree.dll>Microsoft.CSharp.dlI>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者[0073]S104、若所述PE文件的导入表不是空表,则判断所述PE文件通过导入表导入的dll文件是否为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一个;[0074]S105、若所述PE文件通过导入表导入的dll文件为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一个,则确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件。[0075]本实施例中,通过判断PE文件是否能够通过导入表导入除mscoree.dl1、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件,能够较准确地确定出所述PE文件是否能够通过导入表导入dll文件从而使其含有代码。[0076]可选地,参看图4,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断所述PE文件是否能够通过延迟导入表导入dll文件(Sll),包括:[0077]SI10、判断所述PE文件是否含有延迟导入表;[0078]Sll1、若所述PE文件不含延迟导入表,则确定所述PE文件不能够通过延迟导入表导入dll文件;或者[0079]SI12、若所述PE文件含有延迟导入表,则判断所述PE文件的延迟导入表是否为空表;[0080]S113、若所述PE文件的延迟导入表是空表,则确定所述PE文件不能够通过延迟导入表导入dll文件。[0081]PE文件的延迟导入表是一个数组,每一项都是一个ImgDelayDescr结构体,每一项都代表一个导入的dll。PE文件不含延迟导入表或者延迟导入表是空表,均可以说明PE文件不能够通过延迟导入表导入dll文件。[0082]本实施例中,通过判断PE文件是否能够通过延迟导入表导入dll文件,能够准确地确定出所述PE文件是否能够通过延迟导入表导入dll文件从而使其含有代码。[0083]可选地,参看图5,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断所述PE文件是否能够通过Manifest文件导入dll文件(S12),包括:[0084]S120、判断所述PE文件是否含有Manifest文件;[0085]S121、若所述PE文件不含Manifest文件,则确定所述PE文件不能够通过Manifest文件导入dll文件;或者[0086]S122、若所述PE文件含有Manifest文件,则判断所述PE文件的Manifest文件中是否含有dll文件的Manifest文件;[0087]S123、若所述PE文件的Manifest文件中不含有dll文件的Manifest文件,则确定所述PE文件不能够通过Manifest文件导入dll文件。[0088]Manifest文件是个XML格式的描述文件,每个dll文件都有自己的Manifest文件,通过dll文件的Manifest文件能够找到其所对应的dll文件。[0089]本实施例中,通过判断PE文件是否能够通过Manifest文件导入dll文件,能够准确地确定出所述PE文件是否能够通过Manifest文件导入dll文件从而使其含有代码。[0090]可选地,参看图6,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断所述PE文件是否能够通过重定向导入dll文件(S13),包括:[0091]S130、判断与所述PE文件相同目录下是否含有后缀名为“.local”的文件或者文件夹;[0092]S131、若与所述PE文件相同目录下不含有后缀名为“.local”的文件或者文件夹,则确定所述PE文件不能够通过重定向导入dll文件。[0093]本实施例中,通过判断PE文件是否能够通过重定向导入dll文件,能够准确地确定出所述PE文件是否能够通过重定向导入dll文件从而使其含有代码。[0094]可选地,参看图7,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断所述PE文件是否能够通过导出表导出函数(S14),包括:[0095]S140、判断所述PE文件是否含有导出表;[0096]S141、若所述PE文件不含有导出表,则确定所述PE文件不能够通过导出表导出函数;或者[0097]S142、若所述PE文件含有导出表,则判断所述PE文件的导出表是否是空表;[0098]S143、若所述PE文件的导出表是空表,则确定所述PE文件不能够通过导出表导出函数。[0099]本实施例中,通过判断PE文件是否能够通过导出表导出函数,能够更准确地确定出PE文件中是否含有代码。[0100]可选地,参看图8,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断所述PE文件的入口点是否为O且在头部是否会执行跳转指令(S15),包括:[0101]S150、获取所述PE文件的入口点;[0102]S151、判断所述PE文件的入口点是否为O;[0103]S152、若所述PE文件的入口点是0,则检查所述PE文件的第五个字节的指令是否是FF、E9或EB;[0104]S153、若所述PE文件的第五个字节的指令不是FF、E9和EB,则确定所述PE文件的入口点为O且在头部不会执行跳转指令;或者[0105]S154、若所述PE文件的第五个字节的指令是FF,则检查所述PE文件的第六个字节的指令是否是25或15;[0106]S155、若所述PE文件的第六个字节的指令不是25和15,则确定所述PE文件的入口点为O且在头部不会执行跳转指令。[0107]如果PE文件的入口点是0,那么在执行PE文件的时候就会从PE文件的DOS头开始执行。PE文件的DOS头的第一个域为e_magic,其ASCII字符为"MZ"。PE文件执行到域e_magic时,会将字符〃M〃误认为是指令,因而会执行decebp指令(即0x4D),将通用寄存器ebp减I;会将字符〃Z〃误认为是指令,因而会执行popedx指令(即0x5A),把通用寄存器edx弹出堆栈。如果该PE文件已被病毒感染,那么通常接下来会先恢复之前将字符〃M〃和"Z"误认为是指令所做的操作,然后再跳转到病毒代码处执行,即依次执行pushedx指令(即0x52)、incebp指令(即0x45)、跳转指令和病毒代码。因而如果一个PE文件的入口点是0,那么只需要在该PE文件开头处检查指令序列是否为4D5A5245FF25(FF25为jmp跳转)、4D5A5245E9(E9为jmp跳转)、4D5A5245EB(EB为jmp跳转)、4D5A5245FF15(FF15为call跳转)中的一种即可。如果在该PE文件开头处检查出指令序列是以上四种中的一种,那么说明该PE中文件含有代码,即该PE文件不是资源文件。[0108]本实施例中,通过判断PE文件的入口点是否为O且在头部是否会执行跳转指令,能够更准确地确定出PE文件中是否含有代码。[0109]可选地,参看图9,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断一PE文件中是否含有代码(SI),包括:[0110]SalO、判断一PE文件是否含有线程局部存储目录;[0111]Sail、若所述PE文件不含线程局部存储目录,则确定所述PE文件中不含有代码;或者[0112]Sal2、若所述PE文件含有线程局部存储目录,则获取所述PE文件的线程局部存储目录;[0113]Sal3、判断所述线程局部存储目录中是否含有指向线程局部存储回调函数数组的指针;[0114]Sal4、若所述线程局部存储目录中不含指向线程局部存储回调函数数组的指针,则确定所述PE文件中不含有代码;或者[0115]Sal5、若所述线程局部存储目录中含有指向线程局部存储回调函数数组的指针,则判断所述PE文件的开发环境是否是Delphi;[0116]Sal6、若所述PE文件的开发环境是Delphi,则确定所述PE文件中不含有代码。[0117]本实施例中,通过检查PE文件的线程局部存储目录,能够更准确地确定出PE文件中是否含有代码。[0118]可选地,参看图10,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断一PE文件中是否含有代码(SI),包括:[0119]Sa20、获取一PE文件中的节的节名;[0120]Sa21、通过查询预设的库判断所述PE文件中的节是否均是非代码节;其中,所述预设的库中保存有非代码节的节名;[0121]Sa22、若所述PE文件中的节均是非代码节,则确定所述PE文件中不含有代码。[0122]本实施例中,通过查询预设的库,能够较方便地确定出PE文件中的节是否均是非代码节;通过判断PE文件中的节是否均是非代码节,能够更准确地确定出PE文件中是否含有代码。[0123]可选地,参看图11,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断一PE文件中是否含有代码(SI),包括:[0124]Sa30、获取一PE文件中的节的属性;[0125]Sa31、判断所述PE文件中的节的属性是否为不可执行;[0126]Sa32、若所述PE文件中的节的属性为不可执行,则确定所述PE文件中不含有代码。[0127]本实施例中,通过判断PE文件中的节的属性是否为不可执行,能够更准确地确定出PE文件中是否含有代码。[0128]可选地,参看图12,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断一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的一个基本的程序集,几乎所有的程序都会引用到它。故如果一个PE文件中的.NET程序集只引用了System,dll,那么可以认为该PE文件未通过自身的.NET程序集能够引用的其它.NET程序集从而使其含有代码。[0136]本实施例中,通过检查PE文件中的.NET程序集是否能够引用其它.NET程序集,能够更准确地确定出PE文件中是否含有代码。[0137]可选地,参看图13,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述判断一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程序集中定义的类中存在含有方法的类,则检查所述含有方法的类中的方法是否为不含方法体的构造函数;[0144]Sa56、若所述含有方法的类中的方法为不含方法体的构造函数,则确定所述PE文件中不含有代码。[0145]本实施例中,通过检查PE文件中定义的类是否均不含有方法或者PE文件中定义的含有方法的类中的方法是否为不含方法体的构造函数,能够更准确地确定出PE文件中是否含有代码。[0146]可选地,在本发明识别PE文件是否是资源文件的方法的另一实施例中,在所述判断一PE文件中是否含有代码之前,还包括:[0147]检查所述PE文件的大小、所述PE文件的类型和/或所述PE文件的路径;[0148]其中,所述判断一PE文件中是否含有代码,包括:[0149]若所述PE文件的大小在预设的文件大小范围内、所述PE文件的类型属于预设的类型集合和/或所述PE文件的路径属于预设的路径集合,则判断所述PE文件中是否含有代码。[0150]本实施例中,通过检查PE文件的大小、类型和路径,并筛选出大小在预设的文件大小范围内、类型属于预设的类型集合和路径属于预设的路径集合的PE文件,能够进一步保证识别PE文件是否是资源文件的准确性。[0151]可选地,参看图14,在本发明识别PE文件是否是资源文件的方法的另一实施例中,所述若所述PE文件含有正常的资源信息,则确定所述PE文件是资源文件(S3),包括:[0152]S30、若所述PE文件含有正常的资源信息,则检查所述PE文件中的资源是否绑定了其它PE文件和/或是否捆绑了包;[0153]S31、若所述PE文件中的资源未绑定其它PE文件和/或未捆绑包,则确定所述PE文件是资源文件。[0154]本实施例中,通过检查PE文件中的资源是否绑定了其它PE文件和/或是否捆绑了包,能够更准确地确定出PE文件是否是资源文件。[0155]参看图15,本发明的实施例提供一种识别PE文件是否是资源文件的装置,包括:[0156]判断单元1,用于判断一PE文件中是否含有代码;[0157]第一检查单元2,用于若所述判断单元I确定出所述PE文件中不含有代码,则检查所述PE文件是否含有正常的资源信息;[0158]确定单元3,用于若所述第一检查单元2确定所述PE文件含有正常的资源信息,则确定所述PE文件是资源文件。[0159]本发明实施例提供的识别PE文件是否是资源文件的装置,通过判断PE文件中是否含有代码,并在PE文件中不含有代码时,检查PE文件是否含有正常的资源信息,在PE文件含有正常的资源信息时,确定PE文件是资源文件;因而能够提高系统中资源文件的识别成功率。[0160]可选地,参看图16,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述判断单元1,包括:[0161]第一判断子单元10,用于判断一PE文件是否能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或[0162]第二判断子单元11,用于判断所述PE文件是否能够通过延迟导入表导入dll文件;和/或[0163]第三判断子单元12,用于判断所述PE文件是否能够通过Manifest文件导入dll文件;和/或[0164]第四判断子单元13,用于判断所述PE文件是否能够通过重定向导入dll文件;和/或[0165]第五判断子单元14,用于判断所述PE文件是否能够通过导出表导出函数;和/或[0166]第六判断子单元15,用于判断所述PE文件的入口点是否为O且在头部是否会执行跳转指令;[0167]第一确定子单元16,用于若所述第一判断子单元10确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或[0168]若所述第二判断子单元11确定所述PE文件不能够通过延迟导入表导入dll文件;和/或[0169]若所述第三判断子单元12确定所述PE文件不能够通过Manifest文件导入dll文件;和/或[0170]若所述第四判断子单元13确定所述PE文件不能够通过重定向导入dll文件;和/或[0171]若所述第五判断子单元14确定所述PE文件不能够通过导出表导出函数;和/或[0172]若所述第六判断子单元15确定所述PE文件的入口点为O且在头部不会执行跳转指令,则确定所述PE文件中不含有代码。[0173]因为PE文件能够通过导入表、延迟导入表、Manifest文件和重定向导入dll文件从而使其含有代码,所以判断一个PE文件是否能够通过导入dll文件使其含有代码需要从导入表、延迟导入表、Manifest文件和重定向这四个方面进行判断。导入表是一个IMAGE_MP0RT_DESCRIPT0R数据结构的数组,每一个IMAGEJMP0RT_DESCRIPT0R结构表明一个dll的信息。本实施例中,若PE文件的导入表不是空表,那么对于PE文件的导入表的每一个IMAGE_IMPORT_DESCRIPTOR结构,需要获取该IMAGEJMPORT_DESCRIPTOR结构的成员Name的值(成员Name的值指向一个导入dll文件的文件名),并根据该成员Name的值找到该成员Name的值所指向的导入dll文件的文件名。根据PE文件的导入表所找到的导入dll文件的文件名即为PE文件能够通过导入表导入的dll文件的文件名。因为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dllL只有.NETFramework本身才会使用,其他人无法使用其功能,故若一个PE文件能够通过导入表导入的dll文件为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一个,则认为该PE文件未通过导入表导入dll文件使其含有代码。[0174]本实施例中,通过判断PE文件是否能够通过导入表导入除mscoree.dl1、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件、所述PE文件是否能够通过延迟导入表导入dll文件、所述PE文件是否能够通过Manifest文件导入dll文件、所述PE文件是否能够通过重定向导入dll文件、所述PE文件是否能够通过导出表导出函数和/或所述PE文件的入口点是否为O且在头部是否会执行跳转指令,能够较准确地确定出所述PE文件中是否含有代码。[0175]可选地,参看图17,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述第一判断子单元10,包括:[0176]第一判断模块100,用于判断一PE文件是否含有导入表;[0177]第一确定模块101,用于若所述第一判断模块100确定所述PE文件不含导入表,则确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件;或者[0178]第二判断模块102,用于若所述第一判断模块100确定所述PE文件含有导入表,则判断所述PE文件的导入表是否为空表;[0179]第二确定模块103,用于若所述第二判断模块102确定所述PE文件的导入表是空表,则确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件;或者[0180]第三判断模块104,用于若所述第二判断模块102确定所述PE文件的导入表不是空表,则判断所述PE文件通过导入表导入的dll文件是否为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一个;[0181]第三确定模块105,用于若所述第三判断模块104确定所述PE文件通过导入表导入的dll文件为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一个,贝1J确定所述PE文件不能够通过导入表导入除mscoree.dll>Microsoft.CSharp.dlI>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件。[0182]本实施例中,通过判断PE文件是否能够通过导入表导入除mscoree.dl1、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件,能够较准确地确定出所述PE文件是否能够通过导入表导入dll文件从而使其含有代码。[0183]可选地,参看图18,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述第二判断子单元11,包括:[0184]第四判断模块110,用于判断所述PE文件是否含有延迟导入表;[0185]第四确定模块111,用于若所述第四判断模块110确定所述PE文件不含延迟导入表,则确定所述PE文件不能够通过延迟导入表导入dll文件;或者[0186]第五判断模块112,用于若所述第四判断模块110确定所述PE文件含有延迟导入表,则判断所述PE文件的延迟导入表是否为空表;[0187]第五确定模块113,用于若所述第五判断模块112确定所述PE文件的延迟导入表是空表,则确定所述PE文件不能够通过延迟导入表导入dll文件。[0188]PE文件的延迟导入表是一个数组,每一项都是一个ImgDelayDescr结构体,每一项都代表一个导入的dll。PE文件不含延迟导入表或者延迟导入表是空表,均可以说明PE文件不能够通过延迟导入表导入dll文件。[0189]本实施例中,通过判断PE文件是否能够通过延迟导入表导入dll文件,能够准确地确定出所述PE文件是否能够通过延迟导入表导入dll文件从而使其含有代码。[0190]可选地,参看图19,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述第三判断子单元12,包括:[0191]第六判断模块120,用于判断所述PE文件是否含有Manifest文件;[0192]第六确定模块121,用于若所述第六判断模块120确定所述PE文件不含Manifest文件,则确定所述PE文件不能够通过Manifest文件导入dll文件;或者[0193]第七判断模块122,用于若所述第六判断模块120确定所述PE文件含有Manifest文件,则判断所述PE文件的Manifest文件中是否含有dll文件的Manifest文件;[0194]第七确定模块123,用于若所述第七判断模块122确定所述PE文件的Manifest文件中不含有dll文件的Manifest文件,则确定所述PE文件不能够通过Manifest文件导入dll文件。[0195]Manifest文件是个XML格式的描述文件,每个dll文件都有自己的Manifest文件,通过dll文件的Manifest文件能够找到其所对应的dll文件。[0196]本实施例中,通过判断PE文件是否能够通过Manifest文件导入dll文件,能够准确地确定出所述PE文件是否能够通过Manifest文件导入dll文件从而使其含有代码。[0197]可选地,参看图20,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述第四判断子单元13,包括:[0198]第八判断模块130,用于判断与所述PE文件相同目录下是否含有后缀名为local”的文件或者文件夹;[0199]第八确定模块131,用于若所述第八判断模块130确定与所述PE文件相同目录下不含有后缀名为“.local”的文件或者文件夹,则确定所述PE文件不能够通过重定向导入dll文件。[0200]本实施例中,通过判断PE文件是否能够通过重定向导入dll文件,能够准确地确定出所述PE文件是否能够通过重定向导入dll文件从而使其含有代码。[0201]可选地,参看图21,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述第五判断子单元14,包括:[0202]第九判断模块140,用于判断所述PE文件是否含有导出表;[0203]第九确定模块141,用于若所述第九判断模块140确定所述PE文件不含有导出表,则确定所述PE文件不能够通过导出表导出函数;或者[0204]第十判断模块142,用于若所述第九判断模块140确定所述PE文件含有导出表,则判断所述PE文件的导出表是否是空表;[0205]第十确定模块143,用于若所述第十判断模块142确定所述PE文件的导出表是空表,则确定所述PE文件不能够通过导出表导出函数。[0206]本实施例中,通过判断PE文件是否能够通过导出表导出函数,能够更准确地确定出PE文件中是否含有代码。[0207]可选地,参看图22,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述第六判断子单元15,包括:[0208]A口点获取模块150,用于获取所述PE文件的入口点;[0209]第十一判断模块151,用于判断所述PE文件的入口点是否为O;[0210]第一检查模块152,用于若所述第i^一判断模块151确定所述PE文件的入口点是0,则检查所述PE文件的第五个字节的指令是否是FF、E9或EB;[0211]第十一确定模块153,用于若所述第一检查模块152确定所述PE文件的第五个字节的指令不是FF、E9和EB,则确定所述PE文件的入口点为O且在头部不会执行跳转指令;或者[0212]第二检查模块154,用于若所述第一检查模块152确定所述PE文件的第五个字节的指令是FF,则检查所述PE文件的第六个字节的指令是否是25或15;[0213]第十二确定模块155,用于若所述第二检查模块154确定所述PE文件的第六个字节的指令不是25和15,则确定所述PE文件的入口点为O且在头部不会执行跳转指令。[0214]如果PE文件的入口点是0,那么在执行PE文件的时候就会从PE文件的DOS头开始执行。PE文件的DOS头的第一个域为e_magic,其ASCII字符为"MZ"。PE文件执行到域e_magic时,会将字符〃M〃误认为是指令,因而会执行decebp指令(即0x4D),将通用寄存器ebp减I;会将字符〃Z〃误认为是指令,因而会执行popedx指令(即0x5A),把通用寄存器edx弹出堆栈。如果该PE文件已被病毒感染,那么通常接下来会先恢复之前将字符〃M〃和"Z"误认为是指令所做的操作,然后再跳转到病毒代码处执行,即依次执行pushedx指令(即0x52)、incebp指令(即0x45)、跳转指令和病毒代码。因而如果一个PE文件的入口点是0,那么只需要在该PE文件开头处检查指令序列是否为4D5A5245FF25(FF25为jmp跳转)、4D5A5245E9(E9为jmp跳转)、4D5A5245EB(EB为jmp跳转)、4D5A5245FF15(FF15为call跳转)中的一种即可。如果在该PE文件开头处检查出指令序列是以上四种中的一种,那么说明该PE中文件含有代码,即该PE文件不是资源文件。[0215]本实施例中,通过判断PE文件的入口点是否为O且在头部是否会执行跳转指令,能够更准确地确定出PE文件中是否含有代码。[0216]可选地,参看图23,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述判断单元1,包括:[0217]第七判断子单元alO,用于判断一PE文件是否含有线程局部存储目录;[0218]第二确定子单元all,用于若所述第七判断子单元alO确定所述PE文件不含线程局部存储目录,则确定所述PE文件中不含有代码;或者[0219]第一获取子单元al2,用于若所述第七判断子单元alO确定所述PE文件含有线程局部存储目录,则获取所述PE文件的线程局部存储目录;[0220]第八判断子单元al3,用于判断所述第一获取子单元al2获取的所述线程局部存储目录中是否含有指向线程局部存储回调函数数组的指针;[0221]第三确定子单元al4,用于若所述第八判断子单元al3确定所述线程局部存储目录中不含指向线程局部存储回调函数数组的指针,则确定所述PE文件中不含有代码;或者[0222]第九判断子单元al5,用于若所述第八判断子单元al3确定所述线程局部存储目录中含有指向线程局部存储回调函数数组的指针,则判断所述PE文件的开发环境是否是Delphi;[0223]第四确定子单元al6,用于若所述第九判断子单元al5确定所述PE文件的开发环境是Delphi,则确定所述PE文件中不含有代码。[0224]本实施例中,通过检查PE文件的线程局部存储目录,能够更准确地确定出PE文件中是否含有代码。[0225]可选地,参看图24,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述判断单元1,包括:[0226]第二获取子单元a20,用于获取一PE文件中的节的节名;[0227]第十判断子单元a21,用于通过查询预设的库判断所述PE文件中的节是否均是非代码节;其中,所述预设的库中保存有非代码节的节名;[0228]第五确定子单元a22,用于若所述第十判断子单元a21确定所述PE文件中的节均是非代码节,则确定所述PE文件中不含有代码。[0229]本实施例中,通过查询预设的库,能够较方便地确定出PE文件中的节是否均是非代码节;通过判断PE文件中的节是否均是非代码节,能够更准确地确定出PE文件中是否含有代码。[0230]可选地,参看图25,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述判断单元1,包括:[0231]第三获取子单元a30,用于获取一PE文件中的节的属性;[0232]第十一判断子单元a31,用于判断所述第三获取子单元a30获取的所述PE文件中的节的属性是否为不可执行;[0233]第六确定子单元a32,用于若所述第十一判断子单元a31确定所述PE文件中的节的属性为不可执行,则确定所述PE文件中不含有代码。[0234]本实施例中,通过判断PE文件中的节的属性是否为不可执行,能够更准确地确定出PE文件中是否含有代码。[0235]可选地,参看图26,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述判断单元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的一个基本的程序集,几乎所有的程序都会引用到它。故如果一个PE文件中的.NET程序集只引用了System,dlI,那么可以认为该PE文件未通过自身的.NET程序集能够引用的其它.NET程序集从而使其含有代码。[0243]本实施例中,通过检查PE文件中的.NET程序集是否能够引用其它.NET程序集,能够更准确地确定出PE文件中是否含有代码。[0244]可选地,参看图27,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述判断单元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程序集中定义的类中存在含有方法的类,则检查所述含有方法的类中的方法是否为不含方法体的构造函数;[0251]第十二确定子单元a56,用于若所述第四检查子单元a55确定所述含有方法的类中的方法为不含方法体的构造函数,则确定所述PE文件中不含有代码。[0252]本实施例中,通过检查PE文件中定义的类是否均不含有方法或者PE文件中定义的含有方法的类中的方法是否为不含方法体的构造函数,能够更准确地确定出PE文件中是否含有代码。[0253]可选地,在本发明识别PE文件是否是资源文件的装置的另一实施例中,还包括:[0254]第二检查单元,用于在所述判断单元确定一PE文件中是否含有代码之前,检查所述PE文件的大小、所述PE文件的类型和/或所述PE文件的路径;[0255]其中,所述判断单元,用于若所述第二检查单元确定所述PE文件的大小在预设的文件大小范围内、所述PE文件的类型属于预设的类型集合和/或所述PE文件的路径属于预设的路径集合,则判断所述PE文件中是否含有代码。[0256]本实施例中,通过检查PE文件的大小、类型和路径,并筛选出大小在预设的文件大小范围内、类型属于预设的类型集合和路径属于预设的路径集合的PE文件,能够进一步保证识别PE文件是否是资源文件的准确性。[0257]可选地,参看图28,在本发明识别PE文件是否是资源文件的装置的另一实施例中,所述确定单元3,包括:[0258]第五检查子单元30,用于若所述第一检查单元2确定所述PE文件含有正常的资源信息,则检查所述PE文件中的资源是否绑定了其它PE文件和/或是否捆绑了包;[0259]第十三确定子单元31,用于若所述第五检查子单元30确定所述PE文件中的资源未绑定其它PE文件和/或未捆绑包,则确定所述PE文件是资源文件。[0260]本实施例中,通过检查PE文件中的资源是否绑定了其它PE文件和/或是否捆绑了包,能够更准确地确定出PE文件是否是资源文件。[0261]本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。[0262]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【
技术领域
】的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。【权利要求】1.一种识别PE文件是否是资源文件的方法,其特征在于,包括:判断一PE文件中是否含有代码;若所述PE文件中不含有代码,则检查所述PE文件是否含有正常的资源信息;若所述PE文件含有正常的资源信息,则确定所述PE文件是资源文件。2.根据权利要求1所述的识别PE文件是否是资源文件的方法,其特征在于,所述判断一PE文件中是否含有代码,包括:判断一PE文件是否能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll>mscoree1.dll>mscoreeis.dll和mscorlib.dll夕卜的其它dll文件;和/或判断所述PE文件是否能够通过延迟导入表导入dll文件;和/或判断所述PE文件是否能够通过Manifest文件导入dll文件;和/或判断所述PE文件是否能够通过重定向导入dll文件;和/或判断所述PE文件是否能够通过导出表导出函数;和/或判断所述PE文件的入口点是否为O且在头部是否会执行跳转指令;若确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll>mscoree1.dll>mscoreeis.dll和mscorlib.dll夕卜的其它dll文件;和/或若确定所述PE文件不能够通过延迟导入表导入dll文件;和/或若确定所述PE文件不能够通过Manifest文件导入dll文件;和/或若确定所述PE文件不能够通过重定向导入dll文件;和/或若确定所述PE文件不能够通过导出表导出函数;和/或若确定所述PE文件的入口点为O且在头部不会执行跳转指令,则确定所述PE文件中不含有代码。3.根据权利要求2所述的识别PE文件是否是资源文件的方法,其特征在于,所述判断一PE文件是否能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件,包括:判断一PE文件是否含有导入表;若所述PE文件不含导入表,则确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者若所述PE文件含有导入表,则判断所述PE文件的导入表是否为空表;若所述PE文件的导入表是空表,则确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者若所述PE文件的导入表不是空表,则判断所述PE文件通过导入表导入的dll文件是否为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一个;若所述PE文件通过导入表导入的dll文件为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一个,则确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件。4.根据权利要求2所述的识别PE文件是否是资源文件的方法,其特征在于,所述判断所述PE文件是否能够通过延迟导入表导入dll文件,包括:判断所述PE文件是否含有延迟导入表;若所述PE文件不含延迟导入表,则确定所述PE文件不能够通过延迟导入表导入dll文件;或者若所述PE文件含有延迟导入表,则判断所述PE文件的延迟导入表是否为空表;若所述PE文件的延迟导入表是空表,则确定所述PE文件不能够通过延迟导入表导入dll文件。5.根据权利要求2所述的识别PE文件是否是资源文件的方法,其特征在于,所述判断所述PE文件是否能够通过Manifest文件导入dll文件,包括:判断所述PE文件是否含有Manifest文件;若所述PE文件不含Manifest文件,则确定所述PE文件不能够通过Manifest文件导入dll文件;或者若所述PE文件含有Manifest文件,则判断所述PE文件的Manifest文件中是否含有dll文件的Manifest文件;若所述PE文件的Manifest文件中不含有dll文件的Manifest文件,则确定所述PE文件不能够通过Manifest文件导入dll文件。6.根据权利要求2所述的识别PE文件是否是资源文件的方法,其特征在于,所述判断所述PE文件是否能够通过重定向导入dll文件,包括:判断与所述PE文件相同目录下是否含有后缀名为local”的文件或者文件夹;若与所述PE文件相同目录下不含有后缀名为local”的文件或者文件夹,则确定所述PE文件不能够通过重定向导入dll文件。7.根据权利要求2所述的识别PE文件是否是资源文件的方法,其特征在于,所述判断所述PE文件是否能够通过导出表导出函数,包括:判断所述PE文件是否含有导出表;若所述PE文件不含有导出表,则确定所述PE文件不能够通过导出表导出函数;或者若所述PE文件含有导出表,则判断所述PE文件的导出表是否是空表;若所述PE文件的导出表是空表,则确定所述PE文件不能够通过导出表导出函数。8.根据权利要求2所述的识别PE文件是否是资源文件的方法,其特征在于,所述判断所述PE文件的入口点是否为O且在头部是否会执行跳转指令,包括:获取所述PE文件的入口点;判断所述PE文件的入口点是否为O;若所述PE文件的入口点是0,则检查所述PE文件的第五个字节的指令是否是FF、E9或EB;若所述PE文件的第五个字节的指令不是FF、E9和EB,则确定所述PE文件的入口点为O且在头部不会执行跳转指令;或者若所述PE文件的第五个字节的指令是FF,则检查所述PE文件的第六个字节的指令是否是25或15;若所述PE文件的第六个字节的指令不是25和15,则确定所述PE文件的入口点为O且在头部不会执行跳转指令。9.根据权利要求1所述的识别PE文件是否是资源文件的方法,其特征在于,所述判断一PE文件中是否含有代码,包括:判断一PE文件是否含有线程局部存储目录;若所述PE文件不含线程局部存储目录,则确定所述PE文件中不含有代码;或者若所述PE文件含有线程局部存储目录,则获取所述PE文件的线程局部存储目录;判断所述线程局部存储目录中是否含有指向线程局部存储回调函数数组的指针;若所述线程局部存储目录中不含指向线程局部存储回调函数数组的指针,则确定所述PE文件中不含有代码;或者若所述线程局部存储目录中含有指向线程局部存储回调函数数组的指针,则判断所述PE文件的开发环境是否是Delphi;若所述PE文件的开发环境是Delphi,则确定所述PE文件中不含有代码。10.根据权利要求1所述的识别PE文件中资源文件的方法,其特征在于,所述判断一PE文件中是否含有代码,包括:获取一PE文件中的节的节名;通过查询预设的库判断所述PE文件中的节是否均是非代码节;其中,所述预设的库中保存有非代码节的节名;若所述PE文件中的节均是非代码节,则确定所述PE文件中不含有代码。11.根据权利要求1所述的识别PE文件是否是资源文件的方法,其特征在于,所述判断一PE文件中是否含有代码,包括:获取一PE文件中的节的属性;判断所述PE文件中的节的属性是否为不可执行;若所述PE文件中的节的属性为不可执行,则确定所述PE文件中不含有代码。12.根据权利要求1所述的识别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.根据权利要求1所述的识别PE文件是否是资源文件的方法,其特征在于,所述判断一PE文件中是否含有代码,包括:判断一PE文件中是否含有.NET程序集;若所述PE文件中含有.NET程序集,则检查所述PE文件中的.NET程序集中是否定义了类;若所述.NET程序集中未定义类,则确定所述PE文件中不含有代码;或者若所述.NET程序集中定义了类,则检查所述.NET程序集中定义的类是否均不含有方法;若所述.NET程序集中定义的类均不含有方法,则确定所述PE文件中不含有代码;或者若所述.NET程序集中定义的类中存在含有方法的类,则检查所述含有方法的类中的方法是否为不含方法体的构造函数;若所述含有方法的类中的方法为不含方法体的构造函数,则确定所述PE文件中不含有代码。14.根据权利要求1所述的识别PE文件是否是资源文件的方法,其特征在于,在所述判断一PE文件中是否含有代码之前,还包括:检查所述PE文件的大小、所述PE文件的类型和/或所述PE文件的路径;其中,所述判断一PE文件中是否含有代码,包括:若所述PE文件的大小在预设的文件大小范围内、所述PE文件的类型属于预设的类型集合和/或所述PE文件的路径属于预设的路径集合,则判断所述PE文件中是否含有代码。15.根据权利要求1所述的识别PE文件是否是资源文件的方法,其特征在于,所述若所述PE文件含有正常的资源信息,则确定所述PE文件是资源文件,包括:若所述PE文件含有正常的资源信息,则检查所述PE文件中的资源是否绑定了其它PE文件和/或是否捆绑了包;若所述PE文件中的资源未绑定其它PE文件和/或未捆绑包,则确定所述PE文件是资源文件。16.一种识别PE文件是否是资源文件的装置,其特征在于,包括:判断单元,用于判断一PE文件中是否含有代码;第一检查单元,用于若所述判断单元确定出所述PE文件中不含有代码,则检查所述PE文件是否含有正常的资源信息;确定单元,用于若所述第一检查单元确定所述PE文件含有正常的资源信息,则确定所述PE文件是资源文件。17.根据权利要求16所述的识别PE文件是否是资源文件的装置,其特征在于,所述判断单元,包括:第一判断子单元,用于判断一PE文件是否能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件;和/或第二判断子单元,用于判断所述PE文件是否能够通过延迟导入表导入dll文件;和/或第三判断子单元,用于判断所述PE文件是否能够通过Manifest文件导入dll文件;和/或第四判断子单元,用于判断所述PE文件是否能够通过重定向导入dll文件;和/或第五判断子单元,用于判断所述PE文件是否能够通过导出表导出函数;和/或第六判断子单元,用于判断所述PE文件的入口点是否为O且在头部是否会执行跳转指令;第一确定子单元,用于若所述第一判断子单元确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或若所述第二判断子单元确定所述PE文件不能够通过延迟导入表导入dll文件;和/或若所述第三判断子单元确定所述PE文件不能够通过Manifest文件导入dll文件;和/或若所述第四判断子单元确定所述PE文件不能够通过重定向导入dll文件;和/或若所述第五判断子单元确定所述PE文件不能够通过导出表导出函数;和/或若所述第六判断子单元确定所述PE文件的入口点为O且在头部不会执行跳转指令,则确定所述PE文件中不含有代码。18.根据权利要求17所述的识别PE文件是否是资源文件的装置,其特征在于,所述第一判断子单元,包括:第一判断模块,用于判断一PE文件是否含有导入表;第一确定模块,用于若所述第一判断模块确定所述PE文件不含导入表,则确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者第二判断模块,用于若所述第一判断模块确定所述PE文件含有导入表,则判断所述PE文件的导入表是否为空表;第二确定模块,用于若所述第二判断模块确定所述PE文件的导入表是空表,则确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者第三判断模块,用于若所述第二判断模块确定所述PE文件的导入表不是空表,则判断所述PE文件通过导入表导入的dll文件是否为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一个;第三确定模块,用于若所述第三判断模块确定所述PE文件通过导入表导入的dll文件为mscoree.dll>Microsoft.CSharp.dlI>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll中的至少一个,则确定所述PE文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll>mscorwks.dll、mscoree1.dll、mscoreeis.dll和mscorlib.dll夕卜的其它dll文件。19.根据权利要求17所述的识别PE文件是否是资源文件的装置,其特征在于,所述第二判断子单元,包括:第四判断模块,用于判断所述PE文件是否含有延迟导入表;第四确定模块,用于若所述第四判断模块确定所述PE文件不含延迟导入表,则确定所述PE文件不能够通过延迟导入表导入dll文件;或者第五判断模块,用于若所述第四判断模块确定所述PE文件含有延迟导入表,则判断所述PE文件的延迟导入表是否为空表;第五确定模块,用于若所述第五判断模块确定所述PE文件的延迟导入表是空表,则确定所述PE文件不能够通过延迟导入表导入dll文件。20.根据权利要求17所述的识别PE文件是否是资源文件的装置,其特征在于,所述第三判断子单元,包括:第六判断模块,用于判断所述PE文件是否含有Manifest文件;第六确定模块,用于若所述第六判断模块确定所述PE文件不含Manifest文件,则确定所述PE文件不能够通过Manifest文件导入dll文件;或者第七判断模块,用于若所述第六判断模块确定所述PE文件含有Manifest文件,则判断所述PE文件的Manifest文件中是否含有dll文件的Manifest文件;第七确定模块,用于若所述第七判断模块确定所述PE文件的Manifest文件中不含有dll文件的Manifest文件,则确定所述PE文件不能够通过Manifest文件导入dll文件。21.根据权利要求17所述的识别PE文件是否是资源文件的装置,其特征在于,所述第四判断子单元,包括:第八判断模块,用于判断与所述PE文件相同目录下是否含有后缀名为local”的文件或者文件夹;第八确定模块,用于若所述第八判断模块确定与所述PE文件相同目录下不含有后缀名为local”的文件或者文件夹,则确定所述PE文件不能够通过重定向导入dll文件。22.根据权利要求17所述的识别PE文件是否是资源文件的装置,其特征在于,所述第五判断子单元,包括:第九判断模块,用于判断所述PE文件是否含有导出表;第九确定模块,用于若所述第九判断模块确定所述PE文件不含有导出表,则确定所述PE文件不能够通过导出表导出函数;或者第十判断模块,用于若所述第九判断模块确定所述PE文件含有导出表,则判断所述PE文件的导出表是否是空表;第十确定模块,用于若所述第十判断模块确定所述PE文件的导出表是空表,则确定所述PE文件不能够通过导出表导出函数。23.根据权利要求17所述的识别PE文件是否是资源文件的装置,其特征在于,所述第六判断子单元,包括:入口点获取模块,用于获取所述PE文件的入口点;第十一判断模块,用于判断所述PE文件的入口点是否为O;第一检查模块,用于若所述第十一判断模块确定所述PE文件的入口点是0,则检查所述PE文件的第五个字节的指令是否是FF、E9或EB;第十一确定模块,用于若所述第一检查模块确定所述PE文件的第五个字节的指令不是FF、E9和EB,则确定所述PE文件的入口点为O且在头部不会执行跳转指令;或者第二检查模块,用于若所述第一检查模块确定所述PE文件的第五个字节的指令是FF,则检查所述PE文件的第六个字节的指令是否是25或15;第十二确定模块,用于若所述第二检查模块确定所述PE文件的第六个字节的指令不是25和15,则确定所述PE文件的入口点为O且在头部不会执行跳转指令。24.根据权利要求16所述的识别PE文件是否是资源文件的装置,其特征在于,所述判断单元,包括:第七判断子单元,用于判断一PE文件是否含有线程局部存储目录;第二确定子单元,用于若所述第七判断子单元确定所述PE文件不含线程局部存储目录,则确定所述PE文件中不含有代码;或者第一获取子单元,用于若所述第七判断子单元确定所述PE文件含有线程局部存储目录,则获取所述PE文件的线程局部存储目录;第八判断子单元,用于判断所述第一获取子单元获取的所述线程局部存储目录中是否含有指向线程局部存储回调函数数组的指针;第三确定子单元,用于若所述第八判断子单元确定所述线程局部存储目录中不含指向线程局部存储回调函数数组的指针,则确定所述PE文件中不含有代码;或者第九判断子单元,用于若所述第八判断子单元确定所述线程局部存储目录中含有指向线程局部存储回调函数数组的指针,则判断所述PE文件的开发环境是否是Delphi;第四确定子单元,用于若所述第九判断子单元确定所述PE文件的开发环境是Delphi,则确定所述PE文件中不含有代码。25.根据权利要求16所述的识别PE文件中资源文件的装置,其特征在于,所述判断单元,包括:第二获取子单元,用于获取一PE文件中的节的节名;第十判断子单元,用于通过查询预设的库判断所述PE文件中的节是否均是非代码节;其中,所述预设的库中保存有非代码节的节名;第五确定子单元,用于若所述第十判断子单元确定所述PE文件中的节均是非代码节,则确定所述PE文件中不含有代码。26.根据权利要求16所述的识别PE文件是否是资源文件的装置,其特征在于,所述判断单元,包括:第三获取子单元,用于获取一PE文件中的节的属性;第十一判断子单元,用于判断所述第三获取子单元获取的所述PE文件中的节的属性是否为不可执行;第六确定子单元,用于若所述第十一判断子单元确定所述PE文件中的节的属性为不可执行,则确定所述PE文件中不含有代码。27.根据权利要求16所述的识别PE文件是否是资源文件的装置,其特征在于,所述判断单元,包括:第十二判断子单元,用于判断一PE文件中是否含有.NET程序集;第七确定子单元,用于若所述第十二判断子单元确定所述PE文件中不含有.NET程序集,则确定所述PE文件中不含有代码;或者第一检查子单元,用于若所述第十二判断子单元确定所述PE文件中含有.NET程序集,则检查所述PE文件中的.NET程序集是否能够引用其它.NET程序集;第八确定子单元,用于若所述第一检查子单元确定所述.NET程序集不能够引用其它.NET程序集,则确定所述PE文件中不含有代码;或者第十三判断子单元,用于若所述第一检查子单元确定所述.NET程序集能够引用其它.NET程序集,则判断所述其它.NET程序集是否为System,dll;第九确定子单元,用于若所述第十三判断子单元确定所述其它.NET程序集为System,dll,则确定所述PE文件中不含有代码。28.根据权利要求16所述的识别PE文件是否是资源文件的装置,其特征在于,所述判断单元,包括:第十四判断子单元,用于判断一PE文件中是否含有.NET程序集;第二检查子单元,用于若所述第十四判断子单元确定所述PE文件中含有.NET程序集,则检查所述PE文件中的.NET程序集中是否定义了类;第十确定子单元,用于若所述第二检查子单元确定所述.NET程序集中未定义类,则确定所述PE文件中不含有代码;或者第三检查子单元,用于若所述第二检查子单元确定所述.NET程序集中定义了类,则检查所述.NET程序集中定义的类是否均不含有方法;第十一确定子单元,用于若所述第三检查子单元确定所述.NET程序集中定义的类均不含有方法,则确定所述PE文件中不含有代码;或者第四检查子单元,用于若所述第三检查子单元确定所述.NET程序集中定义的类中存在含有方法的类,则检查所述含有方法的类中的方法是否为不含方法体的构造函数;第十二确定子单元,用于若所述第四检查子单元确定所述含有方法的类中的方法为不含方法体的构造函数,则确定所述PE文件中不含有代码。29.根据权利要求16所述的识别PE文件是否是资源文件的装置,其特征在于,还包括:第二检查单元,用于在所述判断单元确定一PE文件中是否含有代码之前,检查所述PE文件的大小、所述PE文件的类型和/或所述PE文件的路径;其中,所述判断单元,用于若所述第二检查单元确定所述PE文件的大小在预设的文件大小范围内、所述PE文件的类型属于预设的类型集合和/或所述PE文件的路径属于预设的路径集合,则判断所述PE文件中是否含有代码。30.根据权利要求16所述的识别PE文件是否是资源文件的装置,其特征在于,所述确定单元,包括:第五检查子单元,用于若所述第一检查单元确定所述PE文件含有正常的资源信息,则检查所述PE文件中的资源是否绑定了其它PE文件和/或是否捆绑了包;第十三确定子单元,用于若所述第五检查子单元确定所述PE文件中的资源未绑定其它PE文件和/或未捆绑包,则确定所述PE文件是资源文件。【文档编号】G06F21/56GK104298919SQ201410522867【公开日】2015年1月21日申请日期:2014年9月30日优先权日:2014年9月30日【发明者】周杨,刘桂峰,姚辉申请人:珠海市君天电子科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1