首页
社区
课程
招聘
[原创]从异常分发流程的实现看反双机调试【有码】
发表于: 2018-4-7 12:01 9432

[原创]从异常分发流程的实现看反双机调试【有码】

2018-4-7 12:01
9432

     本篇是从异常分发流程的实现看反用户调试器从3环调试器工作流程的实现看反调试 的后续篇。
    由于本人水平有限,错误之处难免,请大神们不吝指正哈!


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>正文部分>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

   

    说明:

        1.       不管用户层还是内核层的异常,都会在CommonDispatchException填充异常结构体

        2.       这篇文章的主要任务就是研究内核调试器的工作流程,根据流程找到这么防范我们的程序不被内核调试/双机调试

       

   

    说明:

        1.       在KiDispatchException中,如果存在内核调试器,kdpTrap会被赋值给KiDebugRoutine

        2.       KdpTrap是实际负责内核调试相关业务的函数,里面有大量的switchcase,对各种异常进行处理

        3.       KdEnterDebugger会获取一个自旋转锁,但是获取的方式的异步的,我们不能直接卡着调试器,但是可以对获取自旋锁做钩子,因为参数是固定的:DdpDebuggerLock,很好判断

        4.       KdpSendWaitContinue,主要调用KdpSendPacket和KdpReceivePack和winddbg进行交互

   

     

     我们不能直接卡着调试器,但是可以hookKitryToAcquireSpinLock,判断这个全局变量,如果是就直接蓝屏

   

    

   

     等待windbg的输入

    

    

     发送数据到windbg:

    


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (4)
雪    币: 10
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
先顶一波。
2018-4-7 20:25
0
雪    币: 10
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看了一些当年过TesSafe就是这原理,楼主从源码深度解析,学习了。
2018-4-7 20:50
0
雪    币: 6459
活跃值: (2347)
能力值: ( LV12,RANK:320 )
在线值:
发帖
回帖
粉丝
4
好文章,顶一下!
2018-5-8 14:29
0
雪    币:
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
 mark
2019-5-27 12:36
0
游客
登录 | 注册 方可回帖
返回
//