ollydbg快捷键:
F2——下断点,也就是指定断点的地址;
F3——加载一个可执行程序,进行调试分析;
F4——程序执行到光标处;
F5——缩小还原当前窗口;
F7——单步步入;
F8——单步步过;(Ctrl+F8可以自动步过并设置断点)
F9——直接运行程序,遇到断点处,程序暂停;
Ctrl+F2——重新运行程序到起始处,一般用于重新调试程序;
Ctrl+F9——执行到函数返回处,用于跳出函数实现;
Alt+F9——执行到用户代码处,用于快速跳出系统函数;
Ctrl+G——输入十六进制地址,快速定位到该地址处;
Ctrl+F——查找命令
Ctrl+S——查找命令序列(通过any(命令)和r32(32位寄存器)实现模糊查找)
Ctrl+B——查找二进制串(使用?作为模糊查找)
在遇到call或jmp指令时按下Enter键,可以去其目标地址查看,但暂不直接进入执行(静态查看)
断点
软件断点
最为常用的普通断点。分为普通操作(鼠标点击设置断点)和命令操作。
命令操作:bp创建断点,bc删除断点,可以指定api函数并设置偏移量。
如 bp CreateFileA
以及 bp CreateFile + 5
note:
- 软件断点只能在代码上设置。
- 软件断点可以在代码的任意位置上设置,并且断点的数量不受限制。
硬件断点
硬件断点依赖CPU中的调试寄存器。调试寄存器一共有8个,其中4个用于设置断点,因此断点数量只有4个。
硬件断点可以用右键菜单也可以用命令进行设置。
菜单操作
在CPU的反汇编窗口或数据窗口单击鼠标右键,在弹出菜单内找到”断点”菜单项可以看到相应的设置硬件断点的子菜单项。
断点类型分为 硬件访问、硬件写入、硬件执行命令操作
分为HE, HW, HR, HD。
其中HE表示硬件执行断点,HW和HR分别表示硬件写和硬件读断点。
HD表示删除断点。
内存断点
获知某块内存中的数据是在什么情况下被写入或访问的。
在反汇编窗口或数据窗口中单击鼠标右键,在弹出的菜单项里选择”断点”。
内存断点分为 内存访问 与 内存写入 两种方式。
在内存窗口(按Alt + M可以切换到内存窗口)选择某个内存块,单击鼠标右键,在弹出的菜单中可以进行设置”设置内存访问窗口”,”设置内存写入断点”。
note: OD只可以设置一个内存断点,再设置新的内存断点时会自动删除之前的内存断点。
一次性内存访问断点
类似与内存断点,区别在于在中断后会自行删除
条件断点
1.条件断点
在需要设置条件断点的位置按下 shift + F2 ,在弹出的条件对话框中输入条件。也可以在命令插件中直接输入条件,两者的方式是类似的。
1 | +, -, &&, ||, !, >, >=, <, <=, ==, != |
条件示例
EAX == 12345678 表示EAX寄存器等于12345678
[EAX] == 12345678 表示EAX寄存器中保存的值是一个内存地址,内存地址中的值等于12345678
[[EAX]] == 12345678 表示EAX中内存地址指向的内存地址的值是12345678
ESI==0040300 && EDI==00403010 表示ESI寄存器的值为0040300且EDI寄存器的值为00403010
[403000] != 10 表示内存地址403000的值不等于10
STRING[403010] == “test” 表示以地址403010为起始地址,以NULL作为结尾的ASCII字符串
[STRING[403010]] == “test” 表示以地址403010作为起始地址,开头为test的字符串
如命令 bp LoadLibrary [STRING[esp+4]]==”kernel32.dll”
2.条件记录断点
在需要设置条件记录断点的地址上按下 “shift+F4”。会弹出条件记录断点的对话框。
消息断点
用于调试带有窗口的应用程序。
消息断点在”window窗口”中设置(单击工具栏上的”W”按钮即可切换到window窗口)。当切换到window窗口后,首先单击右键弹出菜单中的刷新按钮,便于能正常显示所有的窗口。选中要设置断点的窗口记录,然后在右键弹出的菜单当中,选择”在CLassProc设置消息断点”