如何对抗硬件断点之一 --- 调试寄存器
2007-01-14 16:44:34 来源:WEB开发网核心提示: 3.使用LordPE(不要用ollydump)将这个程序dump下来4.重新载入OD来看看成什么样子了004010CCd>$90nop004010CD.90nop004010CE.^EBFCjmpshortdumped.<ModuleEntryPoint>004010D0
3.使用LordPE(不要用ollydump)将这个程序dump下来
4.重新载入OD
来看看成什么样子了
004010CCd>$ 90 nop
004010CD . 90 nop
004010CE .^EBFC jmpshortdumped.<ModuleEntryPoint>
004010D0 CC int3 //这里变成了CC了
004010D1 90 nop
--------------------------------------------------
3.总结
从实验一和实验二我们能清楚的看到,F4是直接将该行的地址放入drx里面,F8是将下一行的地址放入到drx里面,他们都使用了调试寄存器。从实验三中我们知道对于F7来说很可能使用的是将TF置一的办法,也就是说当我们按下F7的时候OD把TF置一。对于F2来说他是将,第一个字节悄悄的修改成了CC,虽然并没有显示给我看到这个是一个CC,当我们按下F2的时候,OD还没有运行,只是把这个表示记录下来,当运行的时候他就把所有标记的字节修改了,尽管还是显示原来的代码,当然当他一暂停下来就又修改回来了。
上面的是实验中,F7的原理只是猜测,还没有很好的办法能证明他就是使用TF,下面我继续猜测一下内存断点的原理
1.将设置的内存断点的地址记录下来
2.对这个地址的内存页面修改其属性
如果是内存写断点,就修改为RE(可读,可执行)
如果是内存访问断点,就修改为NOACCESS(不可访问)
3.只要访问到这个页面就会产生相应的异常,然后由OD来判断是否与记录的断点一致,从而是否中断下来
--------------------------------------------------
4.后话
对于上面的F7和内存断点的原理,我还没想出什么好的办法去找出OD的原理,或许去调试一下ollydbg.exe是一个不错的建议。如果有哪位兄弟知道有什么好办法,希望能告诉我。当然也很欢迎各位和我讨论。
更多精彩
赞助商链接