avatar

目录
OD常用断点

OD常用断点

INT 3断点

原理: 当执行一个INT 3断点时,该地址处的内容被调试器用INT 3 指令替换,此时OD将INT 3隐藏,显示中断前的指令

INT 3机器码为0xCC
004013A5 CC D0404000
68被替换为CC

INT3断点可设置无限个,但改变了程序机器码,容易被检测,如检测API首地址是否为0xCC。绕过方式,将断点设在函数内部或末尾。

F2或命令行 bp设置

硬件断点

原理
与DRx调试寄存器有关

Dr0~3用于设置硬件断点,即在调试器中经常使用的bpm断点,由于只有4个断点寄存器,所以最多只能设置4个bpm断点。Dr7是一些控制位,用于控制断点的方式,Dr6用于显示是哪些引起断点的原因。

硬件断点不会将指令首字节修改为CC

菜单Breakpoint > hardware,on execution 或命令行 “HE 地址”设置

内存断点

原理: 对所设的地址赋予不可访问/不可写入属性,当访问或写入时会产生异常,OD截获异常后比较是否是断点地址,如果是就中断。

只能下一个内存断点
Breakpoint > memory, on write/access设置,F9运行

硬件访问/写入断点在触发硬件断点的下一条指令处下断,内存断点在触发断点的指令处下断。

内存访问一次性断点

ALT+M显示内存,在相应段上右键Set break-on-access或F2对整个内存块设置该类断点
这个断点是一次性断点,当所在段被读取或执行时中断,然后断点被删除

捕捉调用或返回某模块时使用。

消息断点

当某个特定窗口函数接收到特定消息时,消息断点将使程序中断。
INT 3断点可在程序启动前设置,消息断点只能在窗口被创建后设置并拦截消息。

运行窗口程序,菜单View > Windows或W按钮,列出窗口相关参数,右键Actualize刷新。对应位置右键Message breakpoint on ClassProc进行设置。想要返回程序领空,应对.text段下内存访问断点。

条件断点

寄存器条件中断

Shift+F2

存储器条件中断

标出各参数对应ESP地址 栈窗口右键Address > Relative to ESP

相应API用Shift+F2设置断点

条件记录断点

Shift+F4

文章作者: kabeor
文章链接: https://kabeor.github.io/OD%E5%B8%B8%E7%94%A8%E6%96%AD%E7%82%B9/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 K's House

评论