CN107239703A - 一种动态链接库缺失的可执行程序的动态分析方法 - Google Patents

一种动态链接库缺失的可执行程序的动态分析方法 Download PDF

Info

Publication number
CN107239703A
CN107239703A CN201710265961.9A CN201710265961A CN107239703A CN 107239703 A CN107239703 A CN 107239703A CN 201710265961 A CN201710265961 A CN 201710265961A CN 107239703 A CN107239703 A CN 107239703A
Authority
CN
China
Prior art keywords
dll
function
program
dynamic
imported
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.)
Granted
Application number
CN201710265961.9A
Other languages
English (en)
Other versions
CN107239703B (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.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
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 Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN201710265961.9A priority Critical patent/CN107239703B/zh
Publication of CN107239703A publication Critical patent/CN107239703A/zh
Application granted granted Critical
Publication of CN107239703B publication Critical patent/CN107239703B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供一种动态链接库缺失的可执行程序的动态分析方法。本发明通过分析可执行程序的导入表,获得其导入的动态链接库及其对应的导入函数信息,然后通过修改一个预先编译好的导出了若干函数的种子DLL文件的导出表,使其导出待分析的样本程序所需导入的函数,并修改该DLL的名称使之与样本程序所需的DLL名称相对应,最终生成程序样本所依赖的外部动态链接库文件,从而实现对动态链接库缺失的可执行程序进行动态分析。本发明无需运行可执行程序,并且对可执行程序没有修改,不破坏可执行程序完整性,同时本发明不仅适用于可执行程序的动态分析,也适用于动态链接库文件的动态分析,尤其适用于恶意软件的动态分析。

Description

一种动态链接库缺失的可执行程序的动态分析方法
技术领域
本发明属于网络安全技术领域,具体涉及一种动态链接库缺失的可执行程序的动态分析方法。
背景技术
随着计算机技术和互联网技术的不断发展,人们的生活的方方面面都越来越离不开计算机和计算机上运行的软件。恶意软件窃取个人数据和商业机密,发送垃圾邮件,控制用户电脑,对远程服务器发动拒绝服务攻击,给个人和企业造严重的困扰和经济损失。为了逃避检测,恶意软件往往藏身很多无害的软件中。要从大量的可执行程序样本中检测和清除恶意软件,首先要获得可执行程序样本的基本信息和程序行为,并从中提取、总结恶意软件所具有的特征。可执行程序分析技术可以帮助研究人员获得这些信息。可执行程序分析技术主要有静态分析和动态分析。
静态分析不运行程序样本,通过静态扫描程序样本,能够快速获得其基本信息:文件大小,文件类型,文件内容哈希,编译连接器版本,是否加壳等。它还可以对程序样本进行静态的语义分析,构建程序控制流图和数据依赖图,尝试理解程序行为,推断程序意图。静态分析通常借助特征字符串或特定的代码、数据片段对恶意代码进行检测。但是静态分析容易受到加壳,混淆,多态与变质等技术的干扰;缺乏输入、环境变量等运行时信息,使得静态的恶意程序行为分析的多数努力等于在做无用功并且误报率高。
动态分析通过在一个可控的模拟的真实环境里实际运行程序样本,给予程序输入,观察记录程序样本运行时行为:文件操作,注册表操作,网络操作,内存读写等。其天然具有抗加密、混淆、多态等优势,并且给以恶意输入数据,更有针对性,误报率低,模拟的真实环境,更能反映程序样本在实际主机上的真实行为。因而越来越受到安全研究人员和安全厂商的重视。
要想观察到可执行程序样本的真实行为,就需要首先让程序样本真正的运行起来。但是这个前提并不能总得到满足,其中一种情况就是缺少程序样本所依赖的其它程序组件,如外部动态链接库(DLL)文件。有的时候,能获得可执行程序样本的主体,却无法获得这些DLL文件,从而导致无法启动程序样本,动态分析失败。这种情况在分析恶意软件样本的时候更为普遍:为了逃避检测将自身分拆成多个文件,以及功能插件化、模块化开发等原因,恶意软件将程序的部分功能或恶意功能写到外部的DLL文件,在程序启动时由Windows加载器加载这些外部的DLL。因此,需要一种方法来解决程序样本由于缺乏依赖的外部DLL而无法启动的问题。
既然程序样本因为依赖外部的DLL而无法启动,那么一种思路就是满足程序样本的这种依赖。通过分析程序样本的导入表结构,得到程序样本导入的所有DLL,即其所依赖的所有的外部DLL文件,然后对比分析环境所提供的DLL文件和收集到与此程序样本所依赖的DLL文件,找出分析环境中缺失的DLL文件,然后修改程序样本的导入表,将分析环境中没有的DLL从导入表中移除,这样程序样本就能正常启动起来。但是这个方法需要对程序样本的导入表和PE头部结构进行修改,破坏了程序样本的完整性,如果程序样本有自我校验功能,当其检测到自身被修改时,可能不正常运行或是直接结束运行,分析平台就没法获得程序样本正常运行时的各种行为。另一种思路就是想办法满足程序样本的这种依赖,在无法收集到程序样本所依赖的外部DLL的时候,自动化的生成其所需DLL文件,使程序样本成功启动。
发明内容
本发明提供一种动态链接库缺失的可执行程序的动态分析方法,通过分析程序样本的导入表,获得其导入的动态链接库及其对应的导入函数信息,然后修改一个预先编译好的导出了若干函数的DLL的导出表,使其导出程序样本所需导入函数,并修改该DLL的名称使之与程序样本导入的DLL名称相对应,从而生成程序样本所缺失的DLL文件,使程序样本可以被动态分析。
一种动态链接库缺失的可执行程序的动态分析方法,包括如下步骤:
1)预先生成一种子DLL;
2)判断待分析的程序样本是否具有合法的导入表,如是,则执行步骤3),否则终止对该样本的分析并输出错误信息;
3)通过解析导入表结构,提取程序样本导入的DLL信息;
4)针对程序样本导入的每一个DLL都生成种子DLL的一个拷贝,并修改该拷贝名称使之与所针对的DLL名称一致;
5)根据步骤3)得到的DLL信息,对生成的DLL拷贝的导出表进行修改,使其形成程序样本依赖的DLL。
进一步地,还包括:6)根据步骤5)形成全部程序样本导入的DLL,将这些DLL移动到用户指定目录,并向用户报告生成结果。
进一步地,步骤1)中所述种子DLL导出了足够多函数。
进一步地,步骤1)中根据分析平台的系统版本,编译所述种子DLL;所述种子DLL导出了的函数的个数不小于9999个。
进一步地,步骤1)中编译所述种子DLL的同时记录分析平台所有的系统DLL名称;步骤3)提取程序样本导入的DLL信息时,排除步骤1)中记录的系统DLL。
进一步地,通过解析程序样本的文件头,判断程序样本是否具有合法的导入表。
进一步地,步骤3)中所述程序样本导入的DLL信息包括:程序样本导入的所有DLL名称及导入的各DLL对应的函数信息。
进一步地,所述函数信息包括按名称导入的函数的信息和按序号导入的函数的信息。
进一步地,按序号导入的函数的信息包括按函数序号导入的函数的序号值,按名称导入的函数的信息包括按函数名称导入的函数的字符串名和hint值。
进一步地,步骤5)中对DLL拷贝的导出表进行修改过程中,对于按名称导入的函数,在导出表中随机选取一项,修改其导出的函数名称,使之与导入的函数名称相同;对于按序号导入的函数,检查导出表中是否导出了具有该序号的函数。
通过上述技术方案,本发明通过静态扫描的方式,生成程序样本所依赖DLL文件,无需执行程序样本,快速安全。并且,本发明不会修改程序样本,因而在满足程序样本的外部DLL依赖的同时,能够避免触发程序样本完整性校验。最后,本发明不光可以为可执行的程序样本生成所依赖的外部DLL文件,同时也可以为DLL生成其所依赖的其它DLL文件,当获得程序样本的部分DLL,而这些DLL还对其它DLL有依赖时,由于DLL和可执行程序采用同样的文件格式(PE格式),因而可以从其文件头中的导入表获取其所依赖的其它DLL的信息,故采用同样的方法,本发明也能解决这类些依赖问题。
附图说明
图1为本发明一实施例中动态链接库缺失的可执行程序的动态分析方法的流程示意图。
具体实施方式
本发明的工作原理:
一个DLL想要导出某些函数给其它模块使用时,会将这些函数的信息声明在其导出表结构中,以便外部的程序能够在DLL中找到这些被导出的函数。函数的导出方式有两种,按函数名称导出或按函数序号导出。当程序需要使用外部的函数时,会在其PE文件头的导入表结构中声明需要引入的函数名称或是函数序号,以及这些函数存在于哪些DLL文件中。Windows加载器在启动程序时,根据程序的导入表,为程序加载相应的DLL到虚拟地址空间中,并根据被导入的函数名称或函数序号,从被加载的DLL中找到这些函数的真实地址并予以引用。为了能使程序正常的启动,程序的导入表结构应该是正确的,即使程序可能是恶意的。
下面结合附图详细说明本发明所提供的技术方案:
如图1所示,在一实施例中,提供的一种动态链接库缺失的可执行程序的动态分析方法,包括步骤:
1.种子DLL的生成和系统DLL列表的获取
首先需要生成一个特殊的DLL,称为种子DLL,由它为模板,生成所有程序样本导入的DLL。该DLL导出的函数个数应该足够多,因为程序在按序号导入函数时,序号值一般与要导入的DLL中的函数个数有对应关系,但也可以指定为任意值,不过这样并没有什么实际意义。导出9999个函数,在多数情况下应该够用了。当然,导出的函数个数并不限于该数值,本领域技术人员当可根据实际的运行环境和需求进行选取,在理解本发明核心主旨的前提下,知悉如何满足“足够多”的需求。
此外,DLL的名称(DLL文件头部导出表结构中域Name1指示的该DLL的真实名字,不是DLL文件名)和导出函数的名称应该足够长,因为在修改函数名或DLL名称时,只能从长的改为短的,例如,名称长度为128个字符多数情况下是足够的。同样地,该名称长度同样不限于该例举的数值。
种子DLL的版本应该和分析平台的系统版本相兼容,种子DLL同时按函数名称和序号值导出函数。
为了能够减少不必要的工作量,从分析平台的系统目录(一般是C:\Windows\system和C:\Windows\system32)中提取所有DLL名称,当程序样本需要导入的为这些系统DLL时,直接跳过。
2.判断程序样本是否有合法的导入表结构
解析程序样本的文件头,若其不是PE文件或没有合法的导入表结构,跳过该样本。直接判断为无效程序。
3.提取程序样本导入的DLL及相对应的导入函数
解析程序样本PE文件头中的导入表结构IMAGE_IMPORT_DESCRIPTOR,获取程序样本导入DLL模块名称,再根据IMAGE_THUNK_DATA得到按函数序号导入的函数的序号值,得到按函数名称导入的函数的字符串名和hint值。
4.生成程序样本依赖的外部DLL
针对程序样本导入的每一个DLL,先将步骤1中生成的种子DLL拷贝一份,文件名改为导入的DLL名称。然后修改拷贝后的种子DLL的导出表结构IMAGE_EXPORT_DIRECTORYSTRUCT中指定的模块真实名称为导入的DLL名称。
接着根据步骤3提取到的对应的导入函数信息,修改拷贝后的种子DLL的导出表结构,修改方法为:只按序号导入的函数,检查该序号是否被导出,若导出,则跳过,否则输出错误信息并终止该DLL的生成过程,继续尝试生成下一被导入的DLL。按函数名导入的函数,若其hint值为零,则在导出表中AddressOfNames域指出的导出函数名列表中随机选择一项,修改该项值为导入函数名称字符串;若其hint值不为零,则选择在导出表中由AddressOfNames域指出的导出函数名列表里以hint值为下标(下标编号从0开始)的那一项,修改其值为导入函数名称字符串,若hint值大于导出的函数个数,输出错误信息并终止该DLL的生成过程,继续尝试生成下一被导入的DLL。
5.输出生成结果
待程序样本导入的每个DLL都按步骤4处理完成后,将成功生成的DLL移动到用户指定的目录中,并向用户报告生成结果。
本发明提出的动态链接库缺失的可执行程序的动态分析方法,对于本领域的技术人员而言,在遵循本发明核心主旨的前提下,可以根据需要自己编译合适的种子DLL,设计导入表解析和导出表修改方法,从而快速高效地生成程序样本所依赖的外部DLL文件。
尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。

Claims (10)

1.一种动态链接库缺失的可执行程序的动态分析方法,包括如下步骤:
1)预先生成一种子DLL;
2)判断待分析的程序样本是否具有合法的导入表,如是,则执行步骤3),否则终止对该样本的分析并输出错误信息;
3)通过解析导入表结构,提取程序样本导入的DLL信息;
4)针对程序样本导入的每一个DLL都生成种子DLL的一个拷贝,并修改该拷贝名称使之与所针对的DLL名称一致;
5)根据步骤3)得到的DLL信息,对生成的DLL拷贝的导出表进行修改,使其形成程序样本依赖的DLL。
2.如权利要求1所述的动态链接库缺失的可执行程序的动态分析方法,其特征在于,还包括:6)根据步骤5)形成全部程序样本导入的DLL,将这些DLL移动到用户指定目录,并向用户报告生成结果。
3.如权利要求1所述的动态链接库缺失的可执行程序的动态分析方法,其特征在于,步骤1)中所述种子DLL导出了足够多函数。
4.如权利要求3所述的动态链接库缺失的可执行程序的动态分析方法,其特征在于,步骤1)中根据分析平台的系统版本,编译所述种子DLL;所述种子DLL导出了的函数的个数不小于9999个。
5.如权利要求1所述的动态链接库缺失的可执行程序的动态分析方法,其特征在于,步骤1)中编译所述种子DLL的同时记录分析平台所有的系统DLL名称;步骤3)提取程序样本导入的DLL信息时,排除步骤1)中记录的系统DLL。
6.如权利要求1所述的动态链接库缺失的可执行程序的动态分析方法,其特征在于,通过解析程序样本的文件头,判断程序样本是否具有合法的导入表。
7.如权利要求1所述的动态链接库缺失的可执行程序的动态分析方法,其特征在于,步骤3)中所述程序样本导入的DLL信息包括:程序样本导入的所有DLL名称及导入的各DLL对应的函数信息。
8.如权利要求1所述的动态链接库缺失的可执行程序的动态分析方法,其特征在于,所述函数信息包括按名称导入的函数的信息和按序号导入的函数的信息。
9.如权利要求8所述的动态链接库缺失的可执行程序的动态分析方法,其特征在于,按序号导入的函数的信息包括按函数序号导入的函数的序号值,按名称导入的函数的信息包括按函数名称导入的函数的字符串名和hint值。
10.如权利要求1所述的动态链接库缺失的可执行程序的动态分析方法,其特征在于,步骤5)中对DLL拷贝的导出表进行修改过程中,对于按名称导入的函数,在导出表中随机选取一项,修改其导出的函数名称,使之与导入的函数名称相同;对于按序号导入的函数,检查导出表中是否导出了具有该序号的函数。
CN201710265961.9A 2017-04-21 2017-04-21 一种动态链接库缺失的可执行程序的动态分析方法 Active CN107239703B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710265961.9A CN107239703B (zh) 2017-04-21 2017-04-21 一种动态链接库缺失的可执行程序的动态分析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710265961.9A CN107239703B (zh) 2017-04-21 2017-04-21 一种动态链接库缺失的可执行程序的动态分析方法

Publications (2)

Publication Number Publication Date
CN107239703A true CN107239703A (zh) 2017-10-10
CN107239703B CN107239703B (zh) 2020-05-22

Family

ID=59984133

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710265961.9A Active CN107239703B (zh) 2017-04-21 2017-04-21 一种动态链接库缺失的可执行程序的动态分析方法

Country Status (1)

Country Link
CN (1) CN107239703B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112292678A (zh) * 2019-01-04 2021-01-29 百度时代网络技术(北京)有限公司 用于验证将要由主机系统的数据处理加速器执行的内核对象的方法与系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080028462A1 (en) * 2006-07-26 2008-01-31 Michael Burtscher System and method for loading and analyzing files
CN102034043A (zh) * 2010-12-13 2011-04-27 四川大学 基于文件静态结构属性的恶意软件检测新方法
CN102314561A (zh) * 2010-07-01 2012-01-11 电子科技大学 基于api hook的恶意代码自动分析方法和系统
US20150026658A1 (en) * 2013-07-18 2015-01-22 Appsense Limited Systems, Methods and Media for Dynamic Creation and Update of Activation Context for Component Object Model

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080028462A1 (en) * 2006-07-26 2008-01-31 Michael Burtscher System and method for loading and analyzing files
CN102314561A (zh) * 2010-07-01 2012-01-11 电子科技大学 基于api hook的恶意代码自动分析方法和系统
CN102034043A (zh) * 2010-12-13 2011-04-27 四川大学 基于文件静态结构属性的恶意软件检测新方法
US20150026658A1 (en) * 2013-07-18 2015-01-22 Appsense Limited Systems, Methods and Media for Dynamic Creation and Update of Activation Context for Component Object Model

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
刘豫等: "基于可回溯动态污点分析的攻击特征生成方法", 《通信学报》 *
聂楚江等: "一种面向程序动态分析的循环摘要生成方法", 《电子学报》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112292678A (zh) * 2019-01-04 2021-01-29 百度时代网络技术(北京)有限公司 用于验证将要由主机系统的数据处理加速器执行的内核对象的方法与系统

Also Published As

Publication number Publication date
CN107239703B (zh) 2020-05-22

Similar Documents

Publication Publication Date Title
Bisht et al. XSS-GUARD: precise dynamic prevention of cross-site scripting attacks
US8266700B2 (en) Secure web application development environment
US8800042B2 (en) Secure web application development and execution environment
US9356937B2 (en) Disambiguating conflicting content filter rules
JP4395178B2 (ja) コンテンツ処理システム、方法及びプログラム
US9767280B2 (en) Information processing apparatus, method of controlling the same, information processing system, and information processing method
US20040205411A1 (en) Method of detecting malicious scripts using code insertion technique
US20040181677A1 (en) Method for detecting malicious scripts using static analysis
JP2011501280A (ja) ウェブブラウザの脆弱性が利用されることを防止する方法及び装置
JP2017021778A (ja) 変更されたウェブページを判定するためのシステム及び方法
CN102999726B (zh) 文件宏病毒免疫方法和装置
CN107896219B (zh) 一种网站脆弱性的检测方法、系统及相关装置
CN103679031A (zh) 一种文件病毒免疫的方法和装置
EP3136276A1 (en) System and method for detecting harmful files executable on a virtual stack machine
JP2010182019A (ja) 異常検知装置およびプログラム
Müller et al. Processing dangerous paths
Gittins et al. Malware persistence mechanisms
WO2012078349A1 (en) Automatic correction of program logic
EP2107484A2 (en) A method and device for code audit
CN113726825B (zh) 一种网络攻击事件反制方法、装置及系统
Pieczul et al. Runtime detection of zero-day vulnerability exploits in contemporary software systems
US20150101052A1 (en) Method for function capture and maintaining parameter stack
US10275596B1 (en) Activating malicious actions within electronic documents
Malandrone et al. Powerdecode: a powershell script decoder dedicated to malware analysis
CN107239703A (zh) 一种动态链接库缺失的可执行程序的动态分析方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant