OD的断点设置

OD 常用的断点有: INT3断点,硬件断点,内存断点,消息断点,条件断点。

一. INT3断点
     1. 在CPU窗口,按F2 或 双击 “ Hex dump”列设置一个INT3断点,再次按F2或双击 “Hex dump”则取消已经设置的 INT3断点。

  •       说明:如果将断点设置到当前应用程序代码之外,OD会弹出警告,可在“Options/Debuggging options/Security”页取消

              选项“Warn when breakpoint is outside the code section”。

  •      在函数入口点下断: 按 Ctrl + G,然后输入函数名(注意OD对大小写敏感)后按Enter,再按F2。

    2. 查看断点
        按Alt + B打开断点窗口,该窗口可以显示除硬件断点外的所有断点。"Always"表示断点当前处于激活状态,"Disable"表示
        断点被禁用,按空格键可以切换断点的状态。

   3. 通过输入表设置断点
       在OD里,按Ctrl + N键打开应用程序的输入表,在函数上按 Enter 或 执行右键菜单“Find references to import”可打开调用
       此​​​函数的引用代码窗口。

   4. 保存修改到文件 
       用鼠标选择修改过的代码,单击右键, 执行“Copy to executable / Selection”。在新窗口中单击右键,选择“Save File”即可
       将修改保存到文件。

   5. 优缺点
        优点:可以设置无数个断点。缺点:改变了原程序的代码,容易被软件检测到。

二:硬件断点
       1. x86 CPU 最多只能设置4个硬件断点。
       2. 设置方法: 1)在反汇编窗口,选中行,右键菜单中选择 “Breakpoint / Hardware,on execution”。
                               2)在内存窗口,选择数据,右键菜单选择 "断点 / 硬件访问 或 硬件写入 或 硬件执行"。
       3. 删除方法: 单击菜单 “Debug / Hardware breakpoint”,  单击 "Delete"。
       4. F4的实现原理就是利用硬件断点。
       5. 优缺点: 优点速度快,不需修改原程序代码。缺点:最多只能设置4个断点。

三: 内存断点
        1. 内存断点类型:OD可以设置内存访问断点或内存写入断点。
        2. 内存断点原理:对所设断的地址设置为不可访问或不可写属性。
        3. 内存断点会降低OD的速度,故其只实现一个内存断点。
        4. 设置方法:在内存窗口或反汇编窗口上,选择数据后,右键菜单选择 “ Breakpoint / Memory, on write 或  Memory,
                              on access”。
        5. 清除方法:在内存窗口或反汇编窗口上,右键菜单选择 “Breakpoint / Remove memory breakpoint”。
        6. 特点:内存断点不修改源代码。如果硬件断点失效,可以尝试内存断点。
四:内存块(节/段) 断点
        1. 设置方法:按 Alt + M打开Memory Map窗口,选中一个节或段,右键菜单选择 “Set break-on-access” 或 F2。
        2. 特点: 一次性的,中断后断点自动删除。
        3. 用途: 捕捉调用或返回到某个模块时,比如:脱壳。

五: 消息断点
        1. 单击 “查看 / 窗口”打开 Windows窗口,在选中行上选择右键菜单中的 “ Message breakpoint on ClassProc”, 在弹出的
            窗口中选择需要的消息。
        2. 中断后停在系统底层代码里,此时“Alt + F9” 或 “Ctrl + F9”无效。此时恰好是运用内存块断点的最好时机。
        3. 删除消息断点:按 “Alt + B”打开断点窗口,然后选择消息断点,再删除。

六: 条件断点
        1. OD的条件断点可以按寄存器、存储器、消息设断。
        2. 条件断点就是一个带有条件表达式的INT 3 断点。
        3. 表达式的规则描述可参考OD的帮助文档。
        4. 按寄存器条件中断:
             4.1 选中带有寄存器的反汇编指令,按Shift + F2打开条件断点对话框,输入“eax ==0x12345678”,如果执行到该行时
                    eax的值 为0x12345678,则程序暂停在这行。
             4.2 如果安装了命令行插件,则可在命令行里直接输入:bp 行号 eax == 值。
        5. 按存储器条件中断:
             5.1 选择反汇编行,按Shift + F2打开条件断点窗口,输入: 【STRING [esp + 4] 】==“D:\test.dat”。
             5.2 如果安装了命令行插件,则可在命令行里直接输入:bp CreateFileW, [ STRING [ esp +4 ] ] == L"D:\test.dat"。

 七:条件记录断点
        1. 条件记录断点除了具备条件断点的功能外,还可以记录断点处的函数参数或表达式的值。
        2. 条件记录断点还可以设置通过断点的次数。
        3. 选中反汇编窗口中的行,按Shift + F4,打开条件记录断点窗口:
            3.1 在Condition字段中输入:条件表达式。
            3.2 在Expression字段中输入:满足条件表达式时要记录的内容。
            3.3 在Decode value of expression as 选中对记录内容的解析。比如: 记录内容为【esp + 4】(字符串指针),
                  则此处选择“Pointer to ASCII String”。
        4. 条件记录断点暂停时,可以传递一个或多个命令给命令行插件。比如:要在暂停时显示ESP地址处的数据,则可
            在编辑框中输入 “.d esp” (注意d前有个点号),这样每次暂停时,都会传递命令 “d esp”给命令行插件。
        5. 按 “Alt + L”打开日志窗口,可以看到条件记录断点记录的数据。

      

             


 


   

 

              

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值