首页
社区
课程
招聘
1
[原创]从3环调试器工作流程的实现看反调试
发表于: 2018-4-3 14:56 10097

[原创]从3环调试器工作流程的实现看反调试

2018-4-3 14:56
10097

     今天是我在15pb最后一天的课程,明天火车就要离开北京南下到广东去求职了。在这里祝愿20、21期的伙伴有一个好的前程,也祝愿15pb各位老师身体健康,事业红火。
    本文不会讲异常分发流程,因为异常分发流程我想分为两篇文章来写,链接如下:
        1. 从异常分发流程的实现看反用户调试器
        2. 从异常分发流程的实现看反双机调试【有码】
    由于本人水平有限,错误之处难免,请大神们不吝指正哈!



   

    1.  以调试方式或者附加的方式启动程序,对应的API分别是:CreateProcess和DebugActiveProcess

    2.  WaitForDebugEvent以等待调试事件的到来

    3. DispatchEvent,分发调试事件,这里面有各种handle



        以调试方式启动进程在(3环):

       

        具体分析DbgUiConnectToDbg:
           

            总结下:

                1.       创建一个一个调试内核对象,通过ZwCreateDebugObject

                2.       放到主动调试进程的teb中,这个偏移是f24

        具体分析下创建调试对象(0环):

       

       

       把上面创建的调试对象,填充到被调试进程的EPROCESS的DebugPort字段(0环):

     


        直接贴出以调试方式打开进程:

       

        因为DbgUiConnectToDbg已经在上面分析过直接分析DbgUiDebugActiveProcess:

       

         总结:

               1. NtDebugActiveProcess,根据Teb中F24中中存放的句柄,找到调试对象,然后发送假的进程创建消息(因为这里是attach的进程,进程之前已经创建 了,所以这里发送的是假的)

               2.DbgUiIssueRemoteBreakin,在被调试进程中创建一个线程,然后在线程中触发int3断点,这个也是附加调试调试器能段下程序的原因

       

        NtDebugActiveProcess的函数简单分析:

       

       

        总结:

                1.       DbgkpPostFakeProcessCreateMessages,主要发送进程创建、线程创建、模块加载的伪造消息

                2.       DbgkpSetProcessDebugObject,主要任务设置事件,以便调试线程从阻塞中返回获取调试信息


       

       DbgUiIssueRemoteBreakin的函数的详细分析:

      

      

     总结:

             1.       在被调试线程中创建一个远程线程,这个远程线程函数DbgUiRiRemoteBreakin

             2.       这个函数主要设置一个int3断点,以便产生int3断点


        

         调用了DbgUIWaitStateChange等待调试对象被设置:

        

        直接跳到内核去看,可以看到是直接等待DebugObject->EventsPresent 这个内核事件被触发

       

       获取具体的调试信息DbgUiConvertStateChangeStructure这个结构体为PDEBUG_EVENT:

      

      一大堆的switchcase匹配,各种调试事件,主要的任务就是填充WaitForDebugEvent中的第二个参数(LPDEBUG_EVENT)


[注意]看雪招聘,专注安全领域的专业人才平台!

最后于 2018-4-7 12:07 被又出bug了编辑 ,原因:
收藏
免费 1
支持
分享
赞赏记录
参与人
雪币
留言
时间
PLEBFE
为你点赞~
2023-2-6 03:36
最新回复 (7)
雪    币: 58
活跃值: (1275)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
可以
2018-4-3 16:38
0
雪    币: 105
活跃值: (2178)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
yooooooooo!少年郎~年郎~郎~ang~ng~g~
2018-4-3 16:43
0
雪    币: 775
活跃值: (2342)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
不错!感谢分享  mark了
2018-4-3 19:06
0
雪    币: 861
活跃值: (683)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
5
快点更新别的
2018-4-3 20:29
0
雪    币: 9
活跃值: (230)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
谢谢分享
2018-6-7 11:57
0
雪    币: 697
活跃值: (60)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
MARK
2018-12-5 15:51
0
雪    币: 5
活跃值: (4201)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
凄凄切切前
2019-3-7 14:14
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册