第9-10天 常用断点

常用的断点有 INT 3断点、硬件断点、内存断点、消息断点等。
1.INT 3断点
INT3 断点的机器码是0xCC,缺点是软件很容易检测API被下断了,可以下断在下一行代码躲过检测。

2.硬件断点
最多设置4个硬件断点,和INT3断点类似,但是不会修改机器代码。所以更难被检测出。

3.内存断点
内存断点分为访问断点和写入断点,原理是对设置的地址赋予不可访问/不可写属性,当访问/写入的时候会产生异常。
调试器截获异常后判断是不是断点地址,是就中断。这样的结果就是程序执行效率非常低。
硬件断点也可以设置访问断点和写入断点。硬件访问写入断点断在触发断点的下一条指令。内存断点断点触发断点的指令处。
最后一点,对代码段我们也可以下内存访问断点。

4.内存访问一次性断点
对整个内存块设置访问断点,此为一次性断点,所在段被读取或者执行会中断。快捷键F2.
主要用在想捕捉或者返回某个模块时会用到。
还有设置内存访问断点和设置内存写入断点,不同的是他们2个不是一次性断点。

5.消息断点

与INT3断点不同的是消息断点只有窗口被创建之后才能被设置拦截。
消息断点都有4个参数分别是:具备hwnd,消息编号msg,2个32位长Long的参数。
进入W菜单,刷新,右键设置消息断点,回到程序点击按钮就会断下。
此时不要指望alt+f9或者ctrl+f9回到程序代码领空。
系统代码回到程序代码,正是.TEXT区块代码执行的时候,我们可以F2对.text区块下断点。
操作一次就可以来到消息循环处,重复几次就找到按钮代码。

6.条件断点

1.按寄存器条件中断
例如eax==0400000 或者使用命令 bp 401476 eax==0400000

2.按存储器条件中断
这里拿CreateFileA来举例子,它会经常的被调用。但想要断在某个特定文件被操作的时候
可以[STRING[esp+4]]=="C:\\123.txt" 或者使用命令 bp CtreateFileA,[STRING[esp+4]]=="C:\\123.txt"
如果是Unicode字符串可以bp CtreateFileW,[UNICODE[esp+4]]=="C:\\123.txt"

7.条件记录断点

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

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

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

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

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

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

posted on 2020-05-06 11:00  YXGust  阅读(263)  评论(0编辑  收藏  举报

导航