调试子进程的方法
调试子进程的方法
情况1:恶意程序注入进程数据并恢复线程
被注入的进程可能是已经存在的,也可能是自己创建的
相关API:
WriteProcessMemory
ResumeThread
方法1
为了从入口点开始调试打开的子进程,逆向分析人员可以在WriteProcessMemory()中设置断点,当包含入口点的节被写入子进程的时候,将入口点代码补丁为“跳往自身”指令(0xEB0xFE)。当子进程的主线程被恢复,子进程将在入口点进入一个死循环。这时逆向分析人员就可以附加一个调试器到子进程,恢复被修改的指令,继续正常的调试。
来自 脱壳的艺术 文档,缺点就是有可能卡死
方法2
在子进程的主线程被恢复之前,新打开一个调试器附加到子进程,设置相应的内存执行断点,然后在原调试器将子进程的主线程恢复,这样子进程会触发内存执行断点,就可以在新调试器里继续调试了。建议使用这种方法。
情况2:直接创建子进程
相关API:
CreateProcessA/W
如果和父进程没关系,直接去调试子程序就好了;
如果有不可分割的关系,考虑使用镜像劫持的方法,不行可以用改文件入口点为死循环的方法。
2020/10/24
有些东西,分享就好