调试子进程的方法

调试子进程的方法

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

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

WriteProcessMemory
ResumeThread

方法1

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

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

方法2

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

情况2:直接创建子进程

相关API:

CreateProcessA/W

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


2020/10/24

posted @   rvy  阅读(193)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示