基于进程模拟的二进制程序分析系统的制作方法

文档序号:6512110阅读:219来源:国知局
基于进程模拟的二进制程序分析系统的制作方法
【专利摘要】一种电子数据监控【技术领域】的基于进程模拟的二进制程序分析系统,包括:模拟器引擎模块、内存管理模块、进程管理模块、系统调用接口、线程管理模块、中央处理模块和提供应用程序接口的分析组件接口,其中:模拟器引擎模块分别连接内存管理模块、进程管理模块、系统调用接口和分析组件接口,进程管理模块分别与内存管理模块、中央处理模块和系统调用接口相连,线程管理模块分别与内存管理模块、进程管理模块和中央处理模块相连;本发明不依赖于对程序的静态逆向分析,而采用完全动态分析的方法,能够避免大部分程序保护技术造成的影响。
【专利说明】基于进程模拟的二进制程序分析系统
【技术领域】
[0001]本发明涉及的是一种电子数据监控【技术领域】的系统,具体是一种基于进程模拟的二进制程序分析系统。
【背景技术】
[0002]在计算机安全领域中,对各类软件尤其是恶意程序的逆向分析是程序安全分析的基础工作。由于缺少了相关的语义信息,针对二进制程序的逆向分析往往十分困难,需要消耗大量的人力物力。因此,为了辅助分析人员进行逆向分析,相应的自动化程序分析方法和分析平台也应运而生。
[0003]为了实现自动化的程序分析,需要对程序运行时的指令流、控制流和数据流进行细粒度地监视,同时需要获取程序运行中的处理器、内存等相关信息。目前对程序运行时信息的获取主要采用进程调试、全系统模拟以及动态二进制插桩等技术来实现。但是,目前的分析技术均存在若干问题,其中进程调试采用操作系统的调试API实现,对目前恶意程序常用的反调试手段往往无能为力;全系统模拟技术对整个计算机平台进行模拟,与分析无关的大量指令如操作系统内核占用了大部分的模拟时间,导致分析效率很低;而动态二进制插桩由于改变了程序的指令流和控制流,对于一些经过保护的程序如被加壳或混淆后的程序往往无法进行分析。因此,目前的分析方案在面对当前日益复杂的程序时常常无法满足分析要求。
[0004]经过对现有技术的检索发现,中国专利文献号CN101814053,
【公开日】2010_08_25,记载了一种基于功能模型的二进制代码漏洞发现方法,首先基于静态逆向分析系统建立代码功能模型,并基于所述代码功能模型构造初始测试用例集;其次,通过动态测试与回放分析系统依据覆盖率控制和选路策略在动态测试平台上加载测试用例集,并采用动态路径约束优化和约束求解、基于代的路径遍历算法进行测试用例集的调整,以及根据回放分析进行异常的精细分析及漏洞定位;第三,静态逆向分析系统和动态测试与回放分析系统均将各自分析得到的程序属性存入功能模型中,并以功能模型中的程序属性来指导各自的分析测试工作。但该技术与本发明相比的缺陷及不足在于:第一,该技术依赖于静态逆向分析,而目前软件保护技术的广泛使用使得分析人员往往无法进行有效的静态分析,因此从目前的很多程序尤其是恶意程序中提取静态分析结果是比较困难的;第二,该技术的分析方法仅能对程序的异常运行情况加以检测并分析可能的漏洞,而无法检测程序的潜在恶意攻击行为,尤其是目前的各类攻击方法如ROP (Return-Oriented Programming)层出不穷,该技术无法对程序中存在的能够被这类攻击所利用的漏洞进行检测;第三,在目前各类动态代码执行被广泛使用的情况下,如插件(Plugin)、用户脚本(User Scripting)、即时编译(Just-1n-time Compilation)等等,该技术无法对这类动态生成或加载的代码进行有效分析,因此进一步限定了其分析范围。

【发明内容】
[0005]本发明针对现有技术存在的上述不足,提供一种基于进程模拟的二进制程序分析系统,针对现有技术的不足之处,从程序的底层即系统硬件结构和操作系统的级别对程序进行运行环境的模拟,不干涉程序的正常运行,而对程序的运行过程如数据流向等内容进行监控。本发明不依赖于对程序的静态逆向分析,而采用完全动态分析的方法,能够避免大部分程序保护技术造成的影响。通过对分析系统进行扩展并自定义攻击行为,本发明能够在攻击代码被执行前进行检测和拦截;并且通过引入动态污点分析等手段,能够对敏感数据流向进行分析和跟踪,避免造成数据和隐私的泄露。并且,本发明不依赖于程序的静态分析结果,能够对动态生成代码进行完整分析。
[0006]本发明是通过以下技术方案实现的,本发明包括:模拟器引擎模块、内存管理模块、进程管理模块、系统调用接口、线程管理模块、中央处理模块和提供应用程序接口的分析组件接口,其中:模拟器引擎模块分别连接内存管理模块、进程管理模块、系统调用接口和分析组件接口,分别传输运行状态信息和运行指令、进程管理和线程调度信息、系统API调用数据、调试信息和分析组件事件等,控制、协调各个模块并降低不同模块之间的耦合度;进程管理模块分别与中央处理模块、内存管理模块和系统调用接口相连,分别传输处理器调度信息和运行状态信息、内存管理数据以及系统调用参数转换及封装等信息,线程管理模块分别与进程管理模块、内存管理模块和中央处理模块相连,分别传输线程运行状态及调度信息、线程内存数据访问以及处理器运行状态;
[0007]所述的模拟器引擎模块为各个组件提供统一的协调控制,并驱动各个组件运行完成被模拟进程的加载、初始化、运行和清除,该模拟器引擎模块包括:驱动单元、操作系统挂钩单元和调试单元,其中:驱动单元与内存管理模块和进程管理模块相连,接收运行状态信息,发送运行指令;操作系统挂钩单元与进程管理模块相连,接收进程管理模块的系统API调用并传递给底层操作系统,返回API调用结果;调试单元连接系统调用接口和分析组件接口进行应用程序调试;
[0008]所述的内存管理模块包括:虚拟内存管理单元、堆管理单元和栈管理单元,其中:虚拟内存管理单元向线程管理模块传输内存访问数据,并与模拟器引擎模块的驱动单元相连以传输运行状态信息;堆管理单元从进程管理模块接收堆管理指令,完成进程中堆内存的管理;栈管理单元从线程管理模块接收线程运行状态,完成所有线程中栈内存的管理。
[0009]所述的虚拟内存管理单元采用分页方案对4GB虚拟内存进行管理;同时模拟Windows的虚拟内存管理行为,完成操作系统级别的内存分配、回收及访问权限控制。
[0010]所述的堆管理单元和栈管理单元分别传输的进程中堆的管理信息、进程中各线程栈内存的管理,全局虚拟内存页分配与回收等。
[0011]所述的进程中堆的管理信息包括:堆的建立销毁和内存分配;堆内存权限设置;堆容量调整与重分配等。
[0012]所述的进程管理模块包括:线程调度管理单元、状态驱动单元和系统API封装单元,其中:线程调度管理单元与中央处理模块相连接收进程中所有线程的调度信息,完成线程的调度以及创建和销毁;状态驱动单元与模拟器引擎模块相连,接收模拟器引擎模块的运行指令,完成主线程及其他线程的运行驱动并传输运行状态信息;系统API封装单元与系统调用接口相连接收线程管理模块的系统API调用,封装参数并传输至模拟器引擎模块进行调用。[0013]所述的进程管理模块用于对进程的完整执行流程进行驱动;维护该进程所包含的所有线程及其调度;进程中系统句柄(Handle)维护及内存地址分配;以及进程PEB(Process Environment Block)等数据结构的创建及维护。
[0014]所述的线程管理模块包括:环境信息模拟单元、驱动线程单元和执行单元,其中:环境信息模拟单元与进程管理单元相连,接收线程的运行时状态信息并建立模拟运行时环境供线程使用;驱动线程单元与进程管理单元相连,接收线程运行指令并传输线程运行状态;执行单元与中央处理模块的线程状态单元相连用于完成处理器指令循环并在结束时终止线程。
[0015]所述的环境信息模拟模块建立的供线程使用的模拟运行时环境包括:入口点、参数、标志位、堆栈地址和大小及TEB (Thread Environment Block);
[0016]所述的线程管理模块维护模拟进程中单个线程的环境信息,并驱动线程从入口点开始的执行过程,同时判断终止条件并结束线程;同时用于由该线程动态加载的其他模块(DLL)的载入和初始化;
[0017]所述的中央处理模块内置有分别与进程管理模块和线程管理模块相连的寄存器和状态单元且分别传输处理器调度信息和线程运行状态及调度信息。
[0018]所述的传输处理器调度信息和线程运行状态及调度信息包括:处理器标志位(eflags)、运行状态信息;并对x86指令集、x87FPU指令集、MMX指令集和SSE指令集提供了解释模拟函数,从而实现完整处理器功能的模拟。
[0019]所述的中央处理模块上设有异常管理器,用于传递处理器异常信息及异常处理结果,该异常管理器构造异常的环境信息并执行异常处理函数。
[0020]所述的分析组件接口为系统提供API接口,使得分析人员能够很容易地编写分析组件,完成自动化程序分析;
[0021]所述的模拟器引擎模块分别连接加载器、反汇编引擎和与附加的调试组件相连、用于进行应用程序调试的调试接口,其中:加载器解析待分析进程的可执行PE文件并将解析结果通过模拟器引擎模块加载至内存管理模块,反汇编引擎对单条x86指令进行反汇编,解析出指令的操作码、源操作数、目的操作数等信息;调试接口用于传递调试信息,可进行应用程序及模拟器自身的调试;
[0022]所述的待分析进程的可执行PE文件是指=Windows中的可执行程序以PE格式存在,模拟器加载并解析PE文件使其能够被模拟执行;
[0023]本发明涉及一种基于上述系统的进程优化方法,包括以下步骤:
[0024]步骤一、对待分析进程进行轻量级x86指令集模拟,即以程序运行效率损失在两个数量级以内的前提下进行x86指令集的模拟处理和虚拟内存环境,
[0025]所述的步骤一具体包括:
[0026]1.1使用启发式递归反汇编算法对于每条处理器指令提供静态的反汇编信息;
[0027]所述的启发式递归反汇编算法包括以下步骤:
[0028]1.1.1针对PE文件中的各条指令进行以下步骤的判断。
[0029]1.1.2定位入口点指令E,当该指令E为有效指令则对其进行反汇编处理后执行步骤1.1.3,否则跳过该条指令并重新执行步骤1.1.2。
[0030]1.1.3当反汇编处理后的指令E为跳转指令,则对指令E的跳转目标进行反汇编处理。
[0031]1.1.4在指令E的尾部添加该指令的长度信息并返回步骤1.1.2处理下一条指令,直至完成所有指令的处理后返回反汇编处理得到的指令集合S。
[0032]1.2利用反汇编信息模拟各条指令的执行流程,包括寄存器、内存数据以及标志位的值。
[0033]1.3提取内存访问数据、寄存器值变化信息用于程序分析。
[0034]所述的内存访问数据包括:内存地址和内存数据、寄存器值、标志位改变信息以及异常f目息。
[0035]步骤二、模拟若干操作系统行为保证待分析进程运行在可控的环境中,具体包括:
[0036]2.1进程初始化阶段对被模拟的程序进行加载和初始化,确定进程中各模块中各段(section)的内存分布情况,并确定入口点以及终止条件。
[0037]2.2内存管理使用分页式的内存管理机制,包括:以页为单位的虚拟内存分配、回收和访问权限控制。
[0038]2.3线程管理模块用于维护多线程程序中的线程建立、销毁以及线程调度,使多线程程序在共享内存的模型下能够被正常执行。
[0039]2.4异常处理用于在处理器发生异常时的操作系统异常处理机制,使程序的异常处理例程能够运行在模拟环境中。
[0040]步骤三、对进程中的操作系统API调用进行封装,交由操作系统直接执行;
[0041]所述的操作系统API是指:操作系统提供给用户进程的应用程序接口,使用户程序能够利用操作系统功能。
[0042]3.1拦截所有模拟进程的API调用,核心API由模拟器引擎模块直接模拟执行,其他API发送至操作系统执行;
[0043]所述的核心API包括:内存管理AP1、线程管理AP1、调试AP1、操作系统参数获取API 等。
[0044]3.2完成API调用时的参数转换,包括:模拟内存地址和真实地址的映射。
[0045]3.3操作系统在API执行完毕后返回模拟器引擎模块,处理执行结果。
[0046]步骤四、为模拟执行过程中的动态运行时信息提供应用程序接口,并将模拟器各组件的执行过程封装为事件,以事件处理的方式提供应用程序接口,最终使得分析程序能够利用这些信息进行程序优化。
[0047]所述的动态运行时信息包括:指令流、数据流和控制流。
[0048]所述的事件包括:指令执行事件、内存访问事件、操作系统API调用事件、线程调度事件。
技术效果
[0049]I)对被分析程序进行指令级别的模拟执行,使用轻量级x86指令集解释器来提供细粒度的运行时信息;
[0050]2)对待分析进程中与程序分析无关的内容,如系统调用的执行采用包装或模拟的方式,交由底层操作系统执行,保证分析效率;
[0051]3)模拟若干操作系统行为如内存管理、线程管理及异常处理等,保证被分析程序运行在可控的环境中;
[0052]4)为程序的自动化分析提供良好的接口,使得程序的模拟执行和分析能够同步高效进行。
[0053]与目前已有的分析方案相比,本发明几乎不受反调试手段的影响,同时不修改待分析进程的原始指令和数据,运行效率比全系统模拟提高了一至二个数量级,同时稳定性和兼容性较二进制插桩有了极大的提高。在该分析系统的基础上,能够高效进行程序的算法及协议分析、漏洞挖掘及检测、程序性能分析、内存调试、程序行为分析以及恶意程序检测等多种自动化分析手段,对程序安全分析提供了可靠的支持。
【专利附图】

【附图说明】
[0054]图1为本发明系统结构图;
[0055]图2为进程管理模块的结构示意图;
[0056]图3为线程管理模块的结构示意图;
[0057]图4为本发明运行流程图。
【具体实施方式】
[0058]下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
实施例1
[0059]以常用多线程网络通信程序curl, exe (http://curl, haxx.se)为例,说明具体的实施过程。
[0060]如图1所示,包括:模拟器引擎模块、内存管理模块、进程管理模块、系统调用接口、线程管理模块、中央处理模块和提供应用程序接口的分析组件接口,其中:模拟器引擎模块分别连接内存管理模块、进程管理模块、系统调用接口和分析组件接口,分别传输内存访问数据、线程调度和处理器访问数据、系统调用参数及其封装以及模拟器事件和环境信息,控制、协调各个模块并降低不同模块之间的耦合度;进程管理模块分别与内存管理模块、中央处理模块和系统调用接口相连,分别传输内存管理数据如内存分配回收、处理器调度信息以及系统调用参数转换及封装等信息,线程管理模块分别与内存管理模块、进程管理模块和中央处理模块相连,分别传输线程数据在内存中的分布情况、线程运行状态及调度信息、以及处理器运行状态;
[0061]所述的模拟器引擎模块包括:公用的系统接口,为各个组件提供统一的协调控制,并驱动各个组件运行完成被模拟进程的加载、初始化、运行和清除;
[0062]所述的内存管理模块分别与堆和栈相连,分别传输进程中堆的管理信息如堆的建立销毁和内存分配、进程中各线程栈内存的管理,内存管理模块包括:虚拟内存管理单元,采用分页方案对4GB虚拟内存进行管理;同时模拟Windows的虚拟内存管理行为,完成操作系统级别的内存分配、回收及访问权限控制;
[0063]内存管理模块:模拟Windows的分页内存管理机制,用于待分析进程的内存分配和回收以及权限管理,为系统的内存管理API提供底层的模拟实现,同时维护待分析进程的堆和栈;
[0064]所述的进程管理模块包括:用于对进程的完整执行流程进行驱动;维护该进程所包含的所有线程及其调度;进程中系统句柄(Handle)维护及内存地址分配;以及进程PEB(Process Environment Block)等数据结构的创建及维护;
[0065]进程管理模块:维护待分析进程相关的上下文信息,管理待分析进程的所有线程;
[0066]所述的线程管理模块包括:维护模拟进程中单个线程的环境信息,如入口点、参数、标志位、堆栈地址和大小及TEB等,并驱动线程从入口点开始的执行过程,同时判断终止条件并结束线程;同时用于由该线程动态加载的其他模块(DLL)的载入和初始化;
[0067]所述的中央处理模块包括:为完整的中央处理模块提供模拟环境、包括寄存器、处理器标志位(eflags)、运行状态信息等;并对x86指令集、x87FPU指令集、MMX指令集和SSE指令集提供了解释模拟函数,从而实现完整处理器功能的模拟;以及子模块异常管理器;其中异常管理器与处理器模块连接,传递处理器异常信息及异常处理结果;
[0068]线程管理模块和中央处理模块:为每个线程维护独立的中央处理模块环境,包括寄存器、处理器标志位及寄存器其它运行时数据,中央处理模块对待分析进程的各条指令进行模拟解释执行;
[0069]系统调用接口:接管待分析进程中的API调用,对核心API,如内存相关,采用模拟执行,其他API则交由操作系统直接运行,保证运行效率;
[0070]分析组件接口为系统提供API接口,使得分析人员能够很容易地编写分析组件,完成自动化程序分析;
[0071]所述的模拟器引擎模块分别连接加载器、反汇编引擎和与附加的调试组件相连、用于进行应用程序调试的调试接口,其中:加载器解析待分析进程的可执行PE文件并将解析结果通过模拟器引擎模块加载至内存管理模块,反汇编引擎对单条x86指令进行反汇编,解析出指令的操作码、源操作数、目的操作数等信息;调试接口用于传递调试信息,可进行应用程序及模拟器自身的调试;
[0072]所述的待分析进程的可执行PE文件是指=Windows中的可执行程序以PE格式存在,模拟器加载并解析PE文件使其能够被模拟执行;
实施例2
[0073]如图2所示,本发明所述系统运行时经历加载、初始化、运行分析、终止等过程。
[0074]步骤一、加载待分析进程的PE文件和依赖的动态链接库,建立完整的Windowsx86虚拟运行时环境;
[0075]所述的运行时环境包括线性内存地址空间、中央处理模块环境以及相关的操作系统功能;
[0076]步骤二、对待分析进程进行指令模拟执行,使用轻量级的x86指令集模拟器提供细粒度的运行时信息,并进行后续分析,具体步骤包括:
[0077]2.1使用启发式递归反汇编算法尝试反汇编所有指令;
[0078]2.2构造处理器模拟环境,利用反汇编信息精确模拟各条指令的执行流程;
[0079]2.3提取内存访问数据、寄存器值等信息用于程序分析;
[0080]所述的轻量级的x86指令集模拟器是指:高性能的、以低代价运行的x86指令集模拟器,能够在对程序正常执行不造成显著影响的情况下对x86指令集进行模拟执行;
[0081]所述的细粒度的划分具体是:精确到对操作系统可见的最细粒度,即指令、寄存器这一级别,而非诸如动态二进制插桩等方案常采用的基本块或函数这一级别;
[0082]所述的运行时信息具体是指:内存访问信息如内存地址和内存数据、寄存器值、标志位改变信息以及可能产生的异常信息等;
[0083]步骤三、模拟若干操作系统行为保证待分析进程运行在可控的环境中,具体步骤包括:
[0084]3.1加载curl, exe的程序主体和依赖的系统模块(DLL),使用地址空间随机化(ASLR)分配各组件的基地址,确定内存布局;同时确定程序入口点以及终止条件;
[0085]3.2对进程虚拟内存空间采用分页管理,其中页面大小为4KB ;对每个页面维护其状态信息(空闲、保留或提交)以及访问控制权限(可读、可写、可执行)等,并由虚拟内存管理单元统一管理内存页面的分配和回收;
[0086]3.3线程管理模块用于管理进程中的所有线程,包括在程序初始化时的主线程、执行过程中的线程建立和销毁;
[0087]3.4异常处理器接管在处理器发生异常时的操作系统异常处理机制,在模拟器环境中运行程序的异常处理例程;
[0088]所述的操作系统行为具体是指:进程初始化、内存管理、线程管理、异常处理等;
[0089]步骤四、对进程中的所有操作系统API进行封装,并部分交由操作系统直接执行,具体步骤包括:
[0090]4.1拦截所有模拟进程的API调用,对核心API(如内存分配API VirtualAlloc ())由模拟器直接模拟执行,其他API (如网络API socket ())发送至操作系统执行;
[0091]4.2完成API调用时的参数转换,对其中的指针类型参数进行模拟内存地址和真实地址的映射,对于复杂结构体和新分配的堆数据进行深度拷贝映射至模拟内存空间;
[0092]4.3API执行完毕后返回模拟器控制,清除堆栈并解析API返回结果;
[0093]所述的操作系统API是指操作系统提供给用户进程的应用程序接口,使用户程序能够利用操作系统功能。
[0094]步骤五、为模拟执行过程中的动态运行时信息如指令流、数据里和控制流提供应用程序接口,使得分析程序能够利用这些信息进行程序分析,具体为:将模拟器的执行过程封装为事件,以事件处理的方式提供应用程序接口 ;主要包括指令执行事件、内存访问事件、操作系统API调用事件、线程调度事件等等;针对curl, exe的执行流程,能够获取到其中的所有指令执行事件,包括寄存器和标志位改变等参数;能够获取诸如网络API调用事件,并能够从中解析网络数据;同时能够重建程序运行时环境用于描述程序行为等。
【权利要求】
1.一种基于进程模拟的二进制程序分析系统,其特征在于,包括:模拟器引擎模块、内存管理模块、进程管理模块、系统调用接口、线程管理模块、中央处理模块和提供应用程序接口的分析组件接口,其中:模拟器引擎模块分别连接内存管理模块、进程管理模块、系统调用接口和分析组件接口,分别传输运行状态信息和运行指令、进程管理和线程调度信息、系统API调用数据、调试信息和分析组件事件,控制、协调各个模块并降低不同模块之间的耦合度;进程管理模块分别与中央处理模块、内存管理模块和系统调用接口相连,分别传输处理器调度信息和运行状态信息、内存管理数据以及系统调用参数转换信息及封装信息,线程管理模块分别与进程管理模块、内存管理模块和中央处理模块相连,分别传输线程运行状态及调度信息、线程内存数据访问以及处理器运行状态。
2.根据权利要求1所述的系统,其特征是,所述的模拟器引擎模块包括:驱动单元、操作系统挂钩单元和调试单元,其中:驱动单元与内存管理模块和进程管理模块相连,接收运行状态信息,发送运行指令;操作系统挂钩单元与进程管理模块相连,接收进程管理模块的系统API调用并传递给底层操作系统,返回API调用结果;调试单元连接系统调用接口和分析组件接口进行应用程序调试。
3.根据权利要求1所述的系统,其特征是,所述的内存管理模块包括:虚拟内存管理单元、堆管理单元和栈管理单元,其中:虚拟内存管理单元向线程管理模块传输内存访问数据,并与模拟器引擎模块的驱动单元相连以传输运行状态信息;堆管理单元从进程管理模块接收堆管理指令,完成进程中堆内存的管理;栈管理单元从线程管理模块接收线程运行状态,完成所有线程中栈内存的管理。
4.根据权利要求1所述的系统,其特征是,所述的进程管理模块包括:线程调度管理单元、状态驱动单元和系统API封装单元,其中:线程调度管理单元与中央处理模块相连接收进程中所有线程的调度信息,完成线程的调度以及创建和销毁;状态驱动单元与模拟器引擎模块相连,接收模拟器 引擎模块的运行指令,完成主线程及其他线程的运行驱动并传输运行状态信息;系统API封装单元与系统调用接口相连接收线程管理模块的系统API调用,封装参数并传输至模拟器弓I擎模块进行调用。
5.根据权利要求1所述的系统,其特征是,所述的线程管理模块包括:环境信息模拟单元、驱动线程单元、执行单元,其中:环境信息模拟单元与进程管理单元相连,接收线程的运行时状态信息并建立模拟运行时环境供线程使用;驱动线程单元与进程管理单元相连,接收线程运行指令并传输线程运行状态;执行单元与中央处理模块的线程状态单元相连用于完成处理器指令循环并在结束时终止线程。
6.根据权利要求1-5任一项所述的系统,其特征是,所述的中央处理模块上设有异常管理器,用于传递处理器异常信息及异常处理结果,该异常管理器构造异常的环境信息并执行异常处理函数。
7.一种基于上述任一项权利要求所述系统的进程优化方法,其特征在于,包括以下步骤: 步骤一、对待分析进程进行轻量级x86指令集模拟,即以程序运行效率损失在两个数量级以内的前提下进行x86指令集的模拟处理和虚拟内存环境; 步骤二、模拟若干操作系统行为保证待分析进程运行在可控的环境中; 步骤三、对进程中的操作系统API调用进行封装,交由操作系统直接执行;步骤四、为模拟执行过程中的动态运行时信息提供应用程序接口,并将模拟器各组件的执行过程封装为事件,以事件处理的方式提供应用程序接口,最终使得分析程序能够利用这些信息进行程序优化。
8.根据权利要求7所述的方法,其特征是,所述的步骤一具体包括: 步骤1.D使用启发式递归反汇编算法对于每条处理器指令提供静态的反汇编信息; 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)提取内存访问数据、寄存器值变化信息用于程序分析。
9.根据权利要求7所述的方法,其特征是,所述的步骤二具体包括: 步骤2.1)进程初始化阶段对被模拟的程序进行加载和初始化,确定进程中各模块中各段的内存分布情况,并确定入口点以及终止条件; 步骤2.2)内存管理使用分页式的内存管理机制,包括:以页为单位的虚拟内存分配、回收和访问权限控制 ; 步骤2.3)线程管理模块用于维护多线程程序中的线程建立、销毁以及线程调度,使多线程程序在共享内存的模型下能够被正常执行; 步骤2.4)异常处理用于在处理器发生异常时的操作系统异常处理机制,使程序的异常处理例程能够运行在模拟环境中。
10.根据权利要求7所述的方法,其特征是,所述的步骤三具体为: 步骤3.1)拦截所有模拟进程的API调用,核心API由模拟器引擎模块直接模拟执行,其他API发送至操作系统执行; 步骤3.2)完成API调用时的参数转换,包括:模拟内存地址和真实地址的映射; 步骤3.3)操作系统在API执行完毕后返回模拟器引擎模块,处理执行结果。
【文档编号】G06F21/52GK103440457SQ201310426028
【公开日】2013年12月11日 申请日期:2013年9月18日 优先权日:2013年8月20日
【发明者】谷大武, 赵若旭, 刘慧 , 张媛媛, 李卷孺 申请人:上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1