学习:条件[记录]断点

条件断点:条件断点是一种拥有可设置条件属性,满足一定条件才触发的断点。

shark恒老师说CC断点和条件断点差不多,只是条件断点需要条件成立,OD才会进行捕获异常,但是他说以后会经常用到,所以自己就另外写一个来记录

修改00401002反汇编地址为mov eax,0x4

00401002 B8 04000000 mov eax,0x4

然后对下面的地址进行设置条件断点 快捷键为shift+f2,EAX == 00000004

00401007 |. A3 CA204000 mov dword ptr ds:[0x4020CA],eax

然后F9运行程序,发现成功下断点

条件语句可以与或非等等都行,比如以下

eax == 00000004 && eax == 44444444

eax == 00000004 || eax == 44444444

eax != 00000004 || eax != 44444444


条件记录断点:

在同一个MessageBox windows api函数触发的时候,还可以根据其触发的地址来判断是否进行断点,使用条件记录断点 快捷键shift+F4

1、进行跟随表达式Ctrl+G,MessageBox,来到user32.dll的领空,然后shift+F4,进行设置记录断点

2、使用ALT+L,打开记录窗口,能观察每次MessageBox触发的时候的记录

其中有两条红标的记录一个是COND:0040137D,另一个是CALL 到 MessageBoxA 来自 CRACKME.00401378

004137D我们跟随下发现其实就是当前MessageBox函数的末尾地址

CALL 到 MessageBoxA 来自 CRACKME.00401378 这个则是我们进到MessageBoxA的首地址,也就是当调用了弹窗函数,堆栈窗口中压入的第一个

问题:一个程序不止是只有一个弹窗按钮,有许多,那么我们怎么在记录窗口中寻找我们想要的呢?

解决:

1、进行跟随表达式Ctrl+G,MessageBox,来到user32.dll的领空,然后shift+F4,进行设置记录断点,但是这次设置的内容跟上面的不一样

我们想要下的断点就是0040137D,那么条件就为[ESP] == 0040137D,意思就是当ESP寄存器中的地址是0040137D就进行断点

然后进行运行程序F9

第一次的ESP寄存器不是为40137D

然后点击确定,第二次成功的断了下来,并且自动转到汇编窗口

同样的记录窗口,虽然有两次,但是断点只有一次

原文地址:https://www.cnblogs.com/zpchcbd/p/12059929.html