OllyDbg使用技巧总结

OllyDbg(简称od)是Win32汇编器级的分析调试器。

下载:

http://www.ollydbg.de/

参考资料(日文):

sp-.up.seesaa.net/image/kyozai.html

简单用法:

(1)打开exe

File->Open

(2)附到进程(假如要调试服务进程或者一些特殊运行方式的程序,

但执行暂停可能会破坏进程的处理)

File->Attach

(3)查找API入口表(用于下API断点)

切换模块:在反汇编窗口右键->View->Module 'XXX'

(通常是你正在调试的那个exe名称,如果没有就是说现在就在此模块上,不需要切换)

然后在反汇编窗口右键->Search for->Name(label) in current module

弹出N窗口(Names),选择一个DLL入口函数(例如MSVCRT.exit),右键执行API相关操作(最常见的是下断点或日志断点)

如果列表太长,可以粘贴到文本文件中进行搜索。

(4)查找API的引用

常用于API断点的添加。

照(3)所示打开N窗口后,

N窗口中右键->Find references to import

弹出R窗口(References),然后双击选择位置。

C窗口(CPU)会跳到指定的位置,并且在注释中提示该API的参数信息。例如

00401131   . 6A 30          PUSH 30                                  ; /BeepType = MB_ICONEXCLAMATION

00401133   . FF15 5C204000  CALL DWORD PTR DS:[<&USER32.MessageBeep>>; \MessageBeep

另一种方法是直接在C窗口右键->Search for All Intermodular calls打开R窗口,

然后双击直接跳到引用的地方,再执行断点等操作。

(5)日志断点

日志断点不会中断程序,而是在程序通过断点处时记录下信息,而方便分析。

在C窗口的反汇编行中右键->Breakpoint->Conditional Log

或R窗口的指定行中右键->Set log breakpoint on every command

弹出对话框,一般OK是灰色的,需要修改单选框。

例如我对运行于该汇编指令处的EBX上的字符串值感兴趣,可以

Expression输入STRING [EBX]

Pause program选择Never。

Log value of expression选择Always。

B窗口(Breakpoints)就会多出一条断点。

日志记录会输出到L窗口(Log data)

关于od的表达式用法可参考

http://hi.baidu.com/hateme_xm/blog/item/3b6d8b81271329d3bc3e1e9c.html

(6)断点和步进

在C窗口双击即可添加断点,然后Debug->Run运行程序。

程序中断后执行Debug->Step into/Step over进行调试,观察堆栈和寄存器的数值变化。

(7)修改exe内容

在C窗口中某反汇编语句上按空格,然后输入新的汇编指令。

修改后右键->Copy to executable->All modifications

弹出D窗口(File)

然后右键->Save File

另存为新的文件。

(8)条件断点和Trace

条件断点与断点的不同在于它是针对数据而非指令。

条件断点在Trace下有效,而在Run下无效。

添加条件断点:

Debug->Set conditon(例如:Command is one of PUSHFD)

然后Debug->Trace into

或者Debug->Animate into(动画显示)

(9)Trace日志

当执行Trace操作(例如Debug->Trace into),

...窗口(Run trace)会保存所有执行过的指令。

右键->Log to file保存为txt文件

用于比较两次Trace的日志以发现代码覆盖的不同。

(10)文本搜索

有时需要知道用户界面的某条字符串在exe的哪个位置。

方法是C窗口Alt+F10(或右键)->Search for->All referenced text strings

弹出R窗口,双击跳到引用处。

如果文本太多,可以考虑复制到记事本中搜索,或者

R窗口右键->Search for text

(11) etc

F9运行

Ctrl+F2结束后重新加载

(Options->Debugging options对话框->

Warn when terminating active process)

F8步进

F2断点

F7步入

Alt+B:B窗口(断点)

C窗口右面的寄存器窗格虽然没有滚动条,但是可以拖动

双击修改汇编,如果按Ctrl+F2重新加载,会变成灰色,

??每次修改应保存

??可以用右键->Backup->Load backup from file重新应用修改过的地方

Copy to executable->All Modifications

相关推荐