PE映像
OS为程序开辟内存地址,然后将文件映射到该内存地址,并且将文件使用的导出函数也映射进去。此时映射在进程内存空间的文件区域称为PE映像。
PE映像切换
在应用时我们先以挂起模式运行某个进程(A.exe),然后将完全不同的PE文件(B.exe)的PE映像映射到A.exe进程空间,并在A.exe的内存空间中运行。
调试练习
这里我们准备了Fake.exe,Real.exe,DebugMe3.exe三个文件,Fake文件是在控制台输出字符串,Real文件一个GUI程序,也输出一个字符串。DebugMe3.exe文件是以第一个参数文件做“外壳”,第二个参数文件做“内核进程”运行。运行的结果就是我们在进程管理器看到是fake.exe在运行,实际却是执行的real.exe文件代码。效果图如下:
接下来对程序进行调试,进一步分析程序的执行方式。
我们先进入主函数
进入地址401063函数
我们可以看到这个函数是读取real.exe文件内容到内存。然后返回主函数,接下来就是创建进程函数。
调用CreateProcess()API创建fake.exe进程。进程处于挂起状态。所以可以自由操纵内存。
然后可以进入4010B2的函数。
可以看见函数内部运用了PE映像切换技术。
4010D1处函数将real.exe映射到fake.exe进程中。
最后调用ResumeThread()函数恢复运行fake.exe进程。