CN102831343B - 一种目标程序处理方法、处理装置及云端服务设备 - Google Patents

一种目标程序处理方法、处理装置及云端服务设备 Download PDF

Info

Publication number
CN102831343B
CN102831343B CN201210265098.4A CN201210265098A CN102831343B CN 102831343 B CN102831343 B CN 102831343B CN 201210265098 A CN201210265098 A CN 201210265098A CN 102831343 B CN102831343 B CN 102831343B
Authority
CN
China
Prior art keywords
function library
party
function
target program
title
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210265098.4A
Other languages
English (en)
Other versions
CN102831343A (zh
Inventor
程文坤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Qizhi Software Beijing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd, Qizhi Software Beijing Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201210265098.4A priority Critical patent/CN102831343B/zh
Publication of CN102831343A publication Critical patent/CN102831343A/zh
Application granted granted Critical
Publication of CN102831343B publication Critical patent/CN102831343B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了一种目标程序处理方法、处理装置及云端服务设备,其中,所述目标程序处理方法包括:获取第三方函数库的名称及所述第三方函数库所包含的函数的名称,所述第三方函数库为加载目标程序至内存时所要导入的第三方函数库;构造空白函数库,根据所述第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成所述第三方函数库;导入伪造的第三方函数库并读取对应的函数名称,从而加载所述目标程序到内存,对所述目标程序进行脱壳并扫描所述目标程序,根据扫描结果对所述目标程序进行处理。本申请通过自行构造第三方函数库来保证目标文件的加载,从而可以在缺乏第三方函数库的杀毒环境中进行脱壳并扫描。

Description

一种目标程序处理方法、处理装置及云端服务设备
技术领域
本申请属于计算机领域,具体地说,涉及一种目标程序处理方法、处理装置及云端服务设备。
背景技术
PE文件是Windows操作***上的程序文件,被称为可移植可执行(PE,Portable Execute)文件。常见的PE文件包括:EXE、DLL、OCX、SYS、COM等文件。
对PE文件加壳需要利用特殊的算法对PE文件里的资源进行压缩、加密等处理,加壳之后的PE文件可以独立运行。运行时附加在PE文件原始程序上的壳代码通过Windows加载器载入内存后,先于PE文件原始程序执行从而得到PE文件的控制权,在壳代码执行过程中对PE文件原始程序进行解密、解压,这一还原过程完全隐蔽,都在内存中完成,PE文件原始程序还原完成后再把控制权交还给PE文件原始程序,执行原始程序的代码部分。
现如今,大多数恶意程序就是基于对PE文件加壳的原理制作得到的,从而避免杀毒软件对恶意程序的扫描。为了扫描加壳的恶意程序,杀毒软件需要对恶意程序脱壳再进行扫描。脱壳分为动态脱壳后扫描和静态脱壳后扫描。动态脱壳通过调试器创建加壳文件的调试进程,通过动态调试的方式控制加壳文件的壳代码执行流程从而脱壳,然后对脱壳后的文件进行扫描。静态脱壳通过分析壳代码的加密算法和加密流程,通过反向方式构造解密算法和解密流程,直接对加壳文件进行解密并保存,然后对脱壳后的文件进行扫描。
由于壳代码的种类繁多,采用的加壳技术非常多样,所以只有极少数的壳能够被静态脱掉。而在进行动态脱壳时,很多PE文件都需要导入第三方函数库才能加载到内存来执行,所谓第三方函数库即指PE文件加载到内存时需要导入的非***函数库,但是在杀毒软件的隔离环境中第三方函数库是不存在的,因此Windows操作***无法加载PE文件到内存,则无法进行脱壳。
发明内容
有鉴于此,本申请所要解决的技术问题是提供了一种目标程序处理方法、处理装置及云端服务设备,通过自行构造第三方函数库来保证目标文件的加载,从而可以在缺乏第三方函数库的杀毒环境中进行脱壳并扫描,本申请中的目标程序特指PE文件,当然如果类似于PE文件在加载时需要加载第三方函数库的程序、文件也适用于本申请。
为了解决上述技术问题,本申请公开了一种目标程序处理方法,包括:获取第三方函数库的名称及所述第三方函数库所包含的函数的名称,所述第三方函数库为加载目标程序至内存时所要导入的第三方函数库;构造空白函数库,根据所述第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成所述第三方函数库;导入伪造的第三方函数库并读取对应的函数名称,从而加载所述目标程序到内存,对所述目标程序进行脱壳并扫描所述目标程序,根据扫描结果对所述目标程序进行处理。
进一步地,获取第三方函数库的名称及所述第三方函数库所包含的函数的名称,包括:通过比对所述目标程序的导入表及操作***的***函数库列表,解析出加载所述目标程序至内存时所要导入的第三方函数库的名称,还解析出所述第三方函数库所包含的函数的名称;其中,所述导入表中记录加载所述目标程序至内存时所要导入的函数库,还记录有每所述函数库包含的函数,所述函数库包括***函数库和第三方函数库;所述***函数库列表中记录所述操作***运行时所要导入的***函数库。
进一步地,根据所述第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成对应的所述第三方函数库,包括:将所述空白函数库修改为对应的第三方函数库的名称,将所述第三方函数库包含的函数的名称登记到所述空白函数库。
进一步地,将所述第三方函数库包含的函数的名称登记到所述空白函数库,包括:为所述空白函数库创建导出表,所述导出表中登记有所述空白函数库伪造的所述第三方函数库的名称,还登记有所述第三方函数库所包含的函数的名称。
进一步地,所述目标程序为支持脱壳的有壳程序;所述空白函数库伪造的第三方函数库及其导出表,与所述目标程序位于同一目录内。
进一步地,判断所述目标程序为支持脱壳的有壳文件的操作,包括:构建特征库,所述特征库中保存有每种壳的一个或多个特征,还保存有每种壳是否适用脱壳;获取所述目标程序的入口指令,根据所述入口指令的特征码分析得到所述目标程序的壳的一个或多个特征,根据所述一个或多个特征在所述特征库中进行匹配,在所述特征库中特征匹配数量最高且大于一门限值的壳,判定为所述目标程序的壳;根据所述目标程序的壳,结合所述特征库获知能否对所述目标程序进行脱壳。
进一步地,还包括:如果所述目标程序不能脱壳,直接导入所述第三方函数库,并读取登记到所述第三方函数库的函数名称从而加载所述目标程序,并将所述目标程序转存到内存镜像进行处理。
为了解决上述技术问题,本申请公开了一种目标程序处理装置,包括:获取模块、构造模块及处理模块,其中,所述获取模块,用于获取第三方函数库的名称及所述第三方函数库所包含的函数的名称,所述第三方函数库为加载目标程序至内存时所要导入的第三方函数库;所述构造模块,用于构造空白函数库,根据所述第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成对应的所述第三方函数库;所述处理模块,用于导入伪造的第三方函数库并读取对应的函数名称,从而加载所述目标程序到内存,对所述目标程序进行脱壳并扫描所述目标程序,根据扫描结果对所述目标程序进行处理。
进一步地,所述获取模块,包括:解析单元、第一获取单元及第二获取单元,其中,所述第一获取单元,用于获取所述目标程序的导入表,所述导入表中记录加载所述目标程序至内存时所要导入的函数库,还记录有所述函数库包含的函数,所述函数库包括***函数库和第三方函数库;所述第二获取单元,用于获取操作***的***函数库列表,所述***函数库列表中记录所述操作***运行时所要导入的***函数库;所述解析单元,用于通过比对所述目标程序的导入表及操作***的***函数库列表,解析出加载所述目标程序至内存时所要导入的第三方函数库的名称,还解析出所述第三方函数库所包含的函数的名称。
进一步地,所述构造模块,将所述空白函数库伪造成对应的所述第三方函数库时,用于将所述空白函数库修改为对应的第三方函数库的名称,将所述第三方函数库包含的函数的名称登记到所述空白函数库。
进一步地,所述构造模块,用于为所述空白函数库创建导出表,所述导出表中登记有所述空白函数库伪造的所述第三方函数库的名称,还登记有所述第三方函数库所包含的函数的名称。
进一步地,还包括:判定模块,用于判定所述目标程序为支持脱壳的有壳文件时触发所述获取模块启动;所述构造模块,还用于将所述空白函数库及其导出表,放入与所述目标程序相同的目录。
进一步地,所述判定模块,包括:特征库、特征库构建单元、匹配单元和判定单元,其中,所述特征库构建单元,用于构建特征库;所述特征库,用于保存每种壳的一个或多个特征,还用于保存每种壳是否适用脱壳;所述匹配单元,获取所述目标程序的入口指令,根据所述入口指令的特征码分析得到所述目标程序的壳的一个或多个特征,根据所述一个或多个特征在所述特征库中进行匹配,在所述特征库中特征匹配数量最高且大于一门限值的壳,判定为所述目标程序的壳;所述判定单元,用于根据所述目标程序的壳,结合所述特征库获知能否对所述目标程序进行脱壳,并通知所述获取模块。
进一步地,所述处理模块,还用于在所述目标程序不能脱壳时,直接导入所述第三方函数库并读取登记到所述第三方函数库的函数名称从而加载所述目标程序到内存,并将所述目标程序转存到内存镜像进行处理。
为了解决上述技术问题,本申请还公开了一种处理目标程序的云端服务设备,包括:构造服务器和处理服务器,其中,所述构造服务器,用于构造空白函数库,还用于根据终端设备上报的第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成对应的所述第三方函数库,并下发给所述终端设备以对目标程序脱壳,所述第三方函数库为所述终端设备加载所述目标程序至内存时所要导入的第三方函数库;所述处理服务器,用于收集所述终端设备中脱壳的目标程序的程序行为和/或程序特征,检测所述目标程序是否为恶意,并反馈给所述终端设备进行处理。
为了解决上述技术问题,本申请还公开了一种处理目标程序的云端服务设备,包括:构造服务器和处理服务器,其中,所述构造服务器,用于构造空白函数库,还用于根据终端设备上报的第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成对应的所述第三方函数库,所述第三方函数库为所述终端设备加载目标程序至内存时所要导入的第三方函数库;所述处理服务器,用于接收所述终端设备发送的目标程序,并虚拟所述终端设备的***环境,在所述***环境中导入伪造的第三方函数库并读取对应的函数名称,加载所述目标程序,对所述目标程序进行脱壳并扫描所述目标程序,根据扫描结果对所述目标程序进行处理,发送处理后的目标程序给所述终端设备。
与现有的方案相比,本申请所获得的技术效果:
1)通过自行构造第三方函数库来保证目标文件的加载,从而可以在缺乏第三方函数库的杀毒环境中进行脱壳并扫描;
2)兼容现有方式,在脱壳失败时直接导入所述第三方函数库加载目标文件,进一步保证安全性;
3)通过构建特征库智能识别所述目标文件是否有壳以及壳类型,减少了人工参与,并将智能识别是否有壳以及壳类型加入扫描流程,进一步保证扫描手段的准确;
4)通过目标文件的导入表智能验证目标文件是否有导入第三方函数库的需要,并能够智能识别出第三方函数库及所包含的函数,保证了自行构造第三方函数库的安全可行。
5)本申请还可以将如构造、加载、扫描这种大运算量的操作均由云端完成,终端设备将存疑的目标程序及必要的信息提交即可,大大降低了终端设备的运算量,利用云端集群强大的计算能力从而大大提高了对于目标程序的处理效率,同时由云端模拟终端设备的***环境来进行加载扫描,保证了终端设备的安全性。
当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有技术效果。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本申请实施例的第一方法流程图;
图2是本申请实施例的导出表的示意图;
图3是本申请实施例的第二方法流程图;
图4是本申请实施例的PE文件的导入表的示意图;
图5是本申请实施例的第三方法流程图;
图6是本申请实施例的第一装置结构图;
图7是本申请实施例的第二装置结构图;
图8是本申请实施例的第三装置结构图;
图9是本申请实施例的第四装置结构图;
图10是本申请实施例中的第一云端服务设备结构图;
图11是本申请实施例中的第二云端服务设备结构图。
具体实施方式
以下将配合图式及实施例来详细说明本申请的实施方式,藉此对本申请如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
本申请通过自行构造第三方函数库来保证目标文件的加载,从而可以在缺乏第三方函数库的杀毒环境中进行脱壳并转存扫描;杀毒环境是一种隔离环境,只保证能够加载基本的***函数库。
对目标文件的扫描后,可以知道目标文件是否是恶意,根据这个扫描结果可以对目标文件进行处理;例如所述目标文件为恶意,所述处理包括清除或者隔离,其中清除操作包括以下一种或多种的组合:直接删除目标文件;修改目标文件的入口指令;向目标文件中指定的区域写入数据;在目标文件内进行数据拷贝;针对目标文件的结构,删除指定的节区并对目标文件的格式做相应的调整;从目标文件的头部删除指定大小的数据;从目标文件的尾部删除指定大小的数据,并修正目标文件的结构;直接设置目标文件的大小。
其中目标程序特指PE文件,当然本申请并不限于此,如果存在其他类似于PE文件的程序、文件,在加载时也需要加载第三方函数库,对于这类程序、文件的处理也适用于本申请。以下描述中适用PE文件来进行描述,本领域技术人员应当知道,PE文件并不对目标程序作出限制,本申请权利要求中的目标程序并不限于PE文件。
另外,本申请权利要求中所指的脱壳,主要为动态脱壳;当然,本申请并不限于此,如果存在类似于动态脱壳的方式,需要加载目标程序到内存才能够进行脱壳,对于这类脱壳方式也适用于本申请。以下描述中使用动态脱壳来进行描述,本领域技术人员应当知道,本申请权利要求中的脱壳方式并不限于动态脱壳。
下面以第一实施例来描述本申请的总体方法流程。如图1所示,为本申请实施例的第一方法流程图,包括:
步骤S100,获取第三方函数库的名称及所述第三方函数库所包含的函数的名称,所述第三方函数库为加载PE文件至内存时所要导入的第三方函数库;
本步骤由PE文件所在的终端设备执行,也可以将相关数据上报云端服务器由云端服务器执行;所述第三方函数库可以为一个或多个,包括但不限于DLL(动态链接库);所述第三方函数库所包含的函数,包括但不限于API(应用程序编程接口)函数。
步骤S200,构造空白函数库,根据所述第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成所述第三方函数库;
本步骤可以由PE文件所在的终端设备执行,也可以将相关数据上报云端服务器由云端服务器执行;
具体来说,将所述空白函数库修改为对应的第三方函数库的名称,将所述第三方函数库包含的函数的名称登记到所述空白函数库;需要注意的是,所述伪造的第三方函数库为空白函数库,其实质上不包含任何函数,伪装成第三方函数库只为加载所述PE文件提供形式支持,在动态脱壳阶段并不会真正根据登记的函数名称调用相应函数。
将所述第三方函数库包含的函数的名称登记到所述空白函数库从而伪装成所述伪造的第三方函数库包含所述函数,可以通过以下方式实现:为替代函数库创建导出表(Export Table),导出表中登记有所述空白函数库伪造的所述第三方函数库的名称,还登记有所述第三方函数库所包含的函数的名称。
以下以一应用实例描述步骤S200的操作。如图2所示,为本申请实施例的导出表的示意图。以下将空白函数库伪造的所述第三方函数库称为替代函数库进行描述。
针对一个第三方函数库procs.dll构造一空白函数库,所述空白函数库为.dll,在空白函数库.dll的区段表中构造一个.edata节区,所述.edata节区用于承载替代函数库的导出表。
设置.edata节区的物理大小(RSize)为0x100000h字节,并用00填充,从而在.edata节区中预留了足够多空间使得导出表中可以容纳替代函数库的名称及登记第三方函数库所包含的函数的名称,如图2所示。
将所述空白函数库.dll修改为对应的第三方函数库的名称procs.dll,从而得到伪装成所述第三方函数库的替代函数库;
并在替代函数库的导出表中登记所述第三方函数库的名称procs.dll及procs.dll所包含的函数的名称。
步骤S300,导入伪造的第三方函数库并读取对应的函数名称,从而加载所述PE文件到内存,对所述PE文件进行动态脱壳并扫描所述PE文件,根据扫描结果对所述PE文件进行处理,例如所述目标文件为恶意,所述处理包括清除或者隔离。
本步骤可以由PE文件所在的终端设备执行,也可以将相关数据上报云端服务器由云端服务器执行;
对于步骤S300,如果所述PE文件不能动态脱壳,所述操作***直接导入所述第三方函数库,并读取登记到所述第三方函数库的函数名称从而加载所述PE文件,并将所述目标程序转存到内存镜像进行处理。这样从而兼容现有方式,在动态脱壳失败时直接导入所述第三方函数库加载PE文件,进一步保证安全性。
需要注意的是,所述空白函数库伪造的第三方函数库及导出表,需要与所述PE文件位于同一目录内。
下面以第二实施例描述上述步骤S100的具体实现。如图3所示,为本申请实施例的第二方法流程图,以下步骤由PE文件所在的终端设备执行,也可以将相关数据上报云端服务器由云端服务器执行,包括:
步骤S110,获取所述PE文件的导入表(Import Table),所述导入表中记录加载所述PE文件至内存时所要导入的一个或多个函数库,还记录有每个函数库所包含的函数;
所述函数库,包括:***函数库和第三方函数库;所谓第三方函数库即指所述PE文件加载到内存时需要导入的非***函数库;
按照加壳的目的和作用,可分为压缩壳与加密壳,压缩壳不加密导入表等PE文件中的结构,目的在于减小文件大小,对于压缩壳可以直接获取PE文件的导入表中的内容;加密壳会对导入表等PE文件中的结构进行加密,目的在于增加文件被逆向工程的难度,对于压缩壳需要首先解密还原PE文件的导入表之后再获取导入表中的内容;
步骤S120,获取操作***的***函数库列表,所述***函数库列表中记录所述操作***运行时所要导入的***函数库;
步骤S130,通过比对所述PE文件的导入表及操作***的***函数库列表,解析出加载所述PE文件至内存时所要导入的一个或多个第三方函数库的名称,还解析出每个第三方函数库所包含的函数的名称。
需要说明的是,1)步骤S110和S120可以同时执行,也可以以任意次序先后执行,本申请并不限于此;2)步骤S100以及步骤S110-S130的操作,除了获取第三方函数库及所包含的函数以外,其另一个作用是同时验证了所述PE文件是否有导入第三方函数库的需要,如果发现所述PE文件不需要导入第三方函数库,则不必进行步骤S200-S300的步骤,直接进行动态脱壳并扫描,当然需要导入第三方函数库的PE文件是本申请所关心的部分。
以下一应用实例描述步骤S100的具体实现。如图4所示,为本申请实施例的PE文件的导入表的示意图。通过与操作***的***函数库列表比对后,解析得到所述PE文件的导入表中的procs.dll,没有存在于操作***的***函数库列表中,因此procs.dll为加载所述PE文件至内存时所要导入第三方函数库。
同时根据procs.dll下列出的ApiName可以获知,procs.dll包含的函数有GetProcessPatchID、GetModuleHandleList、GetProcessIDList、GetProcessBaseSize、GetNumberOfModules、GetNumberOfProcesses、GetModuleSize、GetModulePath、GetProcessPath等等。
由此得到加载所述PE文件至内存时所要导入的第三方函数库的名称及每个第三方函数库所包含的函数的名称。
步骤S100、S200及步骤S300中的处理对象为所述PE文件,其应该为能够进行动态脱壳的有壳文件。下面以第三实施例来具体描述如何判断所述PE文件为能够进行动态脱壳的有壳文件。参照图5所示,为本申请实施例的第三方法流程图,以下步骤可以由PE文件所在的终端设备执行,也可以将相关数据上报云端服务器由云端服务器执行,包括:
步骤S410,构建特征库,所述特征库中保存有每种壳的一个或多个特征,还保存有每种壳是否适用动态脱壳;
步骤S420,获取所述PE文件的入口指令(OEP),根据所述入口指令的特征码分析得到所述PE文件的壳的一个或多个特征,根据所述一个或多个特征在所述特征库中进行匹配;
所述特征码为OEP处的壳的机器码;
步骤S430,如果所述特征库中存在特征匹配数量最高且大于一门限值的壳,则判定所述PE文件为有壳文件,判定所述壳即为所述PE文件的壳,执行步骤S440;否则,则判定所述PE文件为无壳文件,对所述PE文件进行扫描;
所述门限值根据经验设置,其设置可以有效减少误判,保证对于有壳无壳判断得准确性;
步骤S440,根据所述PE文件的壳,结合所述特征库获知能否对所述PE文件进行动态脱壳;
具体来说,可以获知对所述PE文件适宜进行动态脱壳还是静态脱壳,如果适用于动态脱壳,则可以执行步骤S100-S300的操作,如果适用于静态脱壳,则对所述PE文件进行静态脱壳并扫描。目前所有的压缩壳和部分初级加密壳都能够被动态脱壳,而仅有如UPX、NSPACK、UPACK、FSG等简单的压缩壳能够被静态脱壳。
一般来说步骤S410-S440应该先于步骤S100-S300来执行,在确认执行结果为适宜进行动态脱壳后,再执行步骤S100-S300的操作。但是目前仅有等一小部分简单的压缩壳能够被静态脱壳,因此在实际操作中绝大部分壳都会尝试动态脱壳,因此步骤S410-S440与步骤S100-S300完全可以同时进行以保证效率,将步骤S410-S440同步执行来验证步骤S100-S300的可行性;也可以优先执行步骤S100-S300,在动态脱壳失败时再考虑通过步骤S410-S440检测所述PE文件是否适于动态脱壳。
以下一应用实例描述步骤S410-S440的具体实现。
特征库中保存有A壳的特征码如表1所示。其中特征码长度为0x12字节,特征码中的01是可变的,即不算为特征,总共有4个0x01,因此所述特征码的有效数据长度为0x12-0x04=0x0E:
  地址   机器码
  002143A4   60 E8 00 00 00 00 5D B9 01 01 01 01 80 31 15 41
  002143B4   81 F9
表1
找到所述PE文件的壳代码的OEP,由OEP处的数据中提取前0x12个字节的特征码,假设所提取的特征码如表2所示,其中也包括有4个0x01,因此所述特征码的有效数据长度也是0x12-0x04=0x0E:
  地址   机器码
  002143A4   60 E8 02 00 00 00 5D B9 01 01 01 01 80 31 15 51
  002143B4   81 F9
表2
将OEP处所提取的特征码与特征库中特征码进行逐字节比较,发现一共有0x0C个字节的内容是相同的,特征码的有效数据长度是0x0E,因此0x0C/0x0E*0x64=0x55,即十进制的85%,换言之,只有OEP处所提取的特征码只有85%与特征库中保存的A壳的特征码匹配。
根据经验设定门限为90%,即匹配度至少需要达到90%,才可以认为被检测的PE文件是相应的壳,因此判定当前被检测的PE文件不是A壳。
假设判定当前被检测的PE文件是A壳,则还可以在特征库中获知所述A壳是否适用于动态脱壳。
下面以第四实施例来描述本申请的总体装置结构。如图6所示,为本申请实施例的第一装置结构图。目标程序处理装置,包括:依次相连的获取模块1、构造模块2及处理模块3。
所述获取模块1,用于获取第三方函数库的名称及所述第三方函数库所包含的函数的名称,所述第三方函数库为加载PE文件至内存时所要导入的第三方函数库,通知所述构造模块2;
所述构造模块2,用于构造空白函数库,根据所述第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成对应的所述第三方函数库,通知所述处理模块3;将所述空白函数库伪造成对应的所述第三方函数库时,具体来说,进一步用于将所述空白函数库修改为对应的第三方函数库的名称,将所述第三方函数库包含的函数的名称登记到所述空白函数库;在将所述第三方函数库包含的函数的名称登记到所述空白函数库时,具体来说,进一步用于为所述空白函数库创建导出表,所述导出表中登记有所述空白函数库伪造的所述第三方函数库的名称,还登记有所述第三方函数库所包含的函数的名称;另外,所述构造模块2,还用于将所述空白函数库及其导出表,放入与所述PE文件相同的目录;
所述处理模块3,用于导入伪造的第三方函数库并读取对应的函数名称,从而加载所述PE文件到内存,对所述PE文件进行脱壳并扫描所述PE文件,根据扫描结果对所述PE文件进行处理,例如所述目标文件为恶意,所述处理包括清除或者隔离;另外,所述处理模块3,还用于在所述PE文件不能脱壳时,直接导入所述第三方函数库并读取登记到所述第三方函数库的函数名称从而加载所述PE文件,并将所述目标程序转存到内存镜像进行处理。
下面以第五实施例来描述本申请的获取模块的结构。如图7所示,为本申请实施例的第二装置结构图。所述构造模块2及处理模块3的功能及连接结构第四实施例所述,不再赘述。
所述获取模块1,进一步包括:解析单元10、以及分别与解析单元10相连的第一获取单元12、第二获取单元14。
所述第一获取单元12,用于获取所述PE文件的导入表,所述导入表中记录加载所述PE文件至内存时所要导入的函数库,还记录有所述函数库所包含的函数,所述函数库包括***函数库和第三方函数库;
所述第二获取单元14,用于获取操作***的***函数库列表,所述***函数库列表中记录所述操作***运行时所要导入的***函数库;
所述解析单元10,用于通过比对所述PE文件的导入表及操作***的***函数库列表,解析出加载所述PE文件至内存时所要导入的第三方函数库的名称,还解析出所述第三方函数库所包含的函数的名称,通知所述构造模块2。
下面以第六实施例来描述本申请的总体装置结构。如图8所示,为本申请实施例的第三装置结构图。获取模块1、构造模块2及处理模块3的功能和连接结构如第四、第五实施例所述,不再赘述。
目标程序处理装置,还包括:判定模块4,用于判定所述PE文件为支持动态脱壳的有壳文件时触发所述获取模块1中的第一获取单元12、第二获取单元14启动。
下面以第七实施例来描述本申请的判定模块的结构。如图9所示,为本申请实施例中的第四装置结构图。所述获取模块1、构造模块2及处理模块3的功能及连接结构第四、第五、第六实施例所述,不再赘述。
所述判定模块4,进一步包括:特征库40、特征库构建单元42、匹配单元44和判定单元46,其中,
所述特征库构建单元42,用于构建特征库40;
所述特征库40,用于保存每种壳的一个或多个特征,还用于保存每种壳是否适用动态脱壳;
所述匹配单元44,获取所述PE文件的入口指令,根据所述入口指令的特征码分析得到所述PE文件的壳的一个或多个特征,根据所述一个或多个特征在所述特征库40中进行匹配,在所述特征库中特征匹配数量最高且大于一门限值的壳,判定为所述PE文件的壳;
所述判定单元46,用于根据所述匹配单元44判定的所述PE文件的壳,结合所述特征库40获知能否对所述PE文件进行动态脱壳,并通知所述获取模块1中的第一获取单元12、第二获取单元14启动。
所述装置部分的实施例与方法流程部分的实施例对应,所述装置部分的实施例的不足之处可参考上述方法流程部分的实施例。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
下面以第八实施例来描述本申请的云端服务设备的结构。如图10所示,为本申请实施例中的第一云端设备结构图。处理目标程序的云端服务设备,包括:构造服务器1000和处理服务器2000,其中,
所述构造服务器1000,用于构造空白函数库,还用于根据终端设备3000上报的第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成对应的所述第三方函数库,并下发给所述终端设备3000以对目标程序脱壳,所述第三方函数库为所述终端设备3000加载所述目标程序至内存时所要导入的第三方函数库;
所述处理服务器2000,用于收集所述终端设备3000上报的脱壳的目标程序的程序行为和/或程序特征,检测所述目标程序是否为恶意,并发送给所述终端设备3000进行处理,例如所述目标文件为恶意,所述处理包括清除或者隔离。
所述终端设备3000,获取第三方函数库的名称及所述第三方函数库所包含的函数的名称并上报至所述构造服务器1000,所述第三方函数库为加载目标程序至内存时所要导入的第三方函数库;由所述构造服务器1000接收伪造的第三方函数库并进行导入,读取与伪造的第三方函数库对应的函数名称,从而加载所述目标程序到内存,对所述目标程序进行脱壳,将脱壳的目标程序的程序行为和/或程序特征发送到所述处理服务器2000从而对所述目标程序进行扫描;根据所述处理服务器2000发来的扫描结果来处理该目标程序,例如所述目标文件为恶意,所述处理包括清除或者隔离。
在本例中,由云端替代终端设备完成第三方函数库的构造,并在目标程序被脱壳后,由云端完成对所述目标程序进行检测。获取第三方函数库的名称、所述第三方函数库所包含的函数的名称以及具体的操作,均在终端设备来完成。
判断所述PE文件为能够进行动态脱壳的有壳文件也可以由所述构造服务器1000来完成,所述构造服务器1000构建特征库,接收所述终端设备3000发来的所述PE文件的入口指令的特征码,根据所述特征码结合特征库分析得到所述PE文件的壳的一个或多个特征,根据所述一个或多个特征在所述特征库中进行匹配,在所述特征库中特征匹配数量最高且大于一门限值的壳,判定为所述PE文件的壳,根据判定的所述PE文件的壳,结合所述特征库获知能否对所述PE文件进行动态脱壳,并通知所述终端设备3000开始获取第三方函数库的名称及其包含的函数的名称。
下面以第九实施例来描述本申请的云端服务设备的结构。如图11所示,为本申请实施例中的第二云端设备结构图。处理目标程序的云端服务设备,包括:构造服务器4000和处理服务器5000,其中,
所述构造服务器4000,用于构造空白函数库,还用于根据终端设备6000上报的第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成对应的所述第三方函数库发送至处理服务器5000,所述第三方函数库为所述终端设备6000加载目标程序至内存时所要导入的第三方函数库;
所述处理服务器5000,用于接收所述终端设备6000提交的目标程序,并虚拟所述终端设备6000的***环境,在所述***环境中导入伪造的第三方函数库并读取对应的函数名称,加载所述目标程序,对所述目标程序进行脱壳并扫描所述目标程序,根据扫描结果对所述目标程序进行处理,发送处理后的目标程序给所述终端设备6000,例如所述目标文件为恶意,所述处理包括清除或者隔离;处理后的目标程序经过云端确认为安全或者经过云端清除目标程序中的恶意部分或者经过云端修复目标程序中的恶意部分,已经成为安全的目标程序。
所述终端设备6000,获取第三方函数库的名称及所述第三方函数库所包含的函数的名称并上报至所述构造服务器4000,所述第三方函数库为加载目标程序至内存时所要导入的第三方函数库;还将所述目标程序发送到处理服务器5000,并向处理服务器5000汇报自身的***环境状况;接收处理服务器5000发来的处理后的目标程序对自身的目标程序进行替换,使用所述处理后的目标程序开始正常操作。
判断所述PE文件为能够进行动态脱壳的有壳文件也可以由所述构造服务器4000来完成,所述构造服务器4000构建特征库,接收所述终端设备6000发来的所述PE文件的入口指令的特征码,根据所述特征码结合特征库分析得到所述PE文件的壳的一个或多个特征,根据所述一个或多个特征在所述特征库中进行匹配,在所述特征库中特征匹配数量最高且大于一门限值的壳,判定为所述PE文件的壳,根据判定的所述PE文件的壳,结合所述特征库获知能否对所述PE文件进行动态脱壳,并通知所述终端设备6000开始获取第三方函数库的名称及其包含的函数的名称。
在本例中,终端设备只需要上报需要的信息及提交需要让云端处理的目标程序,对第三方函数库的构造、目标文件的处理都集中在云端进行,最后云端将安全的目标程序反馈给终端设备。可见,如构造、加载、扫描这种大运算量的操作均由云端完成,终端设备将存疑的目标程序及必要的信息提交即可,大大降低了终端设备的运算量,利用云端集群强大的计算能力从而大大提高了对于目标程序的处理效率,同时由云端模拟终端设备的***环境来进行加载扫描,保证了终端设备的安全性。
所述云端服务设备部分的实施例与方法流程部分、装置部分的实施例对应,所述云端服务设备部分的实施例的不足之处可参考上述方法流程部分、装置部分的实施例。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
上述说明示出并描述了本申请的若干优选实施例,但如前所述,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本申请的精神和范围,则都应在本申请所附权利要求的保护范围内。

Claims (14)

1.一种目标程序处理方法,其特征在于,包括:
获取第三方函数库的名称及所述第三方函数库所包含的函数的名称,所述第三方函数库为加载目标程序至内存时所要导入的第三方函数库,其中所述第三方函数库为非***函数库;
构造空白函数库,根据所述第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成所述第三方函数库,所述空白函数库没有函数;
为所述空白函数库创建导出表,所述导出表中登记有所述空白函数库伪造的所述第三方函数库的名称,还登记有所述第三方函数库所包含的函数的名称;
导入伪造的第三方函数库并读取对应的函数名称,从而加载所述目标程序到内存,对所述目标程序进行脱壳并扫描所述目标程序,根据扫描结果对所述目标程序进行处理。
2.如权利要求1所述的处理方法,其特征在于,获取第三方函数库的名称及所述第三方函数库所包含的函数的名称,进一步包括:
通过比对所述目标程序的导入表及操作***的***函数库列表,解析出加载所述目标程序至内存时所要导入的第三方函数库的名称,还解析出所述第三方函数库所包含的函数的名称;
其中,所述导入表中记录加载所述目标程序至内存时所要导入的函数库,还记录有每所述函数库包含的函数,所述函数库包括***函数库和第三方函数库;所述***函数库列表中记录所述操作***运行时所要导入的***函数库。
3.如权利要求1所述的处理方法,其特征在于,根据所述第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成对应的所述第三方函数库,进一步包括:
将所述空白函数库修改为对应的第三方函数库的名称,将所述第三方函数库包含的函数的名称登记到所述空白函数库。
4.如权利要求1所述的处理方法,其特征在于,
所述目标程序为支持脱壳的有壳程序;
所述空白函数库伪造的第三方函数库及其导出表,与所述目标程序位于同一目录内。
5.如权利要求1-4中任一项所述的处理方法,其特征在于,判断所述目标程序为支持脱壳的有壳文件的操作,包括:
构建特征库,所述特征库中保存有每种壳的一个或多个特征,还保存有每种壳是否适用脱壳;
获取所述目标程序的入口指令,根据所述入口指令的特征码分析得到所述目标程序的壳的一个或多个特征,根据所述一个或多个特征在所述特征库中进行匹配,在所述特征库中特征匹配数量最高且大于一门限值的壳,判定为所述目标程序的壳;
根据所述目标程序的壳,结合所述特征库获知能否对所述目标程序进行脱壳。
6.如权利要求1-4中任一项所述的处理方法,其特征在于,还包括:
如果所述目标程序不能脱壳,直接导入所述第三方函数库,并读取登记到所述第三方函数库的函数名称从而加载所述目标程序,并将所述目标程序转存到内存镜像进行处理。
7.一种目标程序处理装置,其特征在于,包括:获取模块、构造模块及处理模块,其中,
所述获取模块,用于获取第三方函数库的名称及所述第三方函数库所包含的函数的名称,所述第三方函数库为加载目标程序至内存时所要导入的第三方函数库,其中所述第三方函数库为非***函数库;
所述构造模块,用于构造空白函数库,根据所述第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成对应的所述第三方函数库,所述空白函数库没有函数;
所述构造模块,还用于为所述空白函数库创建导出表,所述导出表中登记有所述空白函数库伪造的所述第三方函数库的名称,还登记有所述第三方函数库所包含的函数的名称;
所述处理模块,用于导入伪造的第三方函数库并读取对应的函数名称,从而加载所述目标程序到内存,对所述目标程序进行脱壳并扫描所述目标程序,根据扫描结果对所述目标程序进行处理。
8.如权利要求7所述的处理装置,其特征在于,所述获取模块,进一步包括:解析单元、第一获取单元及第二获取单元,其中,
所述第一获取单元,用于获取所述目标程序的导入表,所述导入表中记录加载所述目标程序至内存时所要导入的函数库,还记录有所述函数库包含的函数,所述函数库包括***函数库和第三方函数库;
所述第二获取单元,用于获取操作***的***函数库列表,所述***函数库列表中记录所述操作***运行时所要导入的***函数库;
所述解析单元,用于通过比对所述目标程序的导入表及操作***的***函数库列表,解析出加载所述目标程序至内存时所要导入的第三方函数库的名称,还解析出所述第三方函数库所包含的函数的名称。
9.如权利要求7所述的处理装置,其特征在于,
所述构造模块,将所述空白函数库伪造成对应的所述第三方函数库时,进一步用于将所述空白函数库修改为对应的第三方函数库的名称,将所述第三方函数库包含的函数的名称登记到所述空白函数库。
10.如权利要求7所述的处理装置,其特征在于,
还包括:判定模块,用于判定所述目标程序为支持脱壳的有壳文件时触发所述获取模块启动;
所述构造模块,还用于将所述空白函数库及其导出表,放入与所述目标程序相同的目录。
11.如权利要求10所述的处理装置,其特征在于,所述判定模块,进一步包括:特征库、特征库构建单元、匹配单元和判定单元,其中,
所述特征库构建单元,用于构建特征库;
所述特征库,用于保存每种壳的一个或多个特征,还用于保存每种壳是否适用脱壳;
所述匹配单元,获取所述目标程序的入口指令,根据所述入口指令的特征码分析得到所述目标程序的壳的一个或多个特征,根据所述一个或多个特征在所述特征库中进行匹配,在所述特征库中特征匹配数量最高且大于一门限值的壳,判定为所述目标程序的壳;
所述判定单元,用于根据所述目标程序的壳,结合所述特征库获知能否对所述目标程序进行脱壳,并通知所述获取模块。
12.如权利要求7-10中任一项所述的处理装置,其特征在于,
所述处理模块,还用于在所述目标程序不能脱壳时,直接导入所述第三方函数库并读取登记到所述第三方函数库的函数名称从而加载所述目标程序,并将所述目标程序转存到内存镜像进行处理。
13.一种处理目标程序的云端服务设备,其特征在于,包括:构造服务器和处理服务器,其中,
所述构造服务器,用于构造空白函数库,还用于根据终端设备上报的第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成对应的所述第三方函数库,并下发给所述终端设备以对目标程序脱壳,所述第三方函数库为所述终端设备加载所述目标程序至内存时所要导入的第三方函数库,所述第三方函数库为非***函数库,且所述空白函数库没有函数;
所述处理服务器,用于收集所述终端设备中脱壳的目标程序的程序行为和/或程序特征,判定所述目标程序是否为恶意,并反馈给所述终端设备进行处理。
14.一种处理目标程序的云端服务设备,其特征在于,包括:构造服务器和处理服务器,其中,
所述构造服务器,用于构造空白函数库,还用于根据终端设备上报的第三方函数库的名称及其包含的函数的名称,将所述空白函数库伪造成对应的所述第三方函数库,所述第三方函数库为所述终端设备加载目标程序至内存时所要导入的第三方函数库,其中所述第三方函数库为非***函数库,且所述空白函数库没有函数;
所述处理服务器,用于接收所述终端设备发送的目标程序,并虚拟所述终端设备的***环境,在所述***环境中导入伪造的第三方函数库并读取对应的函数名称,加载所述目标程序,对所述目标程序进行脱壳并扫描所述目标程序,根据扫描结果对所述目标程序进行处理,发送处理后的目标程序给所述终端设备。
CN201210265098.4A 2012-07-27 2012-07-27 一种目标程序处理方法、处理装置及云端服务设备 Active CN102831343B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210265098.4A CN102831343B (zh) 2012-07-27 2012-07-27 一种目标程序处理方法、处理装置及云端服务设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210265098.4A CN102831343B (zh) 2012-07-27 2012-07-27 一种目标程序处理方法、处理装置及云端服务设备

Publications (2)

Publication Number Publication Date
CN102831343A CN102831343A (zh) 2012-12-19
CN102831343B true CN102831343B (zh) 2015-06-17

Family

ID=47334476

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210265098.4A Active CN102831343B (zh) 2012-07-27 2012-07-27 一种目标程序处理方法、处理装置及云端服务设备

Country Status (1)

Country Link
CN (1) CN102831343B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103413073B (zh) * 2013-07-09 2016-01-20 北京深思数盾科技有限公司 一种保护java可执行程序的方法及设备
CN109740351A (zh) * 2018-12-28 2019-05-10 广东电网有限责任公司 一种嵌入式固件的漏洞检测方法、装置及设备
CN112580040B (zh) * 2019-09-30 2023-07-04 奇安信安全技术(珠海)有限公司 文件外壳的脱壳方法及装置、存储介质、电子装置
CN112270010B (zh) * 2020-11-17 2024-04-12 上海好连网络科技有限公司 可执行文件远程安全加载的方法
CN113868655A (zh) * 2021-09-29 2021-12-31 北京天融信网络安全技术有限公司 木马查杀方法、装置、电子设备及计算机可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154259A (zh) * 2007-08-27 2008-04-02 电子科技大学 通用自动化脱壳引擎与方法
CN101980160A (zh) * 2010-10-28 2011-02-23 北京飞天诚信科技有限公司 一种.net程序加密后的执行方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8479174B2 (en) * 2006-04-05 2013-07-02 Prevx Limited Method, computer program and computer for analyzing an executable computer file

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154259A (zh) * 2007-08-27 2008-04-02 电子科技大学 通用自动化脱壳引擎与方法
CN101980160A (zh) * 2010-10-28 2011-02-23 北京飞天诚信科技有限公司 一种.net程序加密后的执行方法

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
PE文件中脱壳技术的研究;李露 等;《计算机应用与软件》;20100930;第27卷(第9期);第279-282页 *
一种PE文件加壳检测规则;姜晓新 等;《计算机工程》;20100731;第36卷(第14期);第135-137页 *
余三超.基于虚拟机的通用自动化脱壳***.《中国优秀硕士学位论文全文数据库(电子期刊)》.2011,(第4期),I138-87. *
基于环境敏感分析的恶意代码脱壳方法;王志 等;《计算机学报》;20120430;第35卷(第4期);第693-702页 *
采用Win32 API相关行为分析的位置病毒检测方法;刘帅 等;《计算机工程与应用》;20111231;第47卷(第27期);第119-121页 *

Also Published As

Publication number Publication date
CN102831343A (zh) 2012-12-19

Similar Documents

Publication Publication Date Title
CN102810138B (zh) 一种用户端文件的修复方法和***
US7140005B2 (en) Method and apparatus to test an instruction sequence
US10387648B2 (en) Ransomware key extractor and recovery system
US9953162B2 (en) Rapid malware inspection of mobile applications
CN102831343B (zh) 一种目标程序处理方法、处理装置及云端服务设备
RU2491615C1 (ru) Система и способ формирования записей для обнаружения программного обеспечения
CN105760787B (zh) 用于检测随机存取存储器中的恶意代码的***及方法
US20130246038A1 (en) Emulator updating system and method
CN110417768B (zh) 一种僵尸网络的跟踪方法及装置
CN112861191B (zh) 一种应用程序监控方法及装置
CN107273723A (zh) 一种基于so文件加壳的Android平台应用软件保护方法
CN105320884A (zh) 虚拟机的安全防护方法及***
CN103793649A (zh) 通过云安全扫描文件的方法和装置
CN109241707A (zh) 应用程序的混淆方法、装置和服务器
US20080028462A1 (en) System and method for loading and analyzing files
CN111737718A (zh) 一种jar包的加解密方法、装置、终端设备和存储介质
CN104915594A (zh) 应用程序运行方法及装置
CN106682493B (zh) 一种防止进程被恶意结束的方法、装置及电子设备
Xu et al. BofAEG: Automated stack buffer overflow vulnerability detection and exploit generation based on symbolic execution and dynamic analysis
CN105550573B (zh) 拦截捆绑软件的方法和装置
CN103067246A (zh) 对基于即时通讯业务接收到的文件进行处理的方法及装置
CN114282212A (zh) 流氓软件识别方法、装置、电子设备及存储介质
CN105453104B (zh) ***保护用文件安全管理装置和管理方法
CN106775843B (zh) 基于内存加载的dalvik字节码优化方法
CN103677746B (zh) 指令重组方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20220727

Address after: Room 801, 8th floor, No. 104, floors 1-19, building 2, yard 6, Jiuxianqiao Road, Chaoyang District, Beijing 100015

Patentee after: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Address before: 100088 room 112, block D, 28 new street, new street, Xicheng District, Beijing (Desheng Park)

Patentee before: BEIJING QIHOO TECHNOLOGY Co.,Ltd.

Patentee before: Qizhi software (Beijing) Co.,Ltd.