-
-
[讨论]这种硬件断点反调试用法谁见过哈哈
-
发表于:
2018-5-16 21:56
6716
-
看了个私服的反调试,真的是涨见识了,写个他大概的利用硬件断点防止调试的方式给大家看看
线程设置 4个硬件写入断点,下面的代码eax 里就是 硬件断点的内存,每执行一次,进入硬件断点处理程序 处理当前EIP的值,线程创建后经过一堆代码vm的没仔细看,开始下面的 利用硬件断点来处理流程
大概流程:
这里的时候EAX里的值就是 4个硬件断点设置的硬件写入地址
-------------------------------------------------------------------------------------------------------------代码开始
mov [eax],al dr0触发,异常处理程序 调整eip
nop
nop
mov [eax],al dr1触发,异常处理程序 调整eip
nop
nop
空白处是错误代码或者无效代码
mov [eax],al dr2触发,异常处理程序 调整eip 到
mov [eax],al dr3触发,异常处理程序 调整eip
nop
nop
空白处是错误代码或者无效代码
然后是一大堆00代码无效代码
00 00 ADD BYTE PTR DS:[EAX],AL
00 00 ADD BYTE PTR DS:[EAX],AL
00 00 ADD BYTE PTR DS:[EAX],AL
00 00 ADD BYTE PTR DS:[EAX],AL
00 00 ADD BYTE PTR DS:[EAX],AL
00 00 ADD BYTE PTR DS:[EAX],AL
00 00 ADD BYTE PTR DS:[EAX],AL
......
......
......
GetEIP() 通过dr0或者dr3 触发后的异常处理程序将eip定位到这里计算出功能代码地址,CRC了之类的,然后再跳到开头
-------------------------------------------------------------------------------------------------------------代码结束
有意思的地方开始了,因为他的硬件写入断点被覆盖,无法进入他的异常处理程序,没人修EIP了,导致od即便断到这里,也完全无法运行,因为不知道下一步EIP怎么走,实际代码比我上面写的混乱的多.
实际上下任何硬件断点,只要覆盖他本身的硬件断点,运行就会造成这4个线程出错
第一次见这么用硬件断点的,帖出来给大家伙看看
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2018-5-16 23:06
被小希希编辑
,原因: