能力值:
( LV2,RANK:10 )
|
-
-
2 楼
研究了下,基本上找到原因了,原来是驱动启动的线程对硬件寄存器清0的原因
.text:0001851A 8B FF mov edi, edi
.text:0001851C 50 push eax
.text:0001851D 33 C0 xor eax, eax
.text:0001851F 0F 23 C0 mov dr0, eax
.text:00018522 0F 23 C8 mov dr1, eax
.text:00018525 0F 23 D0 mov dr2, eax
.text:00018528 0F 23 D8 mov dr3, eax
.text:0001852B B8 00 04 00 00 mov eax, 400h
.text:00018530 0F 23 F8 mov dr7, eax
.text:00018533 90 nop
.text:00018534 90 nop
.text:00018535 90 nop
.text:00018536 58 pop eax
.text:00018537 C3 retn
|
能力值:
(RANK:400 )
|
-
-
3 楼
XTrap IDT HOOK 了1号中断,中断处理函数里就是清理调试寄存器的。
|
能力值:
(RANK:400 )
|
-
-
4 楼
它还有两个比较隐蔽的inline hook, 但是跟硬件断点没什么关系。
一个是解析ntusersendinput输入的数据
还有一个好像是IopfCompleteRequest,用来解析完成的irp、
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
上面比较明显的硬件寄存器清0的地方我已经处理了,不过好像硬件断点还是无法正常使用,估计还有其他的原因,是因为钩挂int 1的原因,还是楼上您所说的其他2个比较隐蔽的inhook导致?清0函数我是直接在函数头 retn 的,不会是它在其他函数自己实现前面几句,然后挑砖到这个函数中间关键代码部分执行吧?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谢谢莫灰灰大侠的提示,论坛下载了一份驱动分析的ida文件参考了下,确实是其他还有好几个地方对硬件寄存器进行了清0处理,thank you
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
经过莫灰灰大虾指点,以及参考了部分资料,硬件断点问题已经解决,非常感谢
|
|
|