傀儡进程原理及调试

傀儡进程创建过程:

(1) CreateProcess一个进程,并挂起,即向dwCreationFlags 参数传入CREATE_SUSPENDED;

(2) GetThreadContext获取挂起进程CONTEXT,其中,EAX为进程入口点地址,EBX指向进程PEB;

(3) ZwUnmapViewOfSection卸载挂起进程内存空间数据;

(4) VirtualAlloc分配内存空间;

(5) WriteProcessMemory将恶意代码写入分配的内存;

(6) SetThreadContext设置挂起进程状态;

(6) ResumeThread唤醒进程运行。

傀儡进程是恶意软件隐藏自身代码的常用方式,在调式过程中,若遇到傀儡进程,需要将创建的子进程数据从内存中dump出来,作为PE文件单独调试,dump的时机为ResumeThead调用之前,此时傀儡进程内存数据已经完全写入,进程还未正式开始运行。

若dump后文件无法运行,OD加载失败,则需要做如下修复:

(1) FileAlignment值修改为SectionAlignment值;

(2) 所有section的Raw Address值修改为Virtual Address.


参考:

http://www.programlife.NET/puppet-process-memory-dump.html

你可能感兴趣的:(OD)