当前,网络空间如今在以高速的节奏发展壮大,几乎每天都有计算机被用于从事犯罪活动。随着计算机网络、硬件和软件的构成越来越复杂,加之其与传统证据的勘验、检查方法以及取证对象等的不同,也增加了将其用于犯罪活动的可能性与取证的难度。由于在软件测试中,黑盒测试方法无法获知源程序是否被篡改,犯罪分子有可能利用程序的封装性所造成的取证难度加大而隐藏了犯罪证据。逆向工程可从本质上分析程序代码结构以及程序的运行流程,从而得到犯罪分子的犯罪证据。1逆向工程简介计算机程序一般是用C、C++等高级语言编写后,由编译器编译成机器语言形式的目标文件后,再通过链接过程最终生成可执行的程序。逆向工程(ReverseEngineering)是将某封装好的可执行程序还原成高级语言、汇编语言或是二进制代码的一种技术。通常源程序与逆向分析后的结果存在不同,运行的结果虽然相同,但是代码会发生很大变化,这就需要分析侦查人员对软件测试、计算机低级语言甚至程序运行原理有着深刻的认识和理解。目前逆向工程常用的分析软件分为两大类:动态反汇编分析以及静态反汇编分析软件。在“动态分析”过程中,调试器加载程序,并以调试模式运行,分析者可以在程序的执行过程中获知程序运行的流程以及最终的结果。但是实际的分析中,很多情况并不能实际的运行目标程序,比如某一个无法单独运行的模块、恶意代码、硬件环境与程序不兼容而导致无法运行……而所谓的“静态分析”,是相对于“动态分析”而言的。调试工具Ollydbg具有动态分析的功能,但是其反汇编辅助分析功能有限,所以一般使用功能极为强大的反汇编静态分析工具IDAPro。2利用逆向技术分析计算机物证实例本文以某个已经捆绑了一个隐藏的未知程序的可执行程序为例,此已知的可执行程序为一个常见的应用程序,并无危害,但是其内部捆绑了一个未知的程序,普通的黑盒测试中是无法判断其危害性,进而也无法取得这种情况下的电子物证。下面通过逆向技术的分析,来判定这个未知程序的作用以及取得该电子物证。实验环境为Windows8.1下的VMWare虚拟机配置的WindowsXPSP3的操作系统环境。某未知程序,其运行后效果为系统提供的cmd.exe程序,但是由于其被附加了另一个未知程序,不能判定该程序类型、功能,所以我们利用互式反编译工具IDAPro来进行分析。图1为使用IDAPro打开该程序后的界面。图1使用IDAPro打开该程序后的界面从图1可以得出该文件是一个Win32PE文件。Win32PE(ProtableExecute)文件名称为可移植执行文件,日常所用的exe、com、sys等后缀名的文件都属于PE文件类型,该文件是windows系统上的程序文件,其有可能直接执行,也有可能以动态链接库(dll)的形式间接运行。我们在调试VC++开发的程序时,总是从main(或是WinMain)函数开始,实际上,在这两个函数被调用运行之前,已经有真正的入口函数被调用,通常入口函数是mainCRTStartup、wmainCRTStartup、WinMainCRTStartup以及wWinMainCRTStartup,具体情况和编译器的选项有关。用IDAPro的程序树视图(图2)可以看到,IDAPro已经把真正的入口函数部分隐藏,它会直接分析出WinMain函数所在位置并且直接显示出来,这对于分析人员进行逆向分析降低了一定的难度。图2IDAPro的程序树视图
在windows绝大部分的程序调用中,实际上程序调用时会释放到临时变量中,载入内存,然后再运行程序。本文所用的程序也属于这种情况,所以分析时从CreateFi