吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 9436|回复: 18

[转载技术] OD条件断点的使用

  [复制链接]
pnccm 发表于 2015-5-26 16:08 | 显示全部楼层 |阅读模式

本帖最后由 pnccm 于 2015-5-26 16:13 编辑

论坛搜索好像没有人发表如何使用条件断点。偶然网上看到特转来论坛供后来者学习交流。

在调试过程中,经常希望断点满足一定条件时才中断,这类断点称为条件断点,

在OD的帮助文档有详细的说明:

(1)按寄存器条件中断:

用OD打开Conditional_bp.exe,在0040147c,按shift+F2设置条件断点:

输入表达式eax == 040000,这样如果eax为0400000h,OD将中断,

用OD帮助文档解释下:

040000- 所有整数常量都认为是十六进制的,除非后面跟了点

EAX - 寄存器EAX的内容,解释为无符号数

1.JPG

(2)按存储器条件中断

先看下CreateFileA函数:

[cpp] view plaincopy


  • HANDLE WINAPI CreateFile(  
  •   __in          LPCTSTR lpFileName,//指向文件名的指针  
  •   __in          DWORD dwDesiredAccess,  
  •   __in          DWORD dwShareMode,  
  •   __in          LPSECURITY_ATTRIBUTES lpSecurityAttributes,  
  •   __in          DWORD dwCreationDisposition,  
  •   __in          DWORD dwFlagsAndAttributes,  
  •   __in          HANDLE hTemplateFile  
  • );  

运行Conditional_bp.exe,对CreateFileA设断,单击OpenTest按钮,断下来,在堆栈窗口单击右键,执行Address/Relative to ESP(地址/相对于ESP)菜单:

2.JPG

则堆栈窗口最左边标识了各参数相对于当前ESP的地址:

3.JPG

假设当CreateFile打开"c:\\1212.txt"时实现中断,则shift+F2

键入字符 [STRING[esp+4]] =="c:\\1212.txt"

用OD帮助文档解释下:

[esp+4] - 在地址esp+4处的无符号双字内容

STRING [123456] - 以地址123456作为开始,以零作为结尾的ASCII字符串。中括号是必须的,因为您要显示内存的内容
[STRING 123456]=="Brown fox" - 如果从地址0x00123456开始的内存为ASCII字符串"Brown fox"、"BROWN FOX JUMPS"、 "brown fox???",或类似的串,那么其值为1。比较不区分大小写和文本长度

EAX=="Brown fox" - 同上,EAX按指针对待。

UNICODE [EAX]=="Brown fox" - OllyDbg认为EAX是一个指向UNICODE串的指针,并将其转换为ASCII,然后与文本常量进行比较

4.JPG

运行,断了下来

也可直接在CMD框中输入bp CreateFileA,[STRING[esp+4]]=="c:\\1212.txt"(注意CreateFileA大小写别错了,中间有无逗号没有影响)

如果是UNICODE,就用[UNICODE[ESP+4]]=="c:\\1212.txt"


OD条件断点BUG:

[cpp] view plaincopy


  • 首先我们看一下 CreateFileA 在 MSDN 中的解释:  
  • HANDLE CreateFile(  
  •   LPCTSTR lpFileName,          // pointer to name of the file  
  •   DWORD dwDesiredAccess,       // access (read-write) mode  
  •   DWORD dwShareMode,           // share mode  
  •   LPSECURITY_ATTRIBUTES lpSecurityAttributes,  
  •                                // pointer to security attributes  
  •   DWORD dwCreationDisposition,  // how to create  
  •   DWORD dwFlagsAndAttributes,  // file attributes  
  •   HANDLE hTemplateFile         // handle to file with attributes to   
  •                                // copy  
  • );  
  • 从上面我们可以看出第一个参数就是文件名指针,也就是说这个参数中存放的就是文件名称的地址。在32位程序中调用这个函数时这个参数的堆栈地址就应该是esp+4(4×8=32),同理,下一个参数就应该是esp+8。其它类推,返回值是esp+0。我们现在要判断文件名,这里的文件名就是esp+4地址所指向的地址中的内容。取地址中的内容在OD中用双方括号来操作,如取esp+4中的内容就该写成这样:[esp+4]。现在我们取的[esp+4]中的内容还是个地址,所以要得到文件名则还要再取这个地址中的内容,就该这样:[[esp+4]]。而那个STRING前缀在OD中的解释是以零作为结尾的ASCII字符串。所以我们下条件断点时这样写:  
  • bp CreateFileA,[STRING [esp+4]]=="abcdefghigklmn"  
  • 但却发现断不下来,写成这样:  
  • bp CreateFileA,[[STRING [esp+4]]]=="abcdefghigklmn"  
  • 才能断下来,这里就应该是三层的地址了。为什么这样目前尚不清楚  



以下演示条件记录断点

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

如要记录Conditional_bp.exe调用CreateFileA函数的情况,在CreateFileA函数的第一行,按Shift+F4键,出现条件记录窗口:

5.JPG

在Condition(条件)域中输入要设置的条件表达式,

Explanation(说明)域中由用户自己设置一个名称,Expression(表达式)域中是要记录的内容的条件,只能设置一个表达式,如填的是[ESP+4},则要选择"Pointer to ASCII String",才能正确打印出字符串,

Pause program是指OD遇到断点时是否中断,Log value of expression是指遇到断点时是否记录表达式的值, Log function arguments是指遇到断点时是澡记录函数参数,

Never(从不),On condition(按条件),Always(永远)等条件


评分

参与人数 31HB +39 THX +20 收起 理由
xiaoxixpj + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
longge188 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
sjtkxy + 2 + 1
Jawon + 1
situhaonan + 1 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
24567 + 1
DDK4282 + 1 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
Soul1999 + 1
一路走来不容易 + 1
冷亦飞 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
jaunic + 2
zoe + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
playboy + 2
成丰羽 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
消逝的过去 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
mengzhisuoliu + 1
lies + 1
hnymsh + 1
xujinwen + 1
ysz265 + 1 + 1 好人有好报!你的热心我永远不忘!谢谢!
ningzhonghui + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!
xiaoxing + 1 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
zverxn + 1 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
烟波的蓝 + 1 好人有好报!你的热心我永远不忘!谢谢!
vigers + 2 + 1 好人有好报!你的热心我永远不忘!谢谢!
怕怕吓一跳 + 2 被选中“最佳答案”荣耀+1,感谢你的热心解答!同时也感谢其他热心人!
374237370 + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!
有何不可 + 2 + 1 评分=感恩!简单却充满爱!感谢您的作品!
wjm219 + 1 + 1 评分=感恩!简单却充满爱!感谢您的作品!
逍遥枷锁 + 4 + 1 好人有好报!你的热心我永远不忘!谢谢!
Shark恒 + 5 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Shark恒 发表于 2015-5-26 16:11 | 显示全部楼层

有时条件断点确实非常方便

评分

参与人数 1HB +2 THX +1 收起 理由
374237370 + 2 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
vigers 发表于 2015-5-26 18:53 | 显示全部楼层

没人 回复么,断点很重要
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
True、end 发表于 2015-5-26 20:29 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zverxn 发表于 2015-5-26 22:16 | 显示全部楼层

学习了,谢谢
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
yaozi520be 发表于 2015-5-27 00:40 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
战股神 发表于 2015-5-27 00:44 | 显示全部楼层

看了一遍,还是没看懂!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ningzhonghui 发表于 2015-5-27 14:28 | 显示全部楼层

说实在的,一直也想找这个条件下断来看的,找到八两兄的,可地址失效了,幸好在这大牛送上了...谢谢
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ysz265 发表于 2015-5-30 08:29 | 显示全部楼层

谢谢分享,受益了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
不苦小和尚 发表于 2022-2-16 13:35 | 显示全部楼层

不错不错,条件断点可以提高效率
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
赞帖
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

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