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

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值