调试对象的构建

 Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

调试对象的构建

一、从感性角度来理解调试器与被调试程序建立的连接

   1)调试程序与被调试程序通过什么来建立连接的呢?

  答:DEBUG_OBJECT。

  2)这 DEBUG_OBJECT 是什么呢?

  答:可以认为其是两个程序之间的中转站,它不是调试器,也不是被调试程序的内核对象。

    刚开始学习时,老搞不懂 DEBUG_OBJECT 到底是调试器对象还是被调试程序对象。

    但现在再来看,其根本不是同一类对象,前面那个是进程对象,而DEBUG_OBJECT是调试对象。

    当被调试程序出现异常时,其被调试程序不会发往调试器,而是发往调试对象DEBUG_OBJECT,由它负责代为发送到调试器来进行处理。

 

  

二、调试的构建

  1)如何构建调试程序与被调试程序的呢?

  答:分为两种情况。

    1》创建调试进程,CreateProcess中修改Flag标志位。 一个简单的创建被调试进程的案例

    2》附加的形式,使用 DebugActiveProcess函数。

三、DebugActiveProcess函数的逆向分析

  (这部分一共有六七个函数,太庞大了,我就直接贴出问题吧)

  1. 你对调试程序与被调试程序的链接存在哪些误区之前?
 
  2. 查看 _DbgUiConnectToDbg(ntdll.dll) 反汇编代码。
     1)指出哪个部分是创建 DEBUG_OBJECT 对象。
     2)指出哪个部分是将该 DEBUG_OBJECT 对象放入 TEB+0xF24h 处的。
 
  3. 搜索 WRK,来查找 DEBUG_OBJECT 的结构体的结构,并认真阅读里面的内容。
 
  4. 查看 _DbgUiDebugActiveProcess(ntdll.dll) 反汇编代码
      1)指出哪一部分是将 DEBUG_OBJECT 与 被调试程序建立联系。
      2)指出哪一部分是下系统断点。
 
  5. 查看 _NtDebugActiveProcess(ntoskrnl.exe) 反汇编代码
      1)指出哪一部分是检测自身(自己不能调试自己)。
      2)指出哪一部分是检测被调试程序是否是系统进程。
      3)指出哪一部分是将被 DEBUG_OBJECT 与 被调试程序建立联系
     
  6.查看 DbgkpSetProcessDebugObject(ntoskernl.exe) 反汇编代码
     快速找出哪一部分是 将DEBUG_OBJECT 填入 EPROCESS.DebugPort中。

原文地址:https://www.cnblogs.com/onetrainee/p/11891614.html