反调试&反反调试&OD插件的编写

[复制链接]

该用户从未签到

2380

主题

2433

帖子

9139

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9139
QQ
跳转到指定楼层
楼主
发表于 2022-6-4 17:04:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

想要查看内容赶紧注册登陆吧!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

windows异常分发回顾
异常的分发一共有多少轮?
一共有两轮。 KiDispatchExcption 函数的最后一个参数 FirstChance 表示当前是第几次进行异常的分发,另一个函数 RaiseException 最后一个参数也表示当前是第几次分发

通过什么可以区分当前所处的是 R0 还是 R3
在 windows 下,代码被分为了 R3 和 R0 权限,CS 段寄存器的最低两位就表示当前所处的是 3环(用户) 还是 0环(内核),可以通过 mov eax, cs + test eax, 1 区分

异常的产生方式有多少种
CPU 满足特定的条件之后,内部主动产生的异常,类似 int 3(IDT)

用户通过 RaiseException 构建 ExceptionRecord 主动抛出异常(KiDispatchException)

编译器会为用户自定义的 __try __except 添加怎样的异常处理函数
在同一个函数内,无论用户编写了多少个 SEH,编译器只会安装一个 except_handler4

当用户模式下产生异常时,SEH 函数会在什么时候被调用
int3 -> idt(3) -> _KiTrap03 -> CommonDispatchException -> KiDispatchExceptijon

-> KeUserExceptionDispatcher(3) -> RtlDispatchException(3) -> RtlpExecuteHandlerForException(3) -> except_handler4 -> except_handler4_common

-> 用户通过 _try _except 安装的异常处理函数

在 R0 中异常是如何被传递给三环调试器的
DbgkForwardException -> DbgkpSendApiMessage -> 三环调试器

R0 和 R3 的 RtlDispathException 有什么区别
KiDispatchException(0) -> RtlDispathException(0) -> SEH

KiUserExceptionDispatcher(3) -> RtlDispathException(3) -> VEH SEH UEF (VCH)

反调试与反反调试
反调试技术术语高级逆向分析技术范畴,并且涉及面异常广阔,几乎任何技术在经过精心的构造后都可以变成反调试技术

未公开的数据结构查询网站:https://www.vergiliusproject.com/

静态反调试:一般在调试开始时阻拦调试者,调试者只需要找到原因后可一次性突破
动态反调试:一般在调试过程中阻拦调试者,可在调试的过程中被频繁触发,因此需要调试者随时关注
对于所有的用户层 PEB 静态反调试,可以在程序正式的运行之前先挂起用户程序,然后修改相应的字段为非调试模式,再继续执行
分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

快速回复高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表