-
-
[原创]从异常分发流程的实现看反用户调试器
-
发表于:
2018-4-5 22:58
11092
-
本文是对从3环调试器工作流程的实现看反调试 的一个补充和扩展,
主要从异常分发的流程的实现来看怎么反调试。
后面还有一篇链接:[原创]从异常分发流程的实现看反双机调试【有码】
后面顺变会附带上写满注释的wrk代码,方便大家对照着看。
由于本人水平有限,错误之处难免,请大神们不吝指正哈!
//////////////////////////////////////////////////正文/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
说明:
1. 从tss段中取出对应权限的esp
2. 把用户空间的ss寄存器压入HardwareSegss
3. 把用户空间的esp寄存器压入HardwareEsp
4. 把标志寄存器压入到EFLAGS
5. 把用户空间的cs寄存器压入到SegCs中
6. 把用户空间的eip压入到Eip中
说明:
1. V8 6Gs、V86Fs、V86Ds、V86Es,这些寄存器现在仅仅作为保留,不必研究
2. HardwareSegSs、HardwareEsp、Eflags、SegCs、Eip,这些在中断的时候cpu会帮我保存
3. 其他的寄存器操作系统在中断例程保存
说明:
1. 在学习阶段只需要关注ExceptionCode和ExceptionAddress即可,其他的参数如果不写调试器暂时用不到
说明:
1. 从上图可以看到在CommonDispatchException中被填充
2. 但是我们也可以看到我们分析的重点会在KiDispatchException中,是的我们的分析的重点就是他,但是分析它之前我们得做一些准备工作
这个问题只能贴代码了,就贴CommonDispatchException代码,这块的代码已经有很详细的注释了,等会全部的代码放到附件中提供下载
1. 后面我会把详细注释过的wrk的源代码作为附录,大家可以对照注释去看异常分发的源代码
2. 根据我的经验,阻碍看源代码就是对这些数据结构不了解,特别是TrapFrame、异常时候的堆栈、在异常中怎么返回这类问题
1. 如果你看到这张图不想看了,你的感觉是对的,我第一次看到这张图也是一脸懵逼,感觉好复杂啊,幸好我们今天仅仅只学习其中的一块,就是图的左半部分
2. 如果你看到这里有什么第一次、第二次XX,先不用纠结这个问题,我们只讨论第一次的话题,因为男人的第一次是难以忘怀的,不对是第一次分发才和3环调试器有密切关系,第二次分发以后专门开个帖子对着源代码讲下
3. 忽略图中的内核调试器
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-4-7 12:12
被又出bug了编辑
,原因: