吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7781|回复: 37
上一主题 下一主题
收起左侧

[调试逆向] OllyDbg 常用断点

  [复制链接]
跳转到指定楼层
楼主
rgzz 发表于 2023-2-21 23:12 回帖奖励

OllyDbg 常用断点

1. INT 3 断点

设置/取消断点:bp命令或 “F2” 快捷键

原理:当执行一个 INT 3 断点时,该地址处的内容被调试器用 INT 3 (机器码是 0xCC,因此它通常又叫 “CC指令”)指令替换了,此时 OllyDbg 将 INT 3 隐藏,显示出来的仍然是中断前的指令。当调试进程执行 INT 3 指令导致一个异常时,调试器会捕捉这个异常,从而停在断点处,然后将断点处的指令恢复成原来的指令。

优点:可以设置无数个断点

缺点:改变了机器码,容易被软件检测到

防范:调用 API 前检测 API 首地址是否为 0xCC,以此来检测是否被下断点。

2. 硬件断点

硬件断点与 DRx 调试寄存器有关。

DRx 调试寄存器共有8个(DR0~DR7):

  • DR0~DR3:调试地址寄存器,用于保存需要监视的地址,例如硬件断点。
  • DR4~DR5:未公开
  • DR6:调试寄存器组状态寄存器
  • DR7:调试寄存器组控制寄存器

设置/取消断点:在指定代码行单击右键,执行“Breakpoint” --> “Hardware, on execution”(“断点” -->“硬件执行”)命令,也可在命令行中设置“HE 地址”

硬件断点原理:使用DR0~DR3设定地址,并用DR7设定状态,因此最多设置4个断点。单个硬件写入/访问断点可以设置为1字节、2字节、4字节,而且不论选择的数据范围多大,只有前4个字节会起作用。

优点:速度快,不容易被发现

缺点:只能设置4个

更详细介绍:调试寄存器 原理与使用:DR0-DR7 - 活着的虫子 - 博客园 (cnblogs.com)

3. 内存断点

在OllyDbg中,内存断点分为内存访问断点和内存写入断点。

设置/取消断点:在数据/代码窗口选中需要下断点的地址区域,单击右键,“Breakpoint” --> “Memory, on write ”(“断点” --> “内存写入”)命令。

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

优点:不修改原始机器码,不容易被检测到,所以在遇到代码校验且硬件断点失灵时,可以使用内存断点。

缺点:由于每次出现异常都要比较确定是否中断,所以内存断点会降低 OllyDbg 执行速度,可能是这个原因,OllyDbg只允许下一个内存断点。

区别:硬件访问/写入断点在触发硬件断点的下一条指令处中断,而内存断点是在触发断点指令处中断。

4. 内存访问一次性断点

设置/取消断点:按“Alt+M”显示内存窗口,在目标段上单机右键,“Set break-on-access”(在访问上设置断点),快捷键“F2”。

原理:将内存的段设置为不可访问,当此段被读取或执行时就会中断,中断发生后,断点将被删除,所以是一次性断点。

适用场景:如果想捕捉调用或返回某个模块,这类断点就特别有用。

5. 消息断点

设置/取消断点:单机菜单“view” --> “Windows”,列出窗口相关参数,在目标条目上单击右键,执行“Message breakpoint on ClassProc”(在 ClassProc 上设置消息断点)命令,在弹出窗口的下拉列表中选择消息类型,OK。

原理:当某个特定窗口函数接收到某个特定消息时,消息断点将使程序中断。

区别:INT 3 断点可在程序启动前设置,而消息断点只有在窗口被创建后才能被设置并拦截消息。

6. 条件断点

条件断点,顾名思义,就是在满足一定条件时才会中断,它可以按寄存器、存储器、消息等设断。

设置/取消断点:
按寄存器中断,选择判断条件断点时执行的位置如 00401476h,按“Shift+F2”,在弹出的文本框内输入条件表达式“eax==0400000”,也可在命令行插件中输入 bp 00401476 eax==0400000。
按存储器中断,假设 CreateFileA 函数打开 c:\1212.txt 时需要中断,选择 CreateFileA 函数的第一行,按“Shift+F2”,输入“ [STRING[esp+4]]=="c:\\1212.txt" ”,(STRING表示以零结尾的ASCII字符串),也可在命令行插件中输入 bp CreateFileA, [STRING [esp+4]]=="c:\\1212.txt"

原理:一个带有条件表达式的普通 INT 3 断点。当调试器遇到这类断点时,断点将计算表达式的值,如果结果非零或表达式有效,则断点生效(暂停调试程序)。

7. 条件记录断点

条件记录断点除了具有条件断点的作用外,还能记录断点处函数表达式或参数的值。也可以通过设置断点的次数,每次符合暂停条件时,计数器的值都将减1。

设置/取消断点:要记录程序调用 CreateFileA 函数的情况,可在 CreateFileA 函数的第1行按“Shift+F4”,打开条件记录窗口,设置相关参数。

免费评分

参与人数 8吾爱币 +14 热心值 +6 收起 理由
willJ + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Chq131 + 1 + 1 谢谢@Thanks!
执骨哟 + 1 用心讨论,共获提升!
终南明月 + 1 谢谢@Thanks!
tzblue + 2 + 1 谢谢@Thanks!
daoye9988 + 1 + 1 热心回复!
为之奈何? + 1 + 1 我很赞同!
hk9186 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| rgzz 发表于 2023-2-22 15:29 |楼主
IBinary 发表于 2023-2-22 11:05
谢谢分享,新年代了,赶紧更换为x32 x64dbg吧.. OD指令都不支持了.32 64已经替代OD了. 且指令都有详细文档.

确实,x64dbg的动态调试也很好用,但是我发表这篇文章的本意是为了了解断点的底层原理,OD指令只是附带方便我自己学习的,顺便说一下,x64下也用到了这些断点,原理都大差不差
推荐
IBinary 发表于 2023-2-22 11:05
谢谢分享,新年代了,赶紧更换为x32 x64dbg吧.. OD指令都不支持了.32 64已经替代OD了. 且指令都有详细文档.
沙发
kkoo 发表于 2023-2-21 23:49
3#
ludonghengsb 发表于 2023-2-22 01:57
感谢大佬,非常有用
4#
svip6868 发表于 2023-2-22 03:11
学习了,感谢分享。。。
5#
xtudou 发表于 2023-2-22 05:35

学习了,感谢分
6#
l441669899 发表于 2023-2-22 07:36
感谢分享!
7#
心中的影子 发表于 2023-2-22 08:27
感谢分享。。
8#
轩逸浪子 发表于 2023-2-22 08:40
感谢分享!!!
9#
hu007 发表于 2023-2-22 08:51
谢谢技术分享!
10#
aa2923821a 发表于 2023-2-22 09:15
谢谢,刚好想学习一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 17:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表