【太多事情要做了,这部分难度又很大,先写一下大体框架,到时候具体函数逆向分析过程给写出来】
0. 直接创建被调试程序与附加调试程序有什么区别吗?
答:调用的函数不相同。
1. 调试程序如何与被调试程序建立连接的?
答:两者连接思路很简单,通过在内核层创建一个 DEBUG_OBJECT 对象来建立链接。
2. 调试器如何与 DEBUG_OBJECT 来建立链接?
答:通过调用一个 DbgUiConnectToDbg函数,在函数内首先调用 _ZwCreateDebugObject内核函数来创建一个DEBUG_OBJECT对象,并返回一个三环的句柄。
之后再将该句柄保存在调试器TEB(fs):F24h处。
3. 被调试程序如何
答:首先调试器获取到其被调试程序的PID与DEBUG_OBJECT的三环句柄,其传入到内核中,由NTDebugActiveProcess传入到被调试进程的 _EPROCESS.DebugPort中。
这样就实现了 DEBUG_OBJECT 与 被调试进程的联系。