首页
社区
课程
招聘
[求助]HOOK 异常处理反硬件断点检测遇到的问题。
发表于: 2018-9-19 16:26 8867

[求助]HOOK 异常处理反硬件断点检测遇到的问题。

2018-9-19 16:26
8867
最近调试一个x64程序,有R3层反调试没有驱动,因为技术太菜过不了反调试,所以就想注入DLL使用硬件断点来调试。
按以往的套路就是Hook KiUserExceptionDispatcher 在 RtlDispatchException 之前把Drx寄存器清零,之后再重写。
这样就可以逃过VEH 和 SEH 对上下文来检测硬件断点。但这个程序在执行完 RtlDispatchException 就不出来了。
把 RtlDispatchException 函数后面的代码全部 NOP 掉都正常执行,猜想是程序在执行完异常处理后自己跳回R0层了。
请问各位兄弟有没有办法在执行完 RtlDispatchException 后重写Drx寄存器吗? 感激涕零 !



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 35
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
       碰到和你一样的问题 不过我是x64进程 我是直接到 RtlDispatchException 头部去干的.然后判断堆栈返回值是 kiuser层的
_asm
       {
               push rax
               mov rax, dwStackAddr
               cmp  qword PTR DS : [rsp+0x08], rax
               pop rax
               jnz label
                       mov     dword PTR DS : [rdx + 0x30], CONTEXT_FULL //flg
                       mov     qword PTR DS : [rdx + 0x48], 0 //dr0
                       mov     qword PTR DS : [rdx + 0x50], 0 //dr1
                       mov     qword PTR DS : [rdx + 0x58], 0 //dr2
                       mov     qword PTR DS : [rdx + 0x60], 0 //dr3
                       mov     qword PTR DS : [rdx + 0x70], 0 //dr7
               label:
                       mov qword ptr ss : [rsp + 18], rbx
                       push rbp
                       push rsi
                       push rdi
                       push r12
                       push r13
                       push r14
                       push r15
                       mov     rax, RtlDispatchException
                       add     rax, 0x10
                       jmp rax
       }

没用 这我已经清0了 还是检测到的 说明不是自己产生seh异常检测dr值的
1.NTGetThreadContext 处理了 没效果
2.Wow64GetThreadContext  这个可以忽略 进程是64位  这个API无法使用的 目标线程必须32位才可以
32位的 Wow64GetThreadContext 是调用 NTGetThreadContext  如果你32位的 处理一个 NTGetThreadContext 就好
64位 Wow64GetThreadContext  调用是  NtQueryInformationThread
2018-9-20 13:15
0
雪    币: 737
活跃值: (513)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好好学习,天天向上
2018-9-20 18:08
0
雪    币: 3
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
guotouck 碰到和你一样的问题 不过我是x64进程 我是直接到 RtlDispatchException 头部去干的.然后判断堆栈返回值是 kiuser层的 _asm { push rax m ...
我调试的也是x64程序,而且确定是在VEH里被检测DRx寄存器。所以要想办法过掉...
2018-9-20 19:16
0
雪    币: 35
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
如果是VEH 那你遍历VEH 直接去函数里边搞死不就好了.
2018-9-20 21:35
0
雪    币: 3
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
guotouck 如果是VEH 那你遍历VEH 直接去函数里边搞死不就好了.
想过这个办法,但不好分析,而且他的VEH代码段处理过,不能改写。还有CRC校验。
2018-9-22 13:39
0
雪    币: 35
活跃值: (612)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我怎么感觉你和我一样的 是hy  吗            这个我看了 没veh啊  最多有seh链表
2018-9-23 00:01
0
雪    币: 200
活跃值: (120)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我想问下你们最后是怎么解决的
2022-9-10 00:19
0
游客
登录 | 注册 方可回帖
返回
//