OllyDbg中的断点

《加密与解密》第三版2.1.5节学习笔记

一、int 3 断点

原理:

OllyDbg将这一行的指令临时替换为int 3(0xCC)。程序执行到int 3时,CPU产生用于debug的中断,并停止执行等待下一步行为,此时OllyDbg将该处指令恢复,等待用户操作,继续执行。

方法:

选定后按F2、或者双击十六进制代码栏。

优点:

可以设置任意多个断点。

缺点:

调试时经常在某个API入口处下断。程序可以预先查询API入口第一字节是否为CC来阻止下断。

改进:

在函数内部下断。(如果较真,还是能检测到。)

二、硬件断点

原理:

Intel CPU中有8个调试寄存器(Debug Register)DR0 — DR7,其中DR0 — DR3用于设置硬件断点地址,DR6保存状态,DR7负责控制。当指令执行到DR所指地址时,CPU中断,等待OllyDbg进一步操作。

OllyDbg中,选定一行后按F4键,用于执行到指定位置,就是临时设置了一个硬件断点。

方法:

在代码处右键->断点->硬件执行。在寄存器窗口右键->查看调试寄存器,可以看到设置成功。

在菜单->调试->硬件断点处,可以看到已经设置的所有硬件断点。

优点:

程序无法检测此类断点。

缺点:

最多只能同时设置四个。

三、内存断点

原理:

当对内存某处设置了读或写的断点时,该地址的属性就被更改为不可读或不可写,因为访问时将产生异常, OllyDbg截获该异常并等待用户操作。

方法:

在内存窗口或指令窗口右键->断点->内存访问/内存写入。

优点:

同样的,程序无法检测到此类断点。此外,是唯一可针对数据的断点。

缺点:

每次异常,OllyDbg都要检查是否是内存断点造成的异常,降低了运行速度。因此,OllyDbg只允许设置一个内存断点。

一次性断点:

Alt+M显示内存段分布,在段上F2,设置该段访问的一次性断点。

四、消息断点

原理:

Windows是消息驱动型的系统。消息断点使得某个窗口函数接收到某个消息时产生中断。

方法:

单击W图标,打开窗口界面,选择一个窗口对象,右键->设置消息断点->选择消息类型。Alt+B,选择消息断点,删除。

一般情况下,设置消息断点时,程序会中断在系统代码领空,要返回程序代码领空,可以对程序的text段设置一次性内存断点。

返回后,一般是位于程序的消息处理循环的起始位置,该段代码对消息类型进行选择并分别予以处理,多次跟进后,可找到需要的处理函数。

五、条件断点

原理:

执行到某条指令时,判断条件是否满足,如果条件表达式值非0或无效,则中断。

方法:

选定指令后,shift+F2,输入条件表达式。可以对寄存器、内存等作判断。

六、条件记录断点

作用:

在log(alt+L)里记录下条件断点发生时,某些指定数据的值。

方法:

shift+F4。注意表达式形式与表达式解析方式的一致性。

//这里似乎在插件开发上很有用,需要进一步学习

Leave a Reply

Your email address will not be published. Required fields are marked *