CN103440457B - 基于进程模拟的二进制程序分析*** - Google Patents

基于进程模拟的二进制程序分析*** Download PDF

Info

Publication number
CN103440457B
CN103440457B CN201310426028.7A CN201310426028A CN103440457B CN 103440457 B CN103440457 B CN 103440457B CN 201310426028 A CN201310426028 A CN 201310426028A CN 103440457 B CN103440457 B CN 103440457B
Authority
CN
China
Prior art keywords
thread
module
instruction
information
unit
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
CN201310426028.7A
Other languages
English (en)
Other versions
CN103440457A (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.)
Zhixun password (Shanghai) Testing Technology Co., Ltd
Original Assignee
Shanghai Jiaotong University
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 Shanghai Jiaotong University filed Critical Shanghai Jiaotong University
Priority to CN201310426028.7A priority Critical patent/CN103440457B/zh
Publication of CN103440457A publication Critical patent/CN103440457A/zh
Application granted granted Critical
Publication of CN103440457B publication Critical patent/CN103440457B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

一种电子数据监控技术领域的基于进程模拟的二进制程序分析***,包括:模拟器引擎模块、内存管理模块、进程管理模块、***调用接口、线程管理模块、中央处理模块和提供应用程序接口的分析组件接口,其中:模拟器引擎模块分别连接内存管理模块、进程管理模块、***调用接口和分析组件接口,进程管理模块分别与内存管理模块、中央处理模块和***调用接口相连,线程管理模块分别与内存管理模块、进程管理模块和中央处理模块相连;本发明不依赖于对程序的静态逆向分析,而采用完全动态分析的方法,能够避免大部分程序保护技术造成的影响。

Description

基于进程模拟的二进制程序分析***
技术领域
本发明涉及的是一种电子数据监控技术领域的***,具体是一种基于进程模拟的二进制程序分析***。
背景技术
在计算机安全领域中,对各类软件尤其是恶意程序的逆向分析是程序安全分析的基础工作。由于缺少了相关的语义信息,针对二进制程序的逆向分析往往十分困难,需要消耗大量的人力物力。因此,为了辅助分析人员进行逆向分析,相应的自动化程序分析方法和分析平台也应运而生。
为了实现自动化的程序分析,需要对程序运行时的指令流、控制流和数据流进行细粒度地监视,同时需要获取程序运行中的处理器、内存等相关信息。目前对程序运行时信息的获取主要采用进程调试、全***模拟以及动态二进制插桩等技术来实现。但是,目前的分析技术均存在若干问题,其中进程调试采用操作***的调试API实现,对目前恶意程序常用的反调试手段往往无能为力;全***模拟技术对整个计算机平台进行模拟,与分析无关的大量指令如操作***内核占用了大部分的模拟时间,导致分析效率很低;而动态二进制插桩由于改变了程序的指令流和控制流,对于一些经过保护的程序如被加壳或混淆后的程序往往无法进行分析。因此,目前的分析方案在面对当前日益复杂的程序时常常无法满足分析要求。
经过对现有技术的检索发现,中国专利文献号CN101814053,公开日2010-08-25,记载了一种基于功能模型的二进制代码漏洞发现方法,首先基于静态逆向分析***建立代码功能模型,并基于所述代码功能模型构造初始测试用例集;其次,通过动态测试与回放分析***依据覆盖率控制和选路策略在动态测试平台上加载测试用例集,并采用动态路径约束优化和约束求解、基于代的路径遍历算法进行测试用例集的调整,以及根据回放分析进行异常的精细分析及漏洞定位;第三,静态逆向分析***和动态测试与回放分析***均将各自分析得到的程序属性存入功能模型中,并以功能模型中的程序属性来指导各自的分析测试工作。但该技术与本发明相比的缺陷及不足在于:第一,该技术依赖于静态逆向分析,而目前软件保护技术的广泛使用使得分析人员往往无法进行有效的静态分析,因此从目前的很多程序尤其是恶意程序中提取静态分析结果是比较困难的;第二,该技术的分析方法仅能对程序的异常运行情况加以检测并分析可能的漏洞,而无法检测程序的潜在恶意攻击行为,尤其是目前的各类攻击方法如ROP(Return-OrientedProgramming)层出不穷,该技术无法对程序中存在的能够被这类攻击所利用的漏洞进行检测;第三,在目前各类动态代码执行被广泛使用的情况下,如插件(Plugin)、用户脚本(UserScripting)、即时编译(Just-in-timeCompilation)等等,该技术无法对这类动态生成或加载的代码进行有效分析,因此进一步限定了其分析范围。
发明内容
本发明针对现有技术存在的上述不足,提供一种基于进程模拟的二进制程序分析***,针对现有技术的不足之处,从程序的底层即***硬件结构和操作***的级别对程序进行运行环境的模拟,不干涉程序的正常运行,而对程序的运行过程如数据流向等内容进行监控。本发明不依赖于对程序的静态逆向分析,而采用完全动态分析的方法,能够避免大部分程序保护技术造成的影响。通过对分析***进行扩展并自定义攻击行为,本发明能够在攻击代码被执行前进行检测和拦截;并且通过引入动态污点分析等手段,能够对敏感数据流向进行分析和跟踪,避免造成数据和隐私的泄露。并且,本发明不依赖于程序的静态分析结果,能够对动态生成代码进行完整分析。
本发明是通过以下技术方案实现的,本发明包括:模拟器引擎模块、内存管理模块、进程管理模块、***调用接口、线程管理模块、中央处理模块和提供应用程序接口的分析组件接口,其中:模拟器引擎模块分别连接内存管理模块、进程管理模块、***调用接口和分析组件接口,分别传输运行状态信息和运行指令、进程管理和线程调度信息、***API调用数据、调试信息和分析组件事件等,控制、协调各个模块并降低不同模块之间的耦合度;进程管理模块分别与中央处理模块、内存管理模块和***调用接口相连,分别传输处理器调度信息和运行状态信息、内存管理数据以及***调用参数转换及封装等信息,线程管理模块分别与进程管理模块、内存管理模块和中央处理模块相连,分别传输线程运行状态及调度信息、线程内存数据访问以及处理器运行状态;
所述的模拟器引擎模块为各个组件提供统一的协调控制,并驱动各个组件运行完成被模拟进程的加载、初始化、运行和清除,该模拟器引擎模块包括:驱动单元、操作***挂钩单元和调试单元,其中:驱动单元与内存管理模块和进程管理模块相连,接收运行状态信息,发送运行指令;操作***挂钩单元与进程管理模块相连,接收进程管理模块的***API调用并传递给底层操作***,返回API调用结果;调试单元连接***调用接口和分析组件接口进行应用程序调试;
所述的内存管理模块包括:虚拟内存管理单元、堆管理单元和栈管理单元,其中:虚拟内存管理单元向线程管理模块传输内存访问数据,并与模拟器引擎模块的驱动单元相连以传输运行状态信息;堆管理单元从进程管理模块接收堆管理指令,完成进程中堆内存的管理;栈管理单元从线程管理模块接收线程运行状态,完成所有线程中栈内存的管理。
所述的虚拟内存管理单元采用分页方案对4GB虚拟内存进行管理;同时模拟Windows的虚拟内存管理行为,完成操作***级别的内存分配、回收及访问权限控制。
所述的堆管理单元和栈管理单元分别传输的进程中堆的管理信息、进程中各线程栈内存的管理,全局虚拟内存页分配与回收等。
所述的进程中堆的管理信息包括:堆的建立销毁和内存分配;堆内存权限设置;堆容量调整与重分配等。
所述的进程管理模块包括:线程调度管理单元、状态驱动单元和***API封装单元,其中:线程调度管理单元与中央处理模块相连接收进程中所有线程的调度信息,完成线程的调度以及创建和销毁;状态驱动单元与模拟器引擎模块相连,接收模拟器引擎模块的运行指令,完成主线程及其他线程的运行驱动并传输运行状态信息;***API封装单元与***调用接口相连接收线程管理模块的***API调用,封装参数并传输至模拟器引擎模块进行调用。
所述的进程管理模块用于对进程的完整执行流程进行驱动;维护该进程所包含的所有线程及其调度;进程中***句柄(Handle)维护及内存地址分配;以及进程PEB(ProcessEnvironmentBlock)等数据结构的创建及维护。
所述的线程管理模块包括:环境信息模拟单元、驱动线程单元和执行单元,其中:环境信息模拟单元与进程管理单元相连,接收线程的运行时状态信息并建立模拟运行时环境供线程使用;驱动线程单元与进程管理单元相连,接收线程运行指令并传输线程运行状态;执行单元与中央处理模块的线程状态单元相连用于完成处理器指令循环并在结束时终止线程。
所述的环境信息模拟模块建立的供线程使用的模拟运行时环境包括:入口点、参数、标志位、堆栈地址和大小及TEB(ThreadEnvironmentBlock);
所述的线程管理模块维护模拟进程中单个线程的环境信息,并驱动线程从入口点开始的执行过程,同时判断终止条件并结束线程;同时用于由该线程动态加载的其他模块(DLL)的载入和初始化;
所述的中央处理模块内置有分别与进程管理模块和线程管理模块相连的寄存器和状态单元且分别传输处理器调度信息和线程运行状态及调度信息。
所述的传输处理器调度信息和线程运行状态及调度信息包括:处理器标志位(eflags)、运行状态信息;并对x86指令集、x87FPU指令集、MMX指令集和SSE指令集提供了解释模拟函数,从而实现完整处理器功能的模拟。
所述的中央处理模块上设有异常管理器,用于传递处理器异常信息及异常处理结果,该异常管理器构造异常的环境信息并执行异常处理函数。
所述的分析组件接口为***提供API接口,使得分析人员能够很容易地编写分析组件,完成自动化程序分析;
所述的模拟器引擎模块分别连接加载器、反汇编引擎和与附加的调试组件相连、用于进行应用程序调试的调试接口,其中:加载器解析待分析进程的可执行PE文件并将解析结果通过模拟器引擎模块加载至内存管理模块,反汇编引擎对单条x86指令进行反汇编,解析出指令的操作码、源操作数、目的操作数等信息;调试接口用于传递调试信息,可进行应用程序及模拟器自身的调试;
所述的待分析进程的可执行PE文件是指:Windows中的可执行程序以PE格式存在,模拟器加载并解析PE文件使其能够被模拟执行;
本发明涉及一种基于上述***的进程优化方法,包括以下步骤:
步骤一、对待分析进程进行轻量级x86指令集模拟,即以程序运行效率损失在两个数量级以内的前提下进行x86指令集的模拟处理和虚拟内存环境,
所述的步骤一具体包括:
1.1使用启发式递归反汇编算法对于每条处理器指令提供静态的反汇编信息;
所述的启发式递归反汇编算法包括以下步骤:
1.1.1针对PE文件中的各条指令进行以下步骤的判断。
1.1.2定位入口点指令E,当该指令E为有效指令则对其进行反汇编处理后执行步骤1.1.3,否则跳过该条指令并重新执行步骤1.1.2。
1.1.3当反汇编处理后的指令E为跳转指令,则对指令E的跳转目标进行反汇编处理。
1.1.4在指令E的尾部添加该指令的长度信息并返回步骤1.1.2处理下一条指令,直至完成所有指令的处理后返回反汇编处理得到的指令集合S。
1.2利用反汇编信息模拟各条指令的执行流程,包括寄存器、内存数据以及标志位的值。
1.3提取内存访问数据、寄存器值变化信息用于程序分析。
所述的内存访问数据包括:内存地址和内存数据、寄存器值、标志位改变信息以及异常信息。
步骤二、模拟若干操作***行为保证待分析进程运行在可控的环境中,具体包括:
2.1进程初始化阶段对被模拟的程序进行加载和初始化,确定进程中各模块中各段(section)的内存分布情况,并确定入口点以及终止条件。
2.2内存管理使用分页式的内存管理机制,包括:以页为单位的虚拟内存分配、回收和访问权限控制。
2.3线程管理模块用于维护多线程程序中的线程建立、销毁以及线程调度,使多线程程序在共享内存的模型下能够被正常执行。
2.4异常处理用于在处理器发生异常时的操作***异常处理机制,使程序的异常处理例程能够运行在模拟环境中。
步骤三、对进程中的操作***API调用进行封装,交由操作***直接执行;
所述的操作***API是指:操作***提供给用户进程的应用程序接口,使用户程序能够利用操作***功能。
3.1拦截所有模拟进程的API调用,核心API由模拟器引擎模块直接模拟执行,其他API发送至操作***执行;
所述的核心API包括:内存管理API、线程管理API、调试API、操作***参数获取API等。
3.2完成API调用时的参数转换,包括:模拟内存地址和真实地址的映射。
3.3操作***在API执行完毕后返回模拟器引擎模块,处理执行结果。
步骤四、为模拟执行过程中的动态运行时信息提供应用程序接口,并将模拟器各组件的执行过程封装为事件,以事件处理的方式提供应用程序接口,最终使得分析程序能够利用这些信息进行程序优化。
所述的动态运行时信息包括:指令流、数据流和控制流。
所述的事件包括:指令执行事件、内存访问事件、操作***API调用事件、线程调度事件。
技术效果
1)对被分析程序进行指令级别的模拟执行,使用轻量级x86指令集解释器来提供细粒度的运行时信息;
2)对待分析进程中与程序分析无关的内容,如***调用的执行采用包装或模拟的方式,交由底层操作***执行,保证分析效率;
3)模拟若干操作***行为如内存管理、线程管理及异常处理等,保证被分析程序运行在可控的环境中;
4)为程序的自动化分析提供良好的接口,使得程序的模拟执行和分析能够同步高效进行。
与目前已有的分析方案相比,本发明几乎不受反调试手段的影响,同时不修改待分析进程的原始指令和数据,运行效率比全***模拟提高了一至二个数量级,同时稳定性和兼容性较二进制插桩有了极大的提高。在该分析***的基础上,能够高效进行程序的算法及协议分析、漏洞挖掘及检测、程序性能分析、内存调试、程序行为分析以及恶意程序检测等多种自动化分析手段,对程序安全分析提供了可靠的支持。
附图说明
图1为本发明***结构图;
图2为进程管理模块的结构示意图;
图3为线程管理模块的结构示意图;
图4为本发明运行流程图。
具体实施方式
下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
实施例1
以常用多线程网络通信程序curl.exe(http://curl.haxx.se)为例,说明具体的实施过程。
如图1所示,包括:模拟器引擎模块、内存管理模块、进程管理模块、***调用接口、线程管理模块、中央处理模块和提供应用程序接口的分析组件接口,其中:模拟器引擎模块分别连接内存管理模块、进程管理模块、***调用接口和分析组件接口,分别传输内存访问数据、线程调度和处理器访问数据、***调用参数及其封装以及模拟器事件和环境信息,控制、协调各个模块并降低不同模块之间的耦合度;进程管理模块分别与内存管理模块、中央处理模块和***调用接口相连,分别传输内存管理数据如内存分配回收、处理器调度信息以及***调用参数转换及封装等信息,线程管理模块分别与内存管理模块、进程管理模块和中央处理模块相连,分别传输线程数据在内存中的分布情况、线程运行状态及调度信息、以及处理器运行状态;
所述的模拟器引擎模块包括:公用的***接口,为各个组件提供统一的协调控制,并驱动各个组件运行完成被模拟进程的加载、初始化、运行和清除;
所述的内存管理模块分别与堆和栈相连,分别传输进程中堆的管理信息如堆的建立销毁和内存分配、进程中各线程栈内存的管理,内存管理模块包括:虚拟内存管理单元,采用分页方案对4GB虚拟内存进行管理;同时模拟Windows的虚拟内存管理行为,完成操作***级别的内存分配、回收及访问权限控制;
内存管理模块:模拟Windows的分页内存管理机制,用于待分析进程的内存分配和回收以及权限管理,为***的内存管理API提供底层的模拟实现,同时维护待分析进程的堆和栈;
所述的进程管理模块包括:用于对进程的完整执行流程进行驱动;维护该进程所包含的所有线程及其调度;进程中***句柄(Handle)维护及内存地址分配;以及进程PEB(ProcessEnvironmentBlock)等数据结构的创建及维护;
进程管理模块:维护待分析进程相关的上下文信息,管理待分析进程的所有线程;
所述的线程管理模块包括:维护模拟进程中单个线程的环境信息,如入口点、参数、标志位、堆栈地址和大小及TEB等,并驱动线程从入口点开始的执行过程,同时判断终止条件并结束线程;同时用于由该线程动态加载的其他模块(DLL)的载入和初始化;
所述的中央处理模块包括:为完整的中央处理模块提供模拟环境、包括寄存器、处理器标志位(eflags)、运行状态信息等;并对x86指令集、x87FPU指令集、MMX指令集和SSE指令集提供了解释模拟函数,从而实现完整处理器功能的模拟;以及子模块异常管理器;其中异常管理器与处理器模块连接,传递处理器异常信息及异常处理结果;
线程管理模块和中央处理模块:为每个线程维护独立的中央处理模块环境,包括寄存器、处理器标志位及寄存器其它运行时数据,中央处理模块对待分析进程的各条指令进行模拟解释执行;
***调用接口:接管待分析进程中的API调用,对核心API,如内存相关,采用模拟执行,其他API则交由操作***直接运行,保证运行效率;
分析组件接口为***提供API接口,使得分析人员能够很容易地编写分析组件,完成自动化程序分析;
所述的模拟器引擎模块分别连接加载器、反汇编引擎和与附加的调试组件相连、用于进行应用程序调试的调试接口,其中:加载器解析待分析进程的可执行PE文件并将解析结果通过模拟器引擎模块加载至内存管理模块,反汇编引擎对单条x86指令进行反汇编,解析出指令的操作码、源操作数、目的操作数等信息;调试接口用于传递调试信息,可进行应用程序及模拟器自身的调试;
所述的待分析进程的可执行PE文件是指:Windows中的可执行程序以PE格式存在,模拟器加载并解析PE文件使其能够被模拟执行;
实施例2
如图2所示,本发明所述***运行时经历加载、初始化、运行分析、终止等过程。
步骤一、加载待分析进程的PE文件和依赖的动态链接库,建立完整的Windowsx86虚拟运行时环境;
所述的运行时环境包括线性内存地址空间、中央处理模块环境以及相关的操作***功能;
步骤二、对待分析进程进行指令模拟执行,使用轻量级的x86指令集模拟器提供细粒度的运行时信息,并进行后续分析,具体步骤包括:
2.1使用启发式递归反汇编算法尝试反汇编所有指令;
2.2构造处理器模拟环境,利用反汇编信息精确模拟各条指令的执行流程;
2.3提取内存访问数据、寄存器值等信息用于程序分析;
所述的轻量级的x86指令集模拟器是指:高性能的、以低代价运行的x86指令集模拟器,能够在对程序正常执行不造成显著影响的情况下对x86指令集进行模拟执行;
所述的细粒度的划分具体是:精确到对操作***可见的最细粒度,即指令、寄存器这一级别,而非诸如动态二进制插桩等方案常采用的基本块或函数这一级别;
所述的运行时信息具体是指:内存访问信息如内存地址和内存数据、寄存器值、标志位改变信息以及可能产生的异常信息等;
步骤三、模拟若干操作***行为保证待分析进程运行在可控的环境中,具体步骤包括:
3.1加载curl.exe的程序主体和依赖的***模块(DLL),使用地址空间随机化(ASLR)分配各组件的基地址,确定内存布局;同时确定程序入口点以及终止条件;
3.2对进程虚拟内存空间采用分页管理,其中页面大小为4KB;对每个页面维护其状态信息(空闲、保留或提交)以及访问控制权限(可读、可写、可执行)等,并由虚拟内存管理单元统一管理内存页面的分配和回收;
3.3线程管理模块用于管理进程中的所有线程,包括在程序初始化时的主线程、执行过程中的线程建立和销毁;
3.4异常处理器接管在处理器发生异常时的操作***异常处理机制,在模拟器环境中运行程序的异常处理例程;
所述的操作***行为具体是指:进程初始化、内存管理、线程管理、异常处理等;
步骤四、对进程中的所有操作***API进行封装,并部分交由操作***直接执行,具体步骤包括:
4.1拦截所有模拟进程的API调用,对核心API(如内存分配APIVirtualAlloc())由模拟器直接模拟执行,其他API(如网络APIsocket())发送至操作***执行;
4.2完成API调用时的参数转换,对其中的指针类型参数进行模拟内存地址和真实地址的映射,对于复杂结构体和新分配的堆数据进行深度拷贝映射至模拟内存空间;
4.3API执行完毕后返回模拟器控制,清除堆栈并解析API返回结果;
所述的操作***API是指操作***提供给用户进程的应用程序接口,使用户程序能够利用操作***功能。
步骤五、为模拟执行过程中的动态运行时信息如指令流、数据里和控制流提供应用程序接口,使得分析程序能够利用这些信息进行程序分析,具体为:将模拟器的执行过程封装为事件,以事件处理的方式提供应用程序接口;主要包括指令执行事件、内存访问事件、操作***API调用事件、线程调度事件等等;针对curl.exe的执行流程,能够获取到其中的所有指令执行事件,包括寄存器和标志位改变等参数;能够获取诸如网络API调用事件,并能够从中解析网络数据;同时能够重建程序运行时环境用于描述程序行为等。

Claims (5)

1.一种基于进程模拟的二进制程序分析***,其特征在于,包括:模拟器引擎模块、内存管理模块、进程管理模块、***调用接口、线程管理模块、中央处理模块和提供应用程序接口的分析组件接口,其中:模拟器引擎模块分别连接内存管理模块、进程管理模块、***调用接口和分析组件接口,分别传输运行状态信息和运行指令、进程管理和线程调度信息、***API调用数据、调试信息和分析组件事件,控制、协调各个模块并降低不同模块之间的耦合度;进程管理模块分别与中央处理模块、内存管理模块和***调用接口相连,分别传输处理器调度信息和运行状态信息、内存管理数据以及***调用参数转换信息及封装信息,线程管理模块分别与进程管理模块、内存管理模块和中央处理模块相连,分别传输线程运行状态及调度信息、线程内存数据访问以及处理器运行状态;
所述的模拟器引擎模块为各个组件提供统一的协调控制,并驱动各个组件运行完成被模拟进程的加载、初始化、运行和清除,该模拟器引擎模块包括:驱动单元、操作***挂钩单元和调试单元,其中:驱动单元与内存管理模块和进程管理模块相连,接收运行状态信息,发送运行指令;操作***挂钩单元与进程管理模块相连,接收进程管理模块的***API调用并传递给底层操作***,返回API调用结果;调试单元连接***调用接口和分析组件接口进行应用程序调试;
所述的内存管理模块包括:虚拟内存管理单元、堆管理单元和栈管理单元,其中:虚拟内存管理单元向线程管理模块传输内存访问数据,并与模拟器引擎模块的驱动单元相连以传输运行状态信息;堆管理单元从进程管理模块接收堆管理指令,完成进程中堆内存的管理;栈管理单元从线程管理模块接收线程运行状态,完成所有线程中栈内存的管理;
所述的虚拟内存管理单元采用分页方案对4GB虚拟内存进行管理;同时模拟Windows的虚拟内存管理行为,完成操作***级别的内存分配、回收及访问权限控制;
所述的堆管理单元和栈管理单元分别传输的进程中堆的管理信息、进程中各线程栈内存的管理,全局虚拟内存页分配与回收;
所述的进程中堆的管理信息包括:堆的建立销毁和内存分配;堆内存权限设置;堆容量调整与重分配;
所述的进程管理模块包括:线程调度管理单元、状态驱动单元和***API封装单元,其中:线程调度管理单元与中央处理模块相连接收进程中所有线程的调度信息,完成线程的调度以及创建和销毁;状态驱动单元与模拟器引擎模块相连,接收模拟器引擎模块的运行指令,完成主线程及其他线程的运行驱动并传输运行状态信息;***API封装单元与***调用接口相连接收线程管理模块的***API调用,封装参数并传输至模拟器引擎模块进行调用;
所述的进程管理模块用于对进程的完整执行流程进行驱动;维护该进程所包含的所有线程及其调度;进程中***句柄维护及内存地址分配;以及进程PEB数据结构的创建及维护;
所述的线程管理模块包括:环境信息模拟单元、驱动线程单元和执行单元,其中:环境信息模拟单元与进程管理单元相连,接收线程的运行时状态信息并建立模拟运行时环境供线程使用;驱动线程单元与进程管理单元相连,接收线程运行指令并传输线程运行状态;执行单元与中央处理模块的线程状态单元相连用于完成处理器指令循环并在结束时终止线程;
所述的环境信息模拟模块建立的供线程使用的模拟运行时环境包括:入口点、参数、标志位、堆栈地址和大小及TEB;
所述的线程管理模块维护模拟进程中单个线程的环境信息,并驱动线程从入口点开始的执行过程,同时判断终止条件并结束线程;同时用于由该线程动态加载的其他模块的载入和初始化;
所述的中央处理模块内置有分别与进程管理模块和线程管理模块相连的寄存器和状态单元且分别传输处理器调度信息和线程运行状态及调度信息;
所述的传输处理器调度信息和线程运行状态及调度信息包括:处理器标志位、运行状态信息;并对x86指令集、x87FPU指令集、MMX指令集和SSE指令集提供了解释模拟函数,从而实现完整处理器功能的模拟;
所述的中央处理模块上设有异常管理器,用于传递处理器异常信息及异常处理结果,该异常管理器构造异常的环境信息并执行异常处理函数;
所述的分析组件接口为***提供API接口,使得分析人员能够很容易地编写分析组件,完成自动化程序分析;
所述的模拟器引擎模块分别连接加载器、反汇编引擎和与附加的调试组件相连、用于进行应用程序调试的调试接口,其中:加载器解析待分析进程的可执行PE文件并将解析结果通过模拟器引擎模块加载至内存管理模块,反汇编引擎对单条x86指令进行反汇编,解析出指令的操作码、源操作数、目的操作数信息;调试接口用于传递调试信息,可进行应用程序及模拟器自身的调试;
所述的待分析进程的可执行PE文件是指:Windows中的可执行程序以PE格式存在,模拟器加载并解析PE文件使其能够被模拟执行。
2.一种基于权利要求1所述***的进程优化方法,其特征在于,包括以下步骤:
步骤一、对待分析进程进行轻量级x86指令集模拟,即以程序运行效率损失在两个数量级以内的前提下进行x86指令集的模拟处理和虚拟内存环境;
步骤二、模拟若干操作***行为保证待分析进程运行在可控的环境中;
步骤三、对进程中的操作***API调用进行封装,交由操作***直接执行;
步骤四、为模拟执行过程中的动态运行时信息提供应用程序接口,并将模拟器各组件的执行过程封装为事件,以事件处理的方式提供应用程序接口,最终使得分析程序能够利用这些信息进行程序优化。
3.根据权利要求2所述的方法,其特征是,所述的步骤一具体包括:
步骤1.1)使用启发式递归反汇编算法对于每条处理器指令提供静态的反汇编信息;
1.1.1针对PE文件中的各条指令进行以下步骤的判断;
1.1.2定位入口点指令E,当该指令E为有效指令则对其进行反汇编处理后执行步骤1.1.3,否则跳过该条指令并重新执行步骤1.1.2;
1.1.3当反汇编处理后的指令E为跳转指令,则对指令E的跳转目标进行反汇编处理;
1.1.4在指令E的尾部添加该指令的长度信息并返回步骤1.1.2处理下一条指令,直至完成所有指令的处理后返回反汇编处理得到的指令集合S;
步骤1.2)利用反汇编信息模拟各条指令的执行流程,包括寄存器、内存数据以及标志位的值;
步骤1.3)提取内存访问数据、寄存器值变化信息用于程序分析。
4.根据权利要求2所述的方法,其特征是,所述的步骤二具体包括:
步骤2.1)进程初始化阶段对被模拟的程序进行加载和初始化,确定进程中各模块中各段的内存分布情况,并确定入口点以及终止条件;
步骤2.2)内存管理使用分页式的内存管理机制,包括:以页为单位的虚拟内存分配、回收和访问权限控制;
步骤2.3)线程管理模块用于维护多线程程序中的线程建立、销毁以及线程调度,使多线程程序在共享内存的模型下能够被正常执行;
步骤2.4)异常处理用于在处理器发生异常时的操作***异常处理机制,使程序的异常处理例程能够运行在模拟环境中。
5.根据权利要求2所述的方法,其特征是,所述的步骤三具体为:
步骤3.1)拦截所有模拟进程的API调用,核心API由模拟器引擎模块直接模拟执行,其他API发送至操作***执行;
步骤3.2)完成API调用时的参数转换,包括:模拟内存地址和真实地址的映射;
步骤3.3)操作***在API执行完毕后返回模拟器引擎模块,处理执行结果。
CN201310426028.7A 2013-08-20 2013-09-18 基于进程模拟的二进制程序分析*** Active CN103440457B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310426028.7A CN103440457B (zh) 2013-08-20 2013-09-18 基于进程模拟的二进制程序分析***

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201310364984 2013-08-20
CN201310364984.7 2013-08-20
CN201310426028.7A CN103440457B (zh) 2013-08-20 2013-09-18 基于进程模拟的二进制程序分析***

Publications (2)

Publication Number Publication Date
CN103440457A CN103440457A (zh) 2013-12-11
CN103440457B true CN103440457B (zh) 2015-12-09

Family

ID=49694150

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310426028.7A Active CN103440457B (zh) 2013-08-20 2013-09-18 基于进程模拟的二进制程序分析***

Country Status (1)

Country Link
CN (1) CN103440457B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103886251B (zh) * 2014-04-08 2017-10-24 北京奇虎科技有限公司 ***加固的方法及装置
US9509708B2 (en) * 2014-12-02 2016-11-29 Wontok Inc. Security information and event management
SG10201500921QA (en) * 2015-02-06 2016-09-29 Huawei Internat Pte Ltd Method for obfuscation of code using return oriented programming
CN105094825B (zh) * 2015-07-21 2018-11-06 中国科学院信息工程研究所 一种内存变量分布动态发现方法
US9753745B1 (en) * 2016-08-17 2017-09-05 TCL Research America Inc. System and method for system function-flow optimization utilizing application programming interface (API) profiling
CN107239410B (zh) * 2017-05-31 2020-06-09 上海交通大学 基于动态插桩的大块内存分配***及方法
CN109614294A (zh) * 2018-12-14 2019-04-12 河南飙风信息科技有限公司 企业日志分析接入***
CN109783363A (zh) * 2018-12-14 2019-05-21 深圳壹账通智能科技有限公司 一种异常事件模拟方法和装置、以及计算机设备
CN113722020B (zh) * 2020-05-26 2024-06-11 腾讯科技(深圳)有限公司 接口调用方法、装置和计算机可读存储介质
CN113918950A (zh) * 2021-12-14 2022-01-11 成都无糖信息技术有限公司 一种基于模拟执行的沙箱构建方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154258A (zh) * 2007-08-14 2008-04-02 电子科技大学 恶意程序动态行为自动化分析***与方法
CN101814053A (zh) * 2010-03-29 2010-08-25 中国人民解放军信息工程大学 一种基于功能模型的二进制代码漏洞发现方法
CN102622536A (zh) * 2011-01-26 2012-08-01 中国科学院软件研究所 一种恶意代码捕获方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050108562A1 (en) * 2003-06-18 2005-05-19 Khazan Roger I. Technique for detecting executable malicious code using a combination of static and dynamic analyses

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101154258A (zh) * 2007-08-14 2008-04-02 电子科技大学 恶意程序动态行为自动化分析***与方法
CN101814053A (zh) * 2010-03-29 2010-08-25 中国人民解放军信息工程大学 一种基于功能模型的二进制代码漏洞发现方法
CN102622536A (zh) * 2011-01-26 2012-08-01 中国科学院软件研究所 一种恶意代码捕获方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Detecting and Analysis of Cryptographic Data Inside Software;Ruoxu Zhao;《14th International Conference, ISC 2011》;20111029;论文第252-263页 *
Detecting Encryption Functions via Process Emulation and IL-Based Program Analysis;Ruoxu Zhao;《14th International Conference, ICICS 2012》;20121031;论文第182-196页 *

Also Published As

Publication number Publication date
CN103440457A (zh) 2013-12-11

Similar Documents

Publication Publication Date Title
CN103440457B (zh) 基于进程模拟的二进制程序分析***
CN103064784B (zh) 面向Xen环境的运行时内存泄漏检测方法及其实现***
Lin et al. Benchmark dalvik and native code for android system
US9542559B2 (en) Detecting exploitable bugs in binary code
CN105808266B (zh) 代码运行方法及装置
CN104598809A (zh) 程序的监控方法及其防御方法以及相关装置
CN104205064A (zh) 将程序事件记录事件向运行时间检测事件的变换
CN104364769B (zh) 处理器特性的运行时间检测监控
CN102955737B (zh) 异构处理器体系的程序调试方法和***
CN102147763B (zh) 一种网络日志的记录方法、***及计算机
CN103389939B (zh) 一种针对堆可控分配漏洞的检测方法及***
CN104169889A (zh) 在事务执行模式中的运行时间检测采样
US8875114B2 (en) Employing identifiers provided by an operating system of a processing environment to optimize the processing environment
CN104380264A (zh) 运行时间检测报告
KR20120037893A (ko) 2 패스 자동화된 애플리케이션 인스트루먼테이션
CN103631712B (zh) 一种基于内存管理的模式化软件关键行为跟踪方法
CN104704474A (zh) 用于管理的运行时间的基于硬件的运行时间检测设施
CN104636259A (zh) 一种基于运行期动态跟踪的函数执行超时与死锁检测方法
CN101446918A (zh) 一种实现用户态调试器调试单个函数的方法及***
KR20130031860A (ko) 시스템 테스트 방법
CN106919398A (zh) 一种软件发布方法及装置
CN104462943A (zh) 业务***中非侵入式性能监控装置和方法
CN105094973A (zh) 基于敏感指令替换的ada程序分区运行支持***
CN104169887A (zh) 通过指令操作码的运行时间检测间接采样
CN107368739B (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

Effective date of registration: 20190327

Address after: Room 105G, No. 199 GuoShoujing Road (Biological and Medical Innovation Building), Pudong New Area Free Trade Pilot Area, Shanghai, 201203

Patentee after: Shanghai Jiaotong University Intellectual Property Management Co., Ltd.

Address before: 200240 No. 800, Dongchuan Road, Shanghai, Minhang District

Patentee before: Shanghai Jiao Tong University

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200113

Address after: 201601 Shanghai city Songjiang District Sijing Town Cultural Road No. 298

Patentee after: Zhixun password (Shanghai) Testing Technology Co., Ltd

Address before: Room 105G, No. 199 GuoShoujing Road (Biological and Medical Innovation Building), Pudong New Area Free Trade Pilot Area, Shanghai, 201203

Patentee before: Shanghai Jiaotong University Intellectual Property Management Co., Ltd.

TR01 Transfer of patent right