zoukankan      html  css  js  c++  java
  • 调试对象的构建

     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中。

  • 相关阅读:
    ViewModel和LiveData问题思考与解答
    vps_centos_7_系统环境常规配置备忘
    JVM内存管理&GC
    sping注解
    ibatis order by 防止sql注入
    好用的绿色工具(mss2sql,jd-gui)
    mysql优化
    Spring事务
    好文分享_java堆栈的区别
    Linux usual cmd
  • 原文地址:https://www.cnblogs.com/onetrainee/p/11891614.html
Copyright © 2011-2022 走看看