OllyDBG 入门之三–简介及常用命令

  • Post author:
  • Post category:其他




反汇编窗口

在反汇编器中双击以下的栏或选项完成相应操作:

· 地址栏:      显示相对被单击地址的地址;再次双击其地址返回到标准地址模式。

· 十六进制转存栏:触发设置无条件断点。

· 反汇编命令栏: 调用汇编器(可以直接修改汇编代码)。

· 注释栏:       允许你增加或编辑与该行汇编命令相关性的注释。



常用快捷键



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缓冲区中的上一条指令

“*”用来发返回当前指令