INT 3 断点
常用断点,使用“F2”快捷键设置的就是 INT 3 断点。这类断点采用修改机器码的方式,将设断处的代码更改为 “CC”,当程序运行至设断处时,会抛出一个异常,OllyDbg会捕捉到这个异常,使得程序暂停,然后恢复程序机器码。INT 3 断点可以设置无限多个,但是由于 INT 3 断点更改了机器码,所以很容易被目标软件检测到。
硬件断点
硬件断点与 DRx 调试寄存器有关,在Intel CPU 体系架构手册中可以找到对 DRx 调试寄存器的介绍。
DRx 调试寄存器有八个(DR0 ~ DR7),每个寄存器的特性如下:
- DR0 ~ DR3 :调试地址寄存器,用于保存需要监视的地址,例如设置硬件断点。
- DR4 ~ DR5 :保留,未公开具体作用
- DR6 :调试寄存器组状态寄存器
- DR7 :调试寄存器组控制寄存器
简单来说,硬件断点是在 DR0 ~ DR3 中设置断点地址,DR7设置状态。因此最多设置4个硬件断点,当程序运行至所设定断点时,CPU会向 OllyDbg 发送异常信息,OllyDbg处理后,中断程序,让我们继续操作。所以硬件断点不会更改程序的机器码,具有比 INT 3 断点更高的隐蔽性。
设断方法:单击右键,选择 “Breakpoint” - “Hardware, on execution”
删除断点方法:菜单项 “Debug” - “Hardware breakpoints” 打开硬件断点面板,选择 “Delete” 删除
快捷键 F4 :执行到光标所在的行,这一方式是相当于执行了一次硬件断点,之后删除
内存断点
原理是对断点内存地址赋予 不可访问/不可写 属性,当程序试图 访问/写 该内存地址时,就会发生异常,OllyDbg捕捉到这个异常并比较异常发生的地址与断点地址,如果相同,就暂停程序,让我们继续操作。可能因为要比较地址的缘故,OllyDbg为了提高速度,只允许设置一个内存断点。
内存断点不修改机器码,与硬件断点一样不会像 INT 3 断点那样被程序校验导致下断失败,在 INT 3 下断失败,硬件断点失灵的情况下,可以使用内存断点。
设断方法:在设断的内存地址右键 “Breakpoint” - “Memory, on access/write”,这样就可以设置内存访问/写入 断点。对代码或者数据都可以下内存断点,对数据比较好理解,对于代码来说,执行代码时需要“访问”这段代码。所以可以对代码设 “内存访问” 断点。
删除断点方法:右键 - “Breakpoint” - “Remove memory breakpoint”
内存访问一次性断点
该类断点设置的对象是一个内存段,比如对程序的代码段设断,当从其他模块回到程序时,就会触发断点。更多的用在捕捉调用或者返回某个模块上。不多介绍了,在OllyDbg里按 “Alt+M” 显示内存,在对于内存段上右键- “Set break-on-access”,快捷键 F2,该断点时一次性的,断了就删。
消息断点
由于windows系统是消息驱动的,所以可以对消息下断点,在OllyDbg中运行程序后,点击【w】,打开窗口参数表,在对于窗口上右键 - “Message breakpoint on ClassProc”,就会打开设置窗口,在设置窗口里选择要下断的消息即可,删除断点可按 “Alt+B” 打开断点信息窗口,直接删除即可。
基本上大概的断点就是这样,以后觉得有必要补充的再加上去