绕过系统调试器检测

原因

有些时候,进程检测到有调试器时,会把异常直接交给调试器,这样,我们就调试不了我们的异常抓取逻辑。
(当然应该也有进程故意针对有调试器情况下做特殊处理的例子,同理是可以绕过去的)

步骤

  1. 打开windbg,打开exe和源代码,加载符号
  2. 下断点
    bp kernel32!UnhandledExceptionFilter

注意,UnhandledExceptionFilter的位置每个版本的操作系统都不一样,有的操作系统是在kernel32内,有的是kernelbase内,如果下断点之后无法命中,按以下步骤检查
a.检查windbg event filters设置,具体的异常事件(这里是access violation)对应的continue是否设置为not handled
b.观察UnhandledExceptionFilter代码,如果只是一个stub(通常是少数几行汇编,最后一条jmp指令),则需要在正确的(即jmp目标地址)UnhandledExceptionFilter下断点

  1. 继续跑进程

  2. 发现触发了 kernel32!UnhandledExceptionFilter,这在预期之中

  3. 此时按F10,直至运行了 call kernel32!BasepIsDebugPortPresent

  4. 将 寄存器 eax 改为 0 (eax 常常用来做返回值的寄存,此处可理解为 eax 为 该函数的返回值)

  5. 继续运行,进程便认为没调试器

上面 操作5 的返回值说明了当前有无连接调试器,我们将它的值由 1 改为了 0,能让kernel32误以为代码没有调试器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值