通过硬件断点对抗hook检测

本文探讨了如何通过硬件断点来对抗hook检测。介绍了硬件断点的工作原理,包括Dr0-Dr7寄存器的作用,以及设置硬件断点的流程。通过设置线程异常处理函数,修改调试寄存器触发断点,从而实现规避检测的目标。实验结果显示,该方法能够成功绕过CRC检测,实现DLL注入而不被拦截。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

我们知道常见的注入方式有IAT hook、SSDT hook、Inline hook等,但其实大体上可以分为两类,一类是基于修改函数地址的hook,一类则是基于修改函数代码的hook。而基于修改函数地址的hook最大的局限性就是只能hook已导出的函数,对于一些未导出函数是无能为力的,所以在真实的hook中,Inline hook反而是更受到青睐的一方。

hook测试

这里我用win32写了一个MessageBox的程序,当点击开始按钮就会弹窗,这里我写了一个Hook_E9函数用来限制对MessageBoxA的hook,如果检测到了hook,则调用ExitProcess直接退出程序

在这里插入图片描述

如下所示,这里我们的目的就是通过Inline hook来修改文本框中的内容

在这里插入图片描述

这里使用常规方式修改5个字节的硬编码,通过E9跳转到我们自己的函数进行修改,这里将代码打包成dll

在这里插入图片描述

通过远程线程注入,这里显示是注入成功了,但是会被我们的检测函数拦截,这里可以看到拦截的是E9这个硬编码

在这里插入图片描述

然后我们这里对我们的程序的E9指令进行替换,修改为先用call短跳到没有被监控的区域,然后再跳到我们自己的函数

然而这里还是被拦截,这里显示的是被CRC检测拦截了

在这里插入图片描述

我们知道Inline hook无论是通过E8还是E9跳转,肯定是要修改内存的,那么如果程序有CRC检测,那么我们这种使用汇编跳到自己的处理函数的方法是怎么都行不通的。这里就不能使用常规的方法去规避hook,而是通过CPU的dr0-dr7寄存器去触发异常,通过异常处理函数来修改文本框的值,这里我们首先需要了解的是硬件断点

硬件断点

简单说一下软件断点和内存断点,软件断点就是我们通常在OD里面通过F2下的断点,它的原理是将我们想要断点的一个硬编码修改为cc,内存断点就是通过V

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值