《加密与解密》第三版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。注意表达式形式与表达式解析方式的一致性。
//这里似乎在插件开发上很有用,需要进一步学习