首页> 中国专利> 一种识别PE文件是否是资源文件的方法及装置

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

摘要

本发明实施例公开一种识别PE文件是否是资源文件的方法及装置,涉及计算机安全技术领域,能够提高系统中资源文件的识别成功率。所述识别PE文件是否是资源文件的方法,包括:判断一PE文件中是否含有代码;若PE文件中不含有代码,则检查PE文件是否含有正常的资源信息;若PE文件含有正常的资源信息,则确定PE文件是资源文件。所述识别PE文件是否是资源文件的装置,包括:判断单元,用于判断一PE文件中是否含有代码;第一检查单元,用于若PE文件中不含有代码,则检查PE文件是否含有正常的资源信息;确定单元,用于若PE文件含有正常的资源信息,则确定PE文件是资源文件。本发明适用于需要识别出系统中资源文件的场合。

著录项

  • 公开/公告号CN104298919A

    专利类型发明专利

  • 公开/公告日2015-01-21

    原文格式PDF

  • 申请/专利权人 珠海市君天电子科技有限公司;

    申请/专利号CN201410522867.3

  • 发明设计人 周杨;刘桂峰;姚辉;

    申请日2014-09-30

  • 分类号G06F21/56(20130101);

  • 代理机构11237 北京市广友专利事务所有限责任公司;

  • 代理人祁献民

  • 地址 519070 广东省珠海市唐家湾镇港湾大道科技一路10号主楼六层601F

  • 入库时间 2023-12-17 04:10:37

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-02-01

    专利权的转移 IPC(主分类):G06F21/56 登记生效日:20190111 变更前: 变更后: 申请日:20140930

    专利申请权、专利权的转移

  • 2017-04-26

    授权

    授权

  • 2015-02-18

    实质审查的生效 IPC(主分类):G06F21/56 申请日:20140930

    实质审查的生效

  • 2015-01-21

    公开

    公开

说明书

技术领域

本发明涉及计算机安全技术领域,尤其涉及一种识别PE文件是否是资源文 件的方法及装置。

背景技术

PE文件被称为可移植的执行体,其英文全称是Portable Execute。常见的 EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的 程序文件。

资源文件是一种仅含资源数据,不含代码的PE文件,占系统中全部PE文 件的90%以上。在实际的应用中经常需要从系统中的所有PE文件中识别出资源 文件,比如,安全软件常常需要监控和扫描系统中的所有PE文件并判定其是否 含有恶意代码,而通常的做法是先识别出系统中全部PE文件中的资源文件,然 后筛选出系统中全部PE文件中的非资源文件,最后再判定系统中全部PE文件 中的非资源文件是否含有恶意代码。

而现有技术判断PE文件是资源文件只需要PE文件满足不含导入表和导出 表,且入口点是0即可,因而会漏掉很多资源文件(比如,含有空导入表和空 导出表,且入口点是0、执行时不会跳转到恶意代码的PE文件),且存在潜在 的安全风险(比如,不含导入表和导出表,且入口点是0、执行时会跳转到恶意 代码的PE文件会被识别为资源文件),即现有识别资源文件的成功率较低。

发明内容

有鉴于此,本发明实施例提供一种识别PE文件是否是资源文件的方法及装 置,能够提高系统中资源文件的识别成功率。

为达到上述目的,本发明的实施例采用如下技术方案:

一方面,本发明实施例提供一种识别PE文件是否是资源文件的方法,包括:

判断一PE文件中是否含有代码;

若所述PE文件中不含有代码,则检查所述PE文件是否含有正常的资源信 息;

若所述PE文件含有正常的资源信息,则确定所述PE文件是资源文件。

本发明实施例提供的识别PE文件是否是资源文件的方法,通过判断PE文 件中是否含有代码,并在PE文件中不含有代码时,检查PE文件是否含有正常 的资源信息,在PE文件含有正常的资源信息时,确定PE文件是资源文件;因 而能够提高系统中资源文件的识别成功率。

另一方面,本发明实施例提供一种识别PE文件是否是资源文件的装置,包 括:

判断单元,用于判断一PE文件中是否含有代码;

第一检查单元,用于若所述判断单元确定出所述PE文件中不含有代码,则 检查所述PE文件是否含有正常的资源信息;

确定单元,用于若所述第一检查单元确定所述PE文件含有正常的资源信息, 则确定所述PE文件是资源文件。

本发明实施例提供的识别PE文件是否是资源文件的装置,通过判断PE文 件中是否含有代码,并在PE文件中不含有代码时,检查PE文件是否含有正常 的资源信息,在PE文件含有正常的资源信息时,确定PE文件是资源文件;因 而能够提高系统中资源文件的识别成功率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述 中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付 出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本发明识别PE文件是否是资源文件的方法一实施例的流程示意图;

图2为图1中S1一实施例的流程示意图;

图3为图2中S10一实施例的流程示意图;

图4为图2中S11一实施例的流程示意图;

图5为图2中S12一实施例的流程示意图;

图6为图2中S13一实施例的流程示意图;

图7为图2中S14一实施例的流程示意图;

图8为图2中S15一实施例的流程示意图;

图9为图1中S1另一实施例的流程示意图;

图10为图1中S1又一实施例的流程示意图;

图11为图1中S1又一实施例的流程示意图;

图12为图1中S1又一实施例的流程示意图;

图13为图1中S1又一实施例的流程示意图;

图14为图1中S3一实施例的流程示意图;

图15为本发明识别PE文件是否是资源文件的装置一实施例的方 意图;

图16为图15中判断单元一实施例的方框结构示意图;

图17为图16中第一判断子单元一实施例的方框结构示意图;

图18为图16中第二判断子单元一实施例的方框结构示意图;

图19为图16中第三判断子单元一实施例的方框结构示意图;

图20为图16中第四判断子单元一实施例的方框结构示意图;

图21为图16中第五判断子单元一实施例的方框结构示意图;

图22为图16中第六判断子单元一实施例的方框结构示意图;

图23为图15中判断单元另一实施例的方框结构示意图;

图24为图15中判断单元又一实施例的方框结构示意图;

图25为图15中判断单元又一实施例的方框结构示意图;

图26为图15中判断单元又一实施例的方框结构示意图;

图27为图15中判断单元又一实施例的方框结构示意图;

图28为图15中确定单元一实施例的方框结构示意图。

具体实施方式

下面结合附图对本发明实施例一种识别PE文件是否是资源文件的方法及装 置进行详细描述。

应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实 施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前 提下所获得的所有其它实施例,都属于本发明保护的范围。

参看图1,本发明的实施例提供一种识别PE文件是否是资源文件的方法, 包括:

S1、判断一PE文件中是否含有代码;

S2、若所述PE文件中不含有代码,则检查所述PE文件是否含有正常的资 源信息;

S3、若所述PE文件含有正常的资源信息,则确定所述PE文件是资源文件。

本发明实施例提供的识别PE文件是否是资源文件的方法,通过判断PE文 件中是否含有代码,并在PE文件中不含有代码时,检查PE文件是否含有正常 的资源信息,在PE文件含有正常的资源信息时,确定PE文件是资源文件;因 而能够提高系统中资源文件的识别成功率。

可选地,参看图2,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断一PE文件中是否含有代码(S1),包括:

S10、判断一PE文件是否能够通过导入表导入除mscoree.dll、 Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、mscoreeis.dll和 mscorlib.dll外的其它dll文件;和/或

S11、判断所述PE文件是否能够通过延迟导入表导入dll文件;和/或

S12、判断所述PE文件是否能够通过Manifest文件导入dll文件;和/或

S13、判断所述PE文件是否能够通过重定向导入dll文件;和/或

S14、判断所述PE文件是否能够通过导出表导出函数;和/或

S15、判断所述PE文件的入口点是否为0且在头部是否会执行跳转指令;

S16、若确定所述PE文件不能够通过导入表导入除mscoree.dll、 Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、mscoreeis.dll和 mscorlib.dll外的其它dll文件;和/或

若确定所述PE文件不能够通过延迟导入表导入dll文件;和/或

若确定所述PE文件不能够通过Manifest文件导入dll文件;和/或

若确定所述PE文件不能够通过重定向导入dll文件;和/或

若确定所述PE文件不能够通过导出表导出函数;和/或

若确定所述PE文件的入口点为0且在头部不会执行跳转指令,则确定所述 PE文件中不含有代码。

因为PE文件能够通过导入表、延迟导入表、Manifest文件和重定向导入 dll文件从而使其含有代码,所以判断一个PE文件是否能够通过导入dll文件 使其含有代码需要从导入表、延迟导入表、Manifest文件和重定向这四个方面 进行判断。导入表是一个IMAGE_IMPORT_DESCRIPTOR数据结构的数组,每一个 IMAGE_IMPORT_DESCRIPTOR结构表明一个dll的信息。本实施例中,若PE文件 的导入表不是空表,那么对于PE文件的导入表的每一个 IMAGE_IMPORT_DESCRIPTOR结构,需要获取该IMAGE_IMPORT_DESCRIPTOR结构的 成员Name的值(成员Name的值指向一个导入dll文件的文件名),并根据该成 员Name的值找到该成员Name的值所指向的导入dll文件的文件名。根据PE文 件的导入表所找到的导入dll文件的文件名即为PE文件能够通过导入表导入的 dll文件的文件名。因为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、 mscoreei.dll、mscoreeis.dll和mscorlib.dllL只有.NET Framework本身才 会使用,其他人无法使用其功能,故若一个PE文件能够通过导入表导入的dll 文件为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、 mscoreeis.dll和mscorlib.dll中的至少一个,则认为该PE文件未通过导入表 导入dll文件使其含有代码。

本实施例中,通过判断PE文件是否能够通过导入表导入除mscoree.dll、 Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、mscoreeis.dll和 mscorlib.dll外的其它dll文件、所述PE文件是否能够通过延迟导入表导入 dll文件、所述PE文件是否能够通过Manifest文件导入dll文件、所述PE文 件是否能够通过重定向导入dll文件、所述PE文件是否能够通过导出表导出函 数和/或所述PE文件的入口点是否为0且在头部是否会执行跳转指令,能够较 准确地确定出所述PE文件中是否含有代码。

可选地,参看图3,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断一PE文件是否能够通过导入表导入除mscoree.dll、 Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、mscoreeis.dll和 mscorlib.dll外的其它dll文件(S10),包括:

S100、判断一PE文件是否含有导入表;

S101、若所述PE文件不含导入表,则确定所述PE文件不能够通过导入表 导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、 mscoreeis.dll和mscorlib.dll外的其它dll文件;或者

S102、若所述PE文件含有导入表,则判断所述PE文件的导入表是否为空 表;

S103、若所述PE文件的导入表是空表,则确定所述PE文件不能够通过导 入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、 mscoreei.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;或者

S104、若所述PE文件的导入表不是空表,则判断所述PE文件通过导入表 导入的dll文件是否为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、 mscoreei.dll、mscoreeis.dll和mscorlib.dll中的至少一个;

S105、若所述PE文件通过导入表导入的dll文件为mscoree.dll、 Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、mscoreeis.dll和 mscorlib.dll中的至少一个,则确定所述PE文件不能够通过导入表导入除 mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、 mscoreeis.dll和mscorlib.dll外的其它dll文件。

本实施例中,通过判断PE文件是否能够通过导入表导入除mscoree.dll、 Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、mscoreeis.dll和 mscorlib.dll外的其它dll文件,能够较准确地确定出所述PE文件是否能够通 过导入表导入dll文件从而使其含有代码。

可选地,参看图4,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断所述PE文件是否能够通过延迟导入表导入dll文件(S11), 包括:

S110、判断所述PE文件是否含有延迟导入表;

S111、若所述PE文件不含延迟导入表,则确定所述PE文件不能够通过延 迟导入表导入dll文件;或者

S112、若所述PE文件含有延迟导入表,则判断所述PE文件的延迟导入表 是否为空表;

S113、若所述PE文件的延迟导入表是空表,则确定所述PE文件不能够通 过延迟导入表导入dll文件。

PE文件的延迟导入表是一个数组,每一项都是一个ImgDelayDescr结构体, 每一项都代表一个导入的dll。PE文件不含延迟导入表或者延迟导入表是空表, 均可以说明PE文件不能够通过延迟导入表导入dll文件。

本实施例中,通过判断PE文件是否能够通过延迟导入表导入dll文件,能 够准确地确定出所述PE文件是否能够通过延迟导入表导入dll文件从而使其含 有代码。

可选地,参看图5,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断所述PE文件是否能够通过Manifest文件导入dll文件(S12), 包括:

S120、判断所述PE文件是否含有Manifest文件;

S121、若所述PE文件不含Manifest文件,则确定所述PE文件不能够通过 Manifest文件导入dll文件;或者

S122、若所述PE文件含有Manifest文件,则判断所述PE文件的Manifest 文件中是否含有dll文件的Manifest文件;

S123、若所述PE文件的Manifest文件中不含有dll文件的Manifest文件, 则确定所述PE文件不能够通过Manifest文件导入dll文件。

Manifest文件是个XML格式的描述文件,每个dll文件都有自己的Manifest 文件,通过dll文件的Manifest文件能够找到其所对应的dll文件。

本实施例中,通过判断PE文件是否能够通过Manifest文件导入dll文件, 能够准确地确定出所述PE文件是否能够通过Manifest文件导入dll文件从而 使其含有代码。

可选地,参看图6,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断所述PE文件是否能够通过重定向导入dll文件(S13),包括:

S130、判断与所述PE文件相同目录下是否含有后缀名为“.local”的文件 或者文件夹;

S131、若与所述PE文件相同目录下不含有后缀名为“.local”的文件或者 文件夹,则确定所述PE文件不能够通过重定向导入dll文件。

本实施例中,通过判断PE文件是否能够通过重定向导入dll文件,能够准 确地确定出所述PE文件是否能够通过重定向导入dll文件从而使其含有代码。

可选地,参看图7,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断所述PE文件是否能够通过导出表导出函数(S14),包括:

S140、判断所述PE文件是否含有导出表;

S141、若所述PE文件不含有导出表,则确定所述PE文件不能够通过导出 表导出函数;或者

S142、若所述PE文件含有导出表,则判断所述PE文件的导出表是否是空 表;

S143、若所述PE文件的导出表是空表,则确定所述PE文件不能够通过导 出表导出函数。

本实施例中,通过判断PE文件是否能够通过导出表导出函数,能够更准确 地确定出PE文件中是否含有代码。

可选地,参看图8,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断所述PE文件的入口点是否为0且在头部是否会执行跳转指令 (S15),包括:

S150、获取所述PE文件的入口点;

S151、判断所述PE文件的入口点是否为0;

S152、若所述PE文件的入口点是0,则检查所述PE文件的第五个字节的指 令是否是FF、E9或EB;

S153、若所述PE文件的第五个字节的指令不是FF、E9和EB,则确定所述 PE文件的入口点为0且在头部不会执行跳转指令;或者

S154、若所述PE文件的第五个字节的指令是FF,则检查所述PE文件的第 六个字节的指令是否是25或15;

S155、若所述PE文件的第六个字节的指令不是25和15,则确定所述PE文 件的入口点为0且在头部不会执行跳转指令。

如果PE文件的入口点是0,那么在执行PE文件的时候就会从PE文件的DOS 头开始执行。PE文件的DOS头的第一个域为e_magic,其ASCII字符为"MZ"。 PE文件执行到域e_magic时,会将字符"M"误认为是指令,因而会执行dec ebp 指令(即0x4D),将通用寄存器ebp减1;会将字符"Z"误认为是指令,因而会 执行pop edx指令(即0x5A),把通用寄存器edx弹出堆栈。如果该PE文件已 被病毒感染,那么通常接下来会先恢复之前将字符"M"和"Z"误认为是指令所做 的操作,然后再跳转到病毒代码处执行,即依次执行push edx指令(即0x52)、 inc ebp指令(即0x45)、跳转指令和病毒代码。因而如果一个PE文件的入口点 是0,那么只需要在该PE文件开头处检查指令序列是否为4D 5A 52 45 FF 25 (FF 25为jmp跳转)、4D 5A 52 45 E9(E9为jmp跳转)、4D 5A 52 45 EB(EB 为jmp跳转)、4D 5A 52 45 FF 15(FF 15为call跳转)中的一种即可。如果 在该PE文件开头处检查出指令序列是以上四种中的一种,那么说明该PE中文 件含有代码,即该PE文件不是资源文件。

本实施例中,通过判断PE文件的入口点是否为0且在头部是否会执行跳转 指令,能够更准确地确定出PE文件中是否含有代码。

可选地,参看图9,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断一PE文件中是否含有代码(S1),包括:

Sa10、判断一PE文件是否含有线程局部存储目录;

Sa11、若所述PE文件不含线程局部存储目录,则确定所述PE文件中不含 有代码;或者

Sa12、若所述PE文件含有线程局部存储目录,则获取所述PE文件的线程 局部存储目录;

Sa13、判断所述线程局部存储目录中是否含有指向线程局部存储回调函数 数组的指针;

Sa14、若所述线程局部存储目录中不含指向线程局部存储回调函数数组的 指针,则确定所述PE文件中不含有代码;或者

Sa15、若所述线程局部存储目录中含有指向线程局部存储回调函数数组的 指针,则判断所述PE文件的开发环境是否是Delphi;

Sa16、若所述PE文件的开发环境是Delphi,则确定所述PE文件中不含有 代码。

本实施例中,通过检查PE文件的线程局部存储目录,能够更准确地确定出 PE文件中是否含有代码。

可选地,参看图10,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断一PE文件中是否含有代码(S1),包括:

Sa20、获取一PE文件中的节的节名;

Sa21、通过查询预设的库判断所述PE文件中的节是否均是非代码节;其中, 所述预设的库中保存有非代码节的节名;

Sa22、若所述PE文件中的节均是非代码节,则确定所述PE文件中不含有 代码。

本实施例中,通过查询预设的库,能够较方便地确定出PE文件中的节是否 均是非代码节;通过判断PE文件中的节是否均是非代码节,能够更准确地确定 出PE文件中是否含有代码。

可选地,参看图11,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断一PE文件中是否含有代码(S1),包括:

Sa30、获取一PE文件中的节的属性;

Sa31、判断所述PE文件中的节的属性是否为不可执行;

Sa32、若所述PE文件中的节的属性为不可执行,则确定所述PE文件中不 含有代码。

本实施例中,通过判断PE文件中的节的属性是否为不可执行,能够更准确 地确定出PE文件中是否含有代码。

可选地,参看图12,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断一PE文件中是否含有代码(S1),包括:

Sa40、判断一PE文件中是否含有.NET程序集;

Sa41、若所述PE文件中不含有.NET程序集,则确定所述PE文件中不含有 代码;或者

Sa42、若所述PE文件中含有.NET程序集,则检查所述PE文件中的.NET程 序集是否能够引用其它.NET程序集;

Sa43、若所述.NET程序集不能够引用其它.NET程序集,则确定所述PE文 件中不含有代码;或者

Sa44、若所述.NET程序集能够引用其它.NET程序集,则判断所述其它.NET 程序集是否为System.dll;

Sa45、若所述其它.NET程序集为System.dll,则确定所述PE文件中不含 有代码。

在.NET程序编写中,常常需要引用到其他的一些程序集,System.dll就 是.NET Framework的一个基本的程序集,几乎所有的程序都会引用到它。故如 果一个PE文件中的.NET程序集只引用了System.dll,那么可以认为该PE文件 未通过自身的.NET程序集能够引用的其它.NET程序集从而使其含有代码。

本实施例中,通过检查PE文件中的.NET程序集是否能够引用其它.NET程 序集,能够更准确地确定出PE文件中是否含有代码。

可选地,参看图13,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述判断一PE文件中是否含有代码(S1),包括:

Sa50、判断一PE文件中是否含有.NET程序集;

Sa51、若所述PE文件中含有.NET程序集,则检查所述PE文件中的.NET程 序集中是否定义了类;

Sa52、若所述.NET程序集中未定义类,则确定所述PE文件中不含有代码; 或者

Sa53、若所述.NET程序集中定义了类,则检查所述.NET程序集中定义的类 是否均不含有方法;

Sa54、若所述.NET程序集中定义的类均不含有方法,则确定所述PE文件中 不含有代码;或者

Sa55、若所述.NET程序集中定义的类中存在含有方法的类,则检查所述含 有方法的类中的方法是否为不含方法体的构造函数;

Sa56、若所述含有方法的类中的方法为不含方法体的构造函数,则确定所 述PE文件中不含有代码。

本实施例中,通过检查PE文件中定义的类是否均不含有方法或者PE文 件中定义的含有方法的类中的方法是否为不含方法体的构造函数,能够更准确 地确定出PE文件中是否含有代码。

可选地,在本发明识别PE文件是否是资源文件的方法的另一实施例中,在 所述判断一PE文件中是否含有代码之前,还包括:

检查所述PE文件的大小、所述PE文件的类型和/或所述PE文件的路径;

其中,所述判断一PE文件中是否含有代码,包括:

若所述PE文件的大小在预设的文件大小范围内、所述PE文件的类型属于 预设的类型集合和/或所述PE文件的路径属于预设的路径集合,则判断所述PE 文件中是否含有代码。

本实施例中,通过检查PE文件的大小、类型和路径,并筛选出大小在预设 的文件大小范围内、类型属于预设的类型集合和路径属于预设的路径集合的P E文件,能够进一步保证识别PE文件是否是资源文件的准确性。

可选地,参看图14,在本发明识别PE文件是否是资源文件的方法的另一实 施例中,所述若所述PE文件含有正常的资源信息,则确定所述PE文件是资源 文件(S3),包括:

S30、若所述PE文件含有正常的资源信息,则检查所述PE文件中的资源是 否绑定了其它PE文件和/或是否捆绑了包;

S31、若所述PE文件中的资源未绑定其它PE文件和/或未捆绑包,则确定 所述PE文件是资源文件。

本实施例中,通过检查PE文件中的资源是否绑定了其它PE文件和/或是否 捆绑了包,能够更准确地确定出PE文件是否是资源文件。

参看图15,本发明的实施例提供一种识别PE文件是否是资源文件的装置, 包括:

判断单元1,用于判断一PE文件中是否含有代码;

第一检查单元2,用于若所述判断单元1确定出所述PE文件中不含有代码, 则检查所述PE文件是否含有正常的资源信息;

确定单元3,用于若所述第一检查单元2确定所述PE文件含有正常的资源 信息,则确定所述PE文件是资源文件。

本发明实施例提供的识别PE文件是否是资源文件的装置,通过判断PE文 件中是否含有代码,并在PE文件中不含有代码时,检查PE文件是否含有正常 的资源信息,在PE文件含有正常的资源信息时,确定PE文件是资源文件;因 而能够提高系统中资源文件的识别成功率。

可选地,参看图16,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述判断单元1,包括:

第一判断子单元10,用于判断一PE文件是否能够通过导入表导入除 mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、 mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或

第二判断子单元11,用于判断所述PE文件是否能够通过延迟导入表导入 dll文件;和/或

第三判断子单元12,用于判断所述PE文件是否能够通过Manifest文件导 入dll文件;和/或

第四判断子单元13,用于判断所述PE文件是否能够通过重定向导入dll文 件;和/或

第五判断子单元14,用于判断所述PE文件是否能够通过导出表导出函数; 和/或

第六判断子单元15,用于判断所述PE文件的入口点是否为0且在头部是否 会执行跳转指令;

第一确定子单元16,用于若所述第一判断子单元10确定所述PE文件不能 够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、 mscoreei.dll、mscoreeis.dll和mscorlib.dll外的其它dll文件;和/或

若所述第二判断子单元11确定所述PE文件不能够通过延迟导入表导入dll 文件;和/或

若所述第三判断子单元12确定所述PE文件不能够通过Manifest文件导入 dll文件;和/或

若所述第四判断子单元13确定所述PE文件不能够通过重定向导入dll文 件;和/或

若所述第五判断子单元14确定所述PE文件不能够通过导出表导出函数; 和/或

若所述第六判断子单元15确定所述PE文件的入口点为0且在头部不会执 行跳转指令,则确定所述PE文件中不含有代码。

因为PE文件能够通过导入表、延迟导入表、Manifest文件和重定向导入 dll文件从而使其含有代码,所以判断一个PE文件是否能够通过导入dll文件 使其含有代码需要从导入表、延迟导入表、Manifest文件和重定向这四个方面 进行判断。导入表是一个IMAGE_IMPORT_DESCRIPTOR数据结构的数组,每一个 IMAGE_IMPORT_DESCRIPTOR结构表明一个dll的信息。本实施例中,若PE文件 的导入表不是空表,那么对于PE文件的导入表的每一个 IMAGE_IMPORT_DESCRIPTOR结构,需要获取该IMAGE_IMPORT_DESCRIPTOR结构的 成员Name的值(成员Name的值指向一个导入dll文件的文件名),并根据该成 员Name的值找到该成员Name的值所指向的导入dll文件的文件名。根据PE文 件的导入表所找到的导入dll文件的文件名即为PE文件能够通过导入表导入的 dll文件的文件名。因为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、 mscoreei.dll、mscoreeis.dll和mscorlib.dllL只有.NET Framework本身才 会使用,其他人无法使用其功能,故若一个PE文件能够通过导入表导入的dll 文件为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、 mscoreeis.dll和mscorlib.dll中的至少一个,则认为该PE文件未通过导入表 导入dll文件使其含有代码。

本实施例中,通过判断PE文件是否能够通过导入表导入除mscoree.dll、 Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、mscoreeis.dll和 mscorlib.dll外的其它dll文件、所述PE文件是否能够通过延迟导入表导入 dll文件、所述PE文件是否能够通过Manifest文件导入dll文件、所述PE文 件是否能够通过重定向导入dll文件、所述PE文件是否能够通过导出表导出函 数和/或所述PE文件的入口点是否为0且在头部是否会执行跳转指令,能够较 准确地确定出所述PE文件中是否含有代码。

可选地,参看图17,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述第一判断子单元10,包括:

第一判断模块100,用于判断一PE文件是否含有导入表;

第一确定模块101,用于若所述第一判断模块100确定所述PE文件不含导 入表,则确定所述PE文件不能够通过导入表导入除mscoree.dll、 Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、mscoreeis.dll和 mscorlib.dll外的其它dll文件;或者

第二判断模块102,用于若所述第一判断模块100确定所述PE文件含有导 入表,则判断所述PE文件的导入表是否为空表;

第二确定模块103,用于若所述第二判断模块102确定所述PE文件的导入 表是空表,则确定所述PE文件不能够通过导入表导入除mscoree.dll、 Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、mscoreeis.dll和 mscorlib.dll外的其它dll文件;或者

第三判断模块104,用于若所述第二判断模块102确定所述PE文件的导入 表不是空表,则判断所述PE文件通过导入表导入的dll文件是否为 mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、 mscoreeis.dll和mscorlib.dll中的至少一个;

第三确定模块105,用于若所述第三判断模块104确定所述PE文件通过导 入表导入的dll文件为mscoree.dll、Microsoft.CSharp.dll、mscorwks.dll、 mscoreei.dll、mscoreeis.dll和mscorlib.dll中的至少一个,则确定所述PE 文件不能够通过导入表导入除mscoree.dll、Microsoft.CSharp.dll、 mscorwks.dll、mscoreei.dll、mscoreeis.dll和mscorlib.dll外的其它dll 文件。

本实施例中,通过判断PE文件是否能够通过导入表导入除mscoree.dll、 Microsoft.CSharp.dll、mscorwks.dll、mscoreei.dll、mscoreeis.dll和 mscorlib.dll外的其它dll文件,能够较准确地确定出所述PE文件是否能够通 过导入表导入dll文件从而使其含有代码。

可选地,参看图18,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述第二判断子单元11,包括:

第四判断模块110,用于判断所述PE文件是否含有延迟导入表;

第四确定模块111,用于若所述第四判断模块110确定所述PE文件不含延 迟导入表,则确定所述PE文件不能够通过延迟导入表导入dll文件;或者

第五判断模块112,用于若所述第四判断模块110确定所述PE文件含有延 迟导入表,则判断所述PE文件的延迟导入表是否为空表;

第五确定模块113,用于若所述第五判断模块112确定所述PE文件的延迟 导入表是空表,则确定所述PE文件不能够通过延迟导入表导入dll文件。

PE文件的延迟导入表是一个数组,每一项都是一个ImgDelayDescr结构体, 每一项都代表一个导入的dll。PE文件不含延迟导入表或者延迟导入表是空表, 均可以说明PE文件不能够通过延迟导入表导入dll文件。

本实施例中,通过判断PE文件是否能够通过延迟导入表导入dll文件,能 够准确地确定出所述PE文件是否能够通过延迟导入表导入dll文件从而使其含 有代码。

可选地,参看图19,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述第三判断子单元12,包括:

第六判断模块120,用于判断所述PE文件是否含有Manifest文件;

第六确定模块121,用于若所述第六判断模块120确定所述PE文件不含 Manifest文件,则确定所述PE文件不能够通过Manifest文件导入dll文件; 或者

第七判断模块122,用于若所述第六判断模块120确定所述PE文件含有 Manifest文件,则判断所述PE文件的Manifest文件中是否含有dll文件的 Manifest文件;

第七确定模块123,用于若所述第七判断模块122确定所述PE文件的 Manifest文件中不含有dll文件的Manifest文件,则确定所述PE文件不能够 通过Manifest文件导入dll文件。

Manifest文件是个XML格式的描述文件,每个dll文件都有自己的Manifest 文件,通过dll文件的Manifest文件能够找到其所对应的dll文件。

本实施例中,通过判断PE文件是否能够通过Manifest文件导入dll文件, 能够准确地确定出所述PE文件是否能够通过Manifest文件导入dll文件从而 使其含有代码。

可选地,参看图20,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述第四判断子单元13,包括:

第八判断模块130,用于判断与所述PE文件相同目录下是否含有后缀名为 “.local”的文件或者文件夹;

第八确定模块131,用于若所述第八判断模块130确定与所述PE文件相同 目录下不含有后缀名为“.local”的文件或者文件夹,则确定所述PE文件不能 够通过重定向导入dll文件。

本实施例中,通过判断PE文件是否能够通过重定向导入dll文件,能够准 确地确定出所述PE文件是否能够通过重定向导入dll文件从而使其含有代码。

可选地,参看图21,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述第五判断子单元14,包括:

第九判断模块140,用于判断所述PE文件是否含有导出表;

第九确定模块141,用于若所述第九判断模块140确定所述PE文件不含有 导出表,则确定所述PE文件不能够通过导出表导出函数;或者

第十判断模块142,用于若所述第九判断模块140确定所述PE文件含有导 出表,则判断所述PE文件的导出表是否是空表;

第十确定模块143,用于若所述第十判断模块142确定所述PE文件的导出 表是空表,则确定所述PE文件不能够通过导出表导出函数。

本实施例中,通过判断PE文件是否能够通过导出表导出函数,能够更准确 地确定出PE文件中是否含有代码。

可选地,参看图22,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述第六判断子单元15,包括:

入口点获取模块150,用于获取所述PE文件的入口点;

第十一判断模块151,用于判断所述PE文件的入口点是否为0;

第一检查模块152,用于若所述第十一判断模块151确定所述PE文件的入 口点是0,则检查所述PE文件的第五个字节的指令是否是FF、E9或EB;

第十一确定模块153,用于若所述第一检查模块152确定所述PE文件的第 五个字节的指令不是FF、E9和EB,则确定所述PE文件的入口点为0且在头部 不会执行跳转指令;或者

第二检查模块154,用于若所述第一检查模块152确定所述PE文件的第五 个字节的指令是FF,则检查所述PE文件的第六个字节的指令是否是25或15;

第十二确定模块155,用于若所述第二检查模块154确定所述PE文件的第 六个字节的指令不是25和15,则确定所述PE文件的入口点为0且在头部不会 执行跳转指令。

如果PE文件的入口点是0,那么在执行PE文件的时候就会从PE文件的DOS 头开始执行。PE文件的DOS头的第一个域为e_magic,其ASCII字符为"MZ"。 PE文件执行到域e_magic时,会将字符"M"误认为是指令,因而会执行dec ebp 指令(即0x4D),将通用寄存器ebp减1;会将字符"Z"误认为是指令,因而会 执行pop edx指令(即0x5A),把通用寄存器edx弹出堆栈。如果该PE文件已 被病毒感染,那么通常接下来会先恢复之前将字符"M"和"Z"误认为是指令所做 的操作,然后再跳转到病毒代码处执行,即依次执行push edx指令(即0x52)、 inc ebp指令(即0x45)、跳转指令和病毒代码。因而如果一个PE文件的入口点 是0,那么只需要在该PE文件开头处检查指令序列是否为4D 5A 52 45 FF 25 (FF 25为jmp跳转)、4D 5A 52 45 E9(E9为jmp跳转)、4D 5A 52 45 EB(EB 为jmp跳转)、4D 5A 52 45 FF 15(FF 15为call跳转)中的一种即可。如果 在该PE文件开头处检查出指令序列是以上四种中的一种,那么说明该PE中文 件含有代码,即该PE文件不是资源文件。

本实施例中,通过判断PE文件的入口点是否为0且在头部是否会执行跳转 指令,能够更准确地确定出PE文件中是否含有代码。

可选地,参看图23,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述判断单元1,包括:

第七判断子单元a10,用于判断一PE文件是否含有线程局部存储目录;

第二确定子单元a11,用于若所述第七判断子单元a10确定所述PE文件不 含线程局部存储目录,则确定所述PE文件中不含有代码;或者

第一获取子单元a12,用于若所述第七判断子单元a10确定所述PE文件含 有线程局部存储目录,则获取所述PE文件的线程局部存储目录;

第八判断子单元a13,用于判断所述第一获取子单元a12获取的所述线程局 部存储目录中是否含有指向线程局部存储回调函数数组的指针;

第三确定子单元a14,用于若所述第八判断子单元a13确定所述线程局部存 储目录中不含指向线程局部存储回调函数数组的指针,则确定所述PE文件中不 含有代码;或者

第九判断子单元a15,用于若所述第八判断子单元a13确定所述线程局部存 储目录中含有指向线程局部存储回调函数数组的指针,则判断所述PE文件的开 发环境是否是Delphi;

第四确定子单元a16,用于若所述第九判断子单元a15确定所述PE文件的 开发环境是Delphi,则确定所述PE文件中不含有代码。

本实施例中,通过检查PE文件的线程局部存储目录,能够更准确地确定出 PE文件中是否含有代码。

可选地,参看图24,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述判断单元1,包括:

第二获取子单元a20,用于获取一PE文件中的节的节名;

第十判断子单元a21,用于通过查询预设的库判断所述PE文件中的节是否 均是非代码节;其中,所述预设的库中保存有非代码节的节名;

第五确定子单元a22,用于若所述第十判断子单元a21确定所述PE文件中 的节均是非代码节,则确定所述PE文件中不含有代码。

本实施例中,通过查询预设的库,能够较方便地确定出PE文件中的节是否 均是非代码节;通过判断PE文件中的节是否均是非代码节,能够更准确地确定 出PE文件中是否含有代码。

可选地,参看图25,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述判断单元1,包括:

第三获取子单元a30,用于获取一PE文件中的节的属性;

第十一判断子单元a31,用于判断所述第三获取子单元a30获取的所述PE 文件中的节的属性是否为不可执行;

第六确定子单元a32,用于若所述第十一判断子单元a31确定所述PE文件 中的节的属性为不可执行,则确定所述PE文件中不含有代码。

本实施例中,通过判断PE文件中的节的属性是否为不可执行,能够更准确 地确定出PE文件中是否含有代码。

可选地,参看图26,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述判断单元1,包括:

第十二判断子单元a40,用于判断一PE文件中是否含有.NET程序集;

第七确定子单元a41,用于若所述第十二判断子单元a40确定所述PE文件 中不含有.NET程序集,则确定所述PE文件中不含有代码;或者

第一检查子单元a42,用于若所述第十二判断子单元a40确定所述PE文件 中含有.NET程序集,则检查所述PE文件中的.NET程序集是否能够引用其它.NET 程序集;

第八确定子单元a43,用于若所述第一检查子单元a42确定所述.NET程序 集不能够引用其它.NET程序集,则确定所述PE文件中不含有代码;或者

第十三判断子单元a44,用于若所述第一检查子单元a42确定所述.NET程 序集能够引用其它.NET程序集,则判断所述其它.NET程序集是否为System.dll;

第九确定子单元a45,用于若所述第十三判断子单元a44确定所述其它.NET 程序集为System.dll,则确定所述PE文件中不含有代码。

在.NET程序编写中,常常需要引用到其他的一些程序集,System.dll就 是.NET Framework的一个基本的程序集,几乎所有的程序都会引用到它。故如 果一个PE文件中的.NET程序集只引用了System.dll,那么可以认为该PE文件 未通过自身的.NET程序集能够引用的其它.NET程序集从而使其含有代码。

本实施例中,通过检查PE文件中的.NET程序集是否能够引用其它.NET程 序集,能够更准确地确定出PE文件中是否含有代码。

可选地,参看图27,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述判断单元1,包括:

第十四判断子单元a50,用于判断一PE文件中是否含有.NET程序集;

第二检查子单元a51,用于若所述第十四判断子单元a50确定所述PE文件 中含有.NET程序集,则检查所述PE文件中的.NET程序集中是否定义了类;

第十确定子单元a52,用于若所述第二检查子单元a51确定所述.NET程序 集中未定义类,则确定所述PE文件中不含有代码;或者

第三检查子单元a53,用于若所述第二检查子单元a51确定所述.NET程序 集中定义了类,则检查所述.NET程序集中定义的类是否均不含有方法;

第十一确定子单元a54,用于若所述第三检查子单元a53确定所述.NET程 序集中定义的类均不含有方法,则确定所述PE文件中不含有代码;或者

第四检查子单元a55,用于若所述第三检查子单元a53确定所述.NET程序 集中定义的类中存在含有方法的类,则检查所述含有方法的类中的方法是否为 不含方法体的构造函数;

第十二确定子单元a56,用于若所述第四检查子单元a55确定所述含有方法 的类中的方法为不含方法体的构造函数,则确定所述PE文件中不含有代码。

本实施例中,通过检查PE文件中定义的类是否均不含有方法或者PE文 件中定义的含有方法的类中的方法是否为不含方法体的构造函数,能够更准确 地确定出PE文件中是否含有代码。

可选地,在本发明识别PE文件是否是资源文件的装置的另一实施例中,还 包括:

第二检查单元,用于在所述判断单元确定一PE文件中是否含有代码之前, 检查所述PE文件的大小、所述PE文件的类型和/或所述PE文件的路径;

其中,所述判断单元,用于若所述第二检查单元确定所述PE文件的大小在 预设的文件大小范围内、所述PE文件的类型属于预设的类型集合和/或所述PE 文件的路径属于预设的路径集合,则判断所述PE文件中是否含有代码。

本实施例中,通过检查PE文件的大小、类型和路径,并筛选出大小在预设 的文件大小范围内、类型属于预设的类型集合和路径属于预设的路径集合的P E文件,能够进一步保证识别PE文件是否是资源文件的准确性。

可选地,参看图28,在本发明识别PE文件是否是资源文件的装置的另一实 施例中,所述确定单元3,包括:

第五检查子单元30,用于若所述第一检查单元2确定所述PE文件含有正常 的资源信息,则检查所述PE文件中的资源是否绑定了其它PE文件和/或是否捆 绑了包;

第十三确定子单元31,用于若所述第五检查子单元30确定所述PE文件中 的资源未绑定其它PE文件和/或未捆绑包,则确定所述PE文件是资源文件。

本实施例中,通过检查PE文件中的资源是否绑定了其它PE文件和/或是否 捆绑了包,能够更准确地确定出PE文件是否是资源文件。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程, 是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算 机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。 其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random Access Memory,RAM)等。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于 此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到 的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围 应以权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号