.net网站开发实训体会,做架构图简单的网站,抖音代运营mcn,北京网站建设推广服务信息1.前言 在我跨入ollydbg的门的时候#xff0c;就对ollydbg里面的各种断点充满了疑问#xff0c;以前我总是不明白普通断点#xff0c;内存断点#xff0c;硬件断点有什么区别#xff0c;他们为什么 有些时候不能混用#xff0c;他们的原理是什么#xff0c;在学习了前辈…1.前言 在我跨入ollydbg的门的时候就对ollydbg里面的各种断点充满了疑问以前我总是不明白普通断点内存断点硬件断点有什么区别他们为什么 有些时候不能混用他们的原理是什么在学习了前辈们的文章以后终于明白了一些东西。希望这篇文章能让你对硬件断点的原理和使用有一些帮助2.正文-------------------------------------------------- i.硬件断点的原理 在寄存器中有这么一些寄存器它们用于调试。人们把他们称为调试寄存器调试寄存器一共有8个名字分别从Dr0-Dr7。所以我们也把调试寄存器简单的称为Drx。 对于Dr0-Dr3的四个调试寄存器他们的作用是存放中断的地址例如401000 对于Dr4Dr5这两个寄存器我们一般不使用他们保留 对于Dr6Dr7这两个寄存器的作用是用来记录你在Dr0-Dr3中下断的地址的属性比如对这个401000是硬件读还是写或者是执行是对字节还是对字或者是双字。 好了从这里你可能明白一些东西。1. 为什么在OD里面只能下4个硬件断点 2. 为什么下硬件断点有byteworddword只分3. 为什么下硬件断点有读写执行只分 ii.关于F4F8F7F2的区别 在ollydbug的help里面只是提到如何使用F7和F8的使用并没说明他们的实现原理 现在我们来做一个实验实验一F4的原理1.随便找一个程序载入OD构造一个死循环就象这样00400154 90 nop //EP停在这里00400155 90 nop00400156 90 nop00400157 90 nop00400158 ^ EB FA jmp short 天2国际.ModuleEntryPoint //构造一个死循环0040015A 61 popad0040015B 94 xchg eax,esp2.对0040015A这一行按下F4由于死循环程序一直运行3.调试器的窗口里右键--查看调试寄存器结果在Drx里面显示DR0 0040015A //地址DR1 00000000DR2 00000000DR3 00000000DR6 FFFF0FF0 //断点属性DR7 00000401实验二F8原理1.随便找一个程序载入OD构造一个子程序的死循环就像这样00400154 t E8 0100D03F call 4010015A //EP停在这里00400159 90 nop0040015A 90 nop 0040015B 90 nop0040015C 90 nop //对这里下F2断点0040015D C3 retn // 返回2.按下F8由于INT3断点程序中断在0040015C3.调试器的窗口里右键--查看调试寄存器结果在Drx里面显示DR0 00400159 //call的返回地址DR1 00000000DR2 00000000DR3 00000000DR6 FFFF4FF1 //断点属性DR7 00000401实验三F7原理1.随便找一个程序载入OD2.双击调试器的窗口里的T标志将TF从原来的0变成13.F9运行结果程序断在了下面的一行实验四F2的原理1.用98的notepad吧载入OD构造一个死循环004010CC N 90 nop //EP挺在这里004010CD 90 nop004010CE ^ EB FC jmp short NOTEPAD.ModuleEntryPoint //死循环004010D0 90 nop //在这里按下F2普通断点004010D1 90 nop2.按下F9由于死循环程序一直运行着3.使用LordPE不要用ollydump将这个程序dump下来4.重新载入OD来看看成什么样子了004010CC d $ 90 nop004010CD . 90 nop004010CE .^ EB FC jmp short dumped.ModuleEntryPoint004010D0 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可读可执行如果是内存访问断点就修改为NO ACCESS不可访问3.只要访问到这个页面就会产生相应的异常然后由OD来判断是否与记录的断点一致从而是否中断下来--------------------------------------------------4.后话 对于上面的F7和内存断点的原理我还没想出什么好的办法去找出OD的原理,或许去调试一下ollydbg.exe是一个不错的建议。如果有哪位兄弟知道有什么好办法希望能告诉我。当然也很欢迎各位和我讨论。 下面一篇将讨论如何anti-hardbreakpoint。 如果转载请保持文章完整谢谢您能看完。 转载于:https://www.cnblogs.com/milantgh/p/3861367.html