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:

  1. 软件断点只能在代码上设置。
  2. 软件断点可以在代码的任意位置上设置,并且断点的数量不受限制。

硬件断点

硬件断点依赖CPU中的调试寄存器。调试寄存器一共有8个,其中4个用于设置断点,因此断点数量只有4个。

硬件断点可以用右键菜单也可以用命令进行设置。

  1. 菜单操作

    在CPU的反汇编窗口或数据窗口单击鼠标右键,在弹出菜单内找到”断点”菜单项可以看到相应的设置硬件断点的子菜单项。
    断点类型分为 硬件访问、硬件写入、硬件执行

  2. 命令操作

    分为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设置消息断点”