[讨论]这种硬件断点反调试用法谁见过哈哈

小希希 2018-5-16 21:56 695
看了个私服的反调试,真的是涨见识了,写个他大概的利用硬件断点防止调试的方式给大家看看

线程设置 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 到

nop

nop

空白处是错误代码或者无效代码

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个线程出错


第一次见这么用硬件断点的,帖出来给大家伙看看









快讯:[看雪招聘]十八年来,看雪平台输出了大量安全人才,影响三代安全人才!

最后于 2018-5-16 23:06 被小希希编辑 ,原因:
最新回复 (5)
机械瞑衍 2018-5-17 09:06
2
不是啥热门方法了    很老的方式了  至少这方法我都用了好几年了
机械瞑衍 2018-5-17 09:07
3
简单来说就是利用VEH来修正被有意混乱的eip,veh被调试器拦截后eip无法修正就gg了
pxhb 2018-5-17 09:50
4
机械瞑衍 简单来说就是利用VEH来修正被有意混乱的eip,veh被调试器拦截后eip无法修正就gg了
麻烦问一下  VEH在虚拟机不起作用是什么情况
BlackJZero 2018-5-17 12:32
5
小希希 2018-5-17 12:47
6
机械瞑衍 不是啥热门方法了 很老的方式了 至少这方法我都用了好几年了
呵呵,我还是第一次见到,这个硬件断点玩的不错
返回