调试子进程的方法

调试子进程的方法

情况1:恶意程序注入进程数据并恢复线程

被注入的进程可能是已经存在的,也可能是自己创建的
相关API:

WriteProcessMemory
ResumeThread

方法1

为了从入口点开始调试打开的子进程,逆向分析人员可以在WriteProcessMemory()中设置断点,当包含入口点的节被写入子进程的时候,将入口点代码补丁为“跳往自身”指令(0xEB0xFE)。当子进程的主线程被恢复,子进程将在入口点进入一个死循环。这时逆向分析人员就可以附加一个调试器到子进程,恢复被修改的指令,继续正常的调试。

来自 脱壳的艺术 文档,缺点就是有可能卡死

方法2

在子进程的主线程被恢复之前,新打开一个调试器附加到子进程,设置相应的内存执行断点,然后在原调试器将子进程的主线程恢复,这样子进程会触发内存执行断点,就可以在新调试器里继续调试了。建议使用这种方法。

情况2:直接创建子进程

相关API:

CreateProcessA/W

如果和父进程没关系,直接去调试子程序就好了;
如果有不可分割的关系,考虑使用镜像劫持的方法,不行可以用改文件入口点为死循环的方法。


2020/10/24

posted @ 2022-10-08 08:21  rvy  阅读(165)  评论(0编辑  收藏  举报