OllyDBG基本操作
1) 查找调用的API 函数。在 OllyDBG 的反汇编窗口中右击鼠标,在弹出菜单中选择 查找->当前模块中的名称 (标签),或者我们通过按 CTR+N 组合键也可以达到同样的效果,界面输入可搜索。右键菜单可下断点
2) 查找引用字符串。反汇编窗口中右击,出来一个菜单,我们在 查找->所有参考文本字串 上左键点击
3) 数据窗口,选择其中的转到->表达式,找内存地址。内存断点只在当前调试的进程中有效,就是说你如果重新载入程序的话内存断点就自动删除了。且内存断点每一时刻只能有一个
4) 函数调用是先把最后一个参数压栈,参数压栈顺序是从后往前。这就是一般比较常见的 stdcall 调用约定。
5) RUN 跟踪就是把被调试程序执行过的指令保存下来,让你可以查看被调试程序运行期间干了哪些事。RUN 跟踪会把地址、寄存器的内容、消息以及已知的操作数记录到 RUN 跟踪缓冲区中,你可以通过查看 RUN 跟踪的记录来了解程序执行了那些指令。汇编窗口,右键,RUN跟踪->添加所有函数的入口,运行,用这个可以跟踪,如运行过了会有红色显示出来。点运行程序,这样程序就运行完了,就可以开始分析了。首先还是找那个范围出来吧。点查看菜单--run跟踪--选择一行--点右键选“统计模块”,统计结果中的计数,是运行这个程序块的次数。对每个一次的下端分析。在运行run跟踪前最好先大体定下位,跳过一些无关代码
6) 点击菜单 查看->窗口(或者点击工具栏上那个“W”的图标),查看窗口信息
7) 汇编功能。双击汇编代码可以改写保存
8) binary copy/paste。用binary copy把代码放到notepad,下次用时再binary paste
9) 更改二进制文件。方法1.查看-->文件,打开文件,找到欲修改的偏移,使用机器码修改,然后右击保存文件.方法2.直接在反汇编代码区更改,这时可以使用汇编代码更改,不用记机器码.完了.右击-->复制到可执行文件-->保存文件。
10) bp与bpx的区别。bp address,string -- Break with condition [对address或string下断点]。bpx string -- Break on all calls [对call string下断点]
11) 暂停。F9运行目标程序,并且有意让目标程序显示“MessageBox”,然后切换到OD中,F12暂停。在程序某段的开头第一行代码下断(下面也行,这样可以避免不必要的干扰)中断后在堆栈中的第一行“选反汇编中跟踪”就可以返回到上一层的调用这里的地方了,回到上一层后,如果发现关键段不是这段,再在此段的开头第一行下断,向上找。这样可以一层一层向上找,直到找到最初的调用的CALL,这里就是关键段了!
12) 条件断点。bp CreateFileA,[[STRING [esp+4]]]=="abcdefghigklmn"
13) 万能断点。HMEMCPY(俗称为万能断点)
14) 第一 寻常断点,F2键,在命令窗口中输入BPX xxxxxxxx 下断。
15) 第二 API断点。1. 在代码窗口中点鼠标右键,出现功能菜单。在[搜索]选择项下有〔当前模块的名称〕和〔全部模块的名称〕俩项,选择其中的一项就打开了程序调用API的窗口,在这个窗口中选择你要跟踪的API函数名。双击这个函数就能到程序的调用地址处。然后用F2下中断。也可以在API窗口中选择需要跟踪的函数点鼠标右键出现功能菜单,选择〔在每个参考设置断点〕。同样下了断点。快捷方式:Ctrl+N 2. 在命令行窗口中输入BPX API函数名或者BP API函数名 后回车。这时出现了所有调用这个函数的地址的窗口,在这个窗口中可以看到调用这个API函数的地址已改变了颜色。说明下好了断点。
16) 第三 内存断点(跟踪关键数据的断点)。在程序运行中断时选择界面中的转存窗口,用光标选择内存中的一段关键数据(颜色会改变),然后右击鼠标出现功能菜单。选择〔断点〕项,其中有二个选择〔内存访问〕和〔内存写入〕。另外的一种方法:程序运行时如果知道关键的数据,比如我们输入的试验码、程序生成的序列号等。这时在内存中一定存在这些数据。用Alt+M打开内存窗口,在这个窗口中搜索知道的关键数据。用光标选择这些数据同样下内存中断,这种方法更容易找的关键的数据。
17) 第四 硬件断点(跟踪关键标志的断点)。三个方式〔硬件访问〕、〔硬件写入〕、〔硬件执行〕。方法:在转存窗口中选择到标志存放的内存地址处,然后选择标志值。下〔硬件写入〕中断(根据标志的字节下不同的长度)。重新运行程序你会发现Ollydbg会不断的中断在这个标志的内存地址处。在功能菜单的〔调试〕选项下选择〔硬件断点〕就打开了硬件断点的窗口,在这个窗口中选择〔跟踪〕,这时转存窗口就会来到被下中断的内存地址处。运行程序跟踪内存地址中的值就会知道被赋标志的代码,跟踪到计算的核心。〔硬件访问〕的使用可以知道程序在运行时多少地方用到了这个注册标志。
18) ALT+F9,返回到用户空间
19)
20)
21) 快捷命令栏插件。
CALC 判断表达式
WATCH 添加监视表达式
AT / FOLLOW Disassemble at address 在地址进行反汇编
ORIG Disassemble at EIP 反汇编于 EIP
DUMP Dump at address 在地址转存
DA Dump as disassembly 转存为反汇编代码
DB Dump in hex byte format 转存在十六进制字节格式
DC Dump in ASCII format 转存在 ASCII格式
DD Dump in stack format 转存在堆栈格式
DU Dump in UNICODE format 转存在 UNICODE格式
DW Dump in hex word format 转存在十六进制字词格式
STK Go to address in stack 前往堆栈中的地址
AS + 地址 +字符串 Assemble at address 在地址进行汇编
L + 地址 +字符串 Label at address 在地址进行标号
C + 地址 +字符串 Comment at address 在地址进行注释
BP Break with condition 使用条件中断
BPX Break on all calls 中断在全部调用
BPD Delete break on all calls 清除位于全部调用的断点
BC Delete breakpoint 清除断点
MR Memory breakpt on access 内存断点于访问时
MW Memory breakpt on write 内存断点于写入时
MD Remove memory breakpoint 清除内存断点
HR HW break on access 硬件中断在访问
HW HW break on write 硬件中断在写入
HE HW break on execution 硬件中断在执行
HD Remove HW breakpoint 清除硬件断点
STOP Pause execution 暂停执行
PAUSE PAUSE
RUN Run program 运行程序
Run till address 运行到地址
GE Run and pass exception 运行和通过例外
SI Step into 步入 SO Step over 步过
TI Trace in till address 跟踪进入直到地址
TO Trace over till address 跟踪步过直到地址
TC Trace in till condition 跟踪进入直到条件
TOC Trace over till condition 跟踪步过直到条件
TR Till return 直到返回
TU Till user code 直到用户代码
LOG View Log window 查看记录窗口
MOD View Modules window 查看模块窗口
MEM View Memory window 查看内存窗口
CPU View CPU window 查看 CPU窗口
CS View Call Stack 查看 Call堆栈
BRK View Breakpoints window 查看断点窗口
OPT Open Options 打开选项
EXIT / QUIT Quit OllyDbg 退出 OllyDbg
OPEN Open executable file 打开可执行文件
CLOSE Close executable 关闭程序
RST Restart current program 恢复当前程序
HELP Help on API function API函数的帮助
ASM Assemble (if command needs it's own addres, \"ASM COMMAND;ADDRESS\") 汇编 (如果命令需要自身的地址 \"ASM COMMAND;ADDRESS\")
DASM Disassemble immediate opcode 反汇编直接的机器码
FR Find reference to selected command/address 查找参考到选定的命令/地址
AC Analyse code 分析代码
SN Search for Name(label) in current module 在当前模块中搜索名称(标号)
SOB Scan object files 扫描项目文件
22)