反汇编窗口
在反汇编器中双击以下的栏或选项完成相应操作:
· 地址栏: 显示相对被单击地址的地址;再次双击其地址返回到标准地址模式。
· 十六进制转存栏:触发设置无条件断点。
· 反汇编命令栏: 调用汇编器(可以直接修改汇编代码)。
· 注释栏: 允许你增加或编辑与该行汇编命令相关性的注释。
常用快捷键
Alt+E → Modules窗口,查找输入函数
Ctrl+N → 查找名称标志,选择你要下断的内容
Shift+F9 → 强制继续执行跟踪或称拦截信息步进跟踪
F12 → 暂时停止
F10 → 打开反汇编选项菜单
F9 → 运行键
F8 → 单步跟踪结束
F7 → 单步跟踪
F3 → 打开快捷键
F2 → 下断点快捷键
Ctrl+F9 → 返回到跟踪
Ctrl+F8 → 自动步进扫描,按F12可停止
Ctrl+F7 → 同上,功能略有不同
Ctrl+F6 → 回到OL主窗口
Ctrl+F2 → 重新开始
Art+F2 → 结束跟踪
Enter → 进制转换计算
Art+L → 打开日志窗口
Art+C → 快速回到程序入口
Ctrl+S → 打开查找命令次序窗口
Shift+F2 → 打开附加选项窗口
Shift+F4 → 打开条件对话窗
Ctrl+E → 编辑机器码
Ctrl+G → 输入跟随地址
Space → 填充或修改汇编内容(NOP修改)
OD的支持的命令
表达式
CALC 表达式 -------------计算表达式的值
? 表达式 --------------同上
表达式 --------------- (第一个字符不能是字母)同上
WATCH表达式------------- 添加监视
W 表达式 ---------------同上
反汇编器
AT 表达式------------- 在反汇编中跟随
FOLLOW--------------- 表达式 同上
ORIG ----------------前往实际的 EIP
* ------------------同上
转存和堆栈
D 表达式----------- --- 在转存中跟随
DUMP 表达式 -------------同上
DA [表达式]------- ------转存为汇编格式
DB [表达式] -------------转存为十六进制(hex)字节格式
DC [表达式] -------------作为ASCII 文本转存
DD [表达式] -------------作为地址(堆栈格式)转存
DU [表达式] -------------作为 UNICODE 文本转存
DW [表达式]------------- 转存为十六进制(hex)字格式
STK 表达式-------------- 在堆栈中跟随
汇编
A 表达式 [,命令]----------- 在地址处汇编
标号和注释
L 表达式, 标号 ------------为地址指派符号标号
C 表达式, 注释 ------------在地址处作注释
断点命令
BP 表达式 [,条件] -----------在地址处设置 INT3 断点
BPX 标号 ----------------在当前模块内部的每个调用外部’标号’处设置断点
BC 表达式 --------------- 删除地址处的断点
MR 表达式1 [,表达式2] ---------设置访问范围的内存断点
MW 表达式1 [,表达式2] ---------设置写入范围的内存断点
MD -------------------移除内存断点
HR 表达式 --------------- 在访问地址处设置一个字节的硬件断点
HW 表达式 --------------- 在写入地址处设置一个字节的的硬件断点
HE 表达式 --------------- 在执行地址处设置硬件断点
HD [表达式] -------------- 移除地址处的硬件断点
跟踪命令
STOP ----------------- 暂停执行
PAUSE -----------------同上
RUN ------------------运行程序
G [表达式] ---------------运行到地址处
GE [表达式] -------------- 跳过意外的句柄并运行到地址处
S ------------------- 单步进入
SI------------------- 同上
SO -------------------单步跳过
T [表达式] ---------------跟踪进入到地址处
TI [表达式] -------------- 同上
TO [表达式] -------------- 跟踪跳过到地址处
TC 条件 -----------------跟踪进入到条件处
TOC 条件 -----------------跟踪跳过到条件处
TR --------------------执行到返回
TU --------------------执行到用户代码
ollydbg
窗口
LOG -------------------查看日志窗口
MOD -------------------查看可执行模块
MEM -------------------查看内存窗口
CPU -------------------查看 CPU 窗口
CS --------------------查看调用堆栈
BRK --------------------查看断点窗口
OPT --------------------编辑选项
杂项命令
EXIT -------------------关闭 OllyDbg
QUIT -------------------同上
OPEN [文件名] -------------- 打开待调试的可执行文件
CLOSE ------------------ 关闭调试的程序
RST ------------------- 重新载入当前程序
HELP -------------------显示本帮助
HELP OllyDbg -------------- 显示 OllyDbg 帮助
HELP API函数帮助完整文件名 --------显示 API
1.要从键盘上选择多行,
按Shift键Up/Down箭头
或者PgDn键;一个字节一个字节滚动反汇编命令,按Ctrl键并按Up/Down箭头;
2.如果要修改多处代码,可以
在每次修改后的代码处(拖动鼠标可以选取多行)右击选择复制到可执行文件,最后一起使用复制文件功能保存到文件;
3.让OD显示MFC42.DLL中的函数:打开Debug(
调试
)/Select import libraries(
选择导入库
),单击弹出的对话框中Add(
添加
),在弹出的对话框中选择“MFC42.LIB”并打开,重新载入MFC程序即可;
4.让OD轻松躲过ANTI:在“X语言”
开启后运行OD
,并用Attach(
附加
)系上它就可以轻松通过检查,而且在OD系上它后仍然可以用CTRL+A进行分析;
5.轻松对付调用MessageBoxA以及类似的模态对话框的程序:
首先用OD加载目标程序
,如果不能加载用上面的方法“Attach”目标程序;然后,
F9运行
,并且有意让
目标程序显示MessageBox
,然后
切换到OD中,F12暂停
,如:
0041201F |> 53 PUSH EBX ; /Style
00412020 |. 57 PUSH EDI ; |Title
00412021 |. FF75 08 PUSH [ARG.1] ; |Text
00412024 |. FF75 F4 PUSH [LOCAL.3] ; |hOwner
00412027 |. FF15 A8534100 CALL DWORD PTR DS:[4153A8] ; /MessageBoxA
0041202D |. 85F6 TEST ESI, ESI ; //
停在此处
0041202F |. 8BF8 MOV EDI, EAX
00412031 |. 74 05 JE SHORT 1551-CRA.00412038
F8单步一下
切换到MessageBox中,
确认被OD中断
。可以看见上面的代码41201F处有一个>,说明可以从某段代码跳转到此处,选择41201F这一行,在Information栏看见一句“
JUMP FROM 412003
”,
右键选择GO TO JUMP FROM 412003
回到412003,一般都是条件跳转,上面的内容就是比较的地方啦。
6.使用OD的Track(跟踪)功能:载入目标程序,在Debug(调试)中选择Open or clear run track(
打开或清除run跟踪
),然后就可以用
CTRL+F11或CTRL+F12开启Track into和Track over
了。当我们暂停程序的时候,可以用小键盘上的“+”,“-”,“*”来控制TRACK功能。
“Track into”和运行类似,但是记录所有指令以及寄存器变化。并且会自动进入所有的CALL中
“Track over”和“Track into”类似,但是不进入CALL
“+”用来显示TRACK缓冲区中的下一条指令
“-”用来显示TRACK缓冲区中的上一条指令
“*”用来发返回当前指令