-
-
[原创]从异常分发流程的实现看反双机调试【有码】
-
发表于:
2018-4-7 12:01
9433
-
本篇是从异常分发流程的实现看反用户调试器和从3环调试器工作流程的实现看反调试 的后续篇。
由于本人水平有限,错误之处难免,请大神们不吝指正哈!
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>正文部分>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
说明:
1. 不管用户层还是内核层的异常,都会在CommonDispatchException填充异常结构体
2. 这篇文章的主要任务就是研究内核调试器的工作流程,根据流程找到这么防范我们的程序不被内核调试/双机调试
说明:
1. 在KiDispatchException中,如果存在内核调试器,kdpTrap会被赋值给KiDebugRoutine
2. KdpTrap是实际负责内核调试相关业务的函数,里面有大量的switchcase,对各种异常进行处理
3. KdEnterDebugger会获取一个自旋转锁,但是获取的方式的异步的,我们不能直接卡着调试器,但是可以对获取自旋锁做钩子,因为参数是固定的:DdpDebuggerLock,很好判断
4. KdpSendWaitContinue,主要调用KdpSendPacket和KdpReceivePack和winddbg进行交互
我们不能直接卡着调试器,但是可以hookKitryToAcquireSpinLock,判断这个全局变量,如果是就直接蓝屏
等待windbg的输入
发送数据到windbg:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!