Ollydbg

来源:互联网 发布:同花顺配资软件 编辑:程序博客网 时间:2024/04/28 14:49

文件: 
1.其中包括该菜单的下部有上次打开的纪录,该纪录保存有上次未清除的断点. 

2.附加.对付那些Anti-Debug程序.先运行程序,再运行od,文件-->附加. 
查看: 
1.执行模块(Alt+E),查看程序使用的动态链接库 
2.查看断点.Alt+B 
调试: 
1.运行(F9)加载程序后,运行! 
2.暂停(F12) 
3.单步进入(F7)遇见CALL进入!进入该子程序. 
4.单步跳过(F8)遇见CALL不进去! 
5.执行到返回(ALT+F9)就是执行到该子程的返回语句 
ollydbg的16进制编辑功能.类似与hiew,hex workshop 
查看-->文件 
二进制文件编辑功能.查看-->文件,打开的文件是二进制显示.选中要改变的机器指令,空格,修改,右击-->保存. 
ollydbg的四个区域 
左上角是cpu窗口,分别是地址,机器码,汇编代码,注释;注释添加方便,而且还能即时显示函数的调用结果,返回值. 
右上角是寄存器窗口,但不仅仅反映寄存器的状况,还有好多东东;双击即可改变Eflag的值,对于寄存器,指令执行后发生改变的寄存器会用红色显示. 
cpu窗口下面还有一个小窗口,显示当前操作改变的寄存器状态. 不错; 
左下角是内存窗口.可以ascii或者unicode两种方式显示内存信息; 
右下角的是当前堆栈情况,还有注释啊. 
使用: 
F3选择打开程序. 
F9执行程序. 
下断点: 
1.对函数下下断点 
在代码区右击-->搜索-->当前模块中的名称(ctrl+N),在跳出来的对话框中选择需要下的断点函数.->右击->查找导入参考(enter),按F2下断点.如果有多个地方调用了该函数就这样操作。 
2.在需要的地方下断点 F2 
添加注释: 
在代码区第四列,右击-->注释 
查看内存地址 
右击内存地址列-->前往-->输入要查看的内存地址 
在函数lstrlen的注释的上方,有一个变量string,当执行到该函数的时候,string后面会出现lstrlen函数的参数字符串.在实际使用中一般是输入的字符串.(很好用哦) 
类似的还有lstrcmp,上面有string1,string2能够显示将要比较的两个字符串. 
另外,一般在执行getwindowtext等函数后,右边寄存器列,eax会显示函数的返回值,即取到的内容.同时内存中也会有显示. 
在反汇编中选中一条命令,如果其中有用到内存中的地址,右击-->在转存中跟随-->直接常数 
此时内存地址会显示指令中引用到的内存字符 
拷贝功能十分强大.直接选择要拷贝的内容.右击-->复制-->文件or剪贴板 
ollydbg的条件断点可以按寄存器,存储器,消息(必须是消息的数字,如wm_command就是111)等等设断,非常强大,一旦设了之后记录到文件中,下次restart程序还能用,不用拿笔记,很方便。 
显示跳转路径: 
选项-->调试设置-->cpu页-->显示跳转的方向,显示跳转的路径,如果跳转没有实现则显示灰色路径。在cpu窗口中,机器码的前面显示">"符号.同时,在cpu窗口下的小缝中会显示跳转路径,从何跳转而来.右击-->前往...一般都是条件跳转,上面的内容就是比较的地方啦。:) 
跟踪功能: 
选项-->调试跟踪-->跟踪:设置运行跟踪的缓存大小.越大越好. 
调试-->打开或清除运行跟踪 
然后我们就可以用CTRL+F11或CTRL+F12开启“跟踪进入”和“ 跟踪跳过”了。当我们暂停程序的时候,可以用小键盘上的“+”,“-”,“*”来控制跟踪功能了。 
其中,“跟踪进入”和运行类似,但是记录所有指令以及寄存器变化。并且会自动进入所有的CALL中。 
“ 跟踪跳过”和“跟踪进入”类似,但是不进入CALL 
“+”用来显示跟踪缓冲区中的下一条指令 
“-”用来显示跟踪缓冲区中的上一条指令 
“*”用来发返回当前指令 
让OD显示MFC42.DLL中的函数 
打开调试-->选择导入库-->添加-->选择MFC43.LIB加入.重新载入MFC程序,就可以看到call后面的api函数了. 
动态暂停以messagebox为例) 
先运行目标程序,再运行od,选择文件-->附加.在目标程序运行出现对话框时,切换至od,F12暂停. 
字符串参考: 
在汇编代码区,右击-->搜索-->字符参考 
更改二进制文件: 
方法1.查看-->文件,打开文件,找到欲修改的偏移,使用机器码修改,然后右击保存文件.缺点是需要使用其他软件来获取偏移地址. 
方法2.直接在反汇编代码区更改,这时可以使用汇编代码更改,不用记机器码.完了.右击-->复制到可执行文件-->保存文件.很是方便哪! 
关于虚拟地址和偏移地址: ollydbg果然强大,太强大了,在欲修改的指令处右击-->复制到可执行文件,弹出窗口中光标所在行即是欲修改的指令所在的偏移地址,右击-->汇编,直接修改汇编指令,不用记机器码,又不用虚拟地址到偏移地址的转换.改完后保存文件.爽丫! 
olldbg 下怎么下消息断点? 
如在softice 中下 BMSG 0084 WM_DESTROY,在olldbg下该怎么做? 
不如下断 SendMessage,PostMessage,程序中的消息不一定都经过消息循环。

Ollydbg下消息断点的一个方法 
原文: 
SoftIce can trace application messages. And Olly? 
by FuZzYBiT 
SoftIce can trace application messages. And Olly? 
And so does OllyDbg. That’s a very “hidden feature”. I guess it is sooo useful. 
1. Open program 
2. Names window [CTRL+N in CPU Window] 
3. Find User32.TranslateMessage API 
4. right click/FindReferences 
5. conditional breakpoint [SHIFT+F4] 
6. expression: MSG 
7. Log function arguments: Always 
If you cannot find it, try right click SEARCH FOR-> ALL INTERMODULAR CALLS. 
But if I want to trap a specific message like WM_COMMAND? 
To Log Only WM_COMMAND 
Do it in this fashion: 
1. Open program 
2. Names window [CTRL+N in CPU Window] 
3. Find User32.TranslateMessage API 
4. right click/FindReferences 
5. conditional breakpoint [SHIFT+F4] 
6. Condtion box: MSG==WM_COMMAND 
7. Log function arguments: On Condition 
If you can’t find User32.TranslateMessage API, do the same as above. 
翻译: 
SoftIce 能够跟踪应用程序的消息,那么OllyDbg呢? 
by FuZzYBiT 
OllyDbg也是可以的,那是一个非常"隐蔽的功能"。它是如此的有用。 
1. 打开程序 
2. 名字窗口[ 在CPU窗口中按CTRL+N ] 
3. 查找 User32.TranslateMessage API 
4. 右击/FindReferences(查找参考) 
5. 下条件断点 [SHIFT+F4] 
6. 表达式: MSG 
7. 记录函数参数:永远 
如果你不能找到它,试试右击鼠标,然后搜索全部模块中的名称。 
但是如果我想要捕捉一个特定的消息如WM_COMMAND呢? 
只对WM_COMMAND记录 
用这个方法做: 
1. 打开一个程序 
2. 名字窗口[ 在CPU窗口中按CTRL+N ] 
3. 查找 User32.TranslateMessage API 
4. 右击/FindReferences(查找参考) 
5. 下条件断点 [SHIFT+F4] 
6. 条件框:MSG==WM_COMMAND 
7. 记录函数参数: 条件满足时 
如果你不能找到User32.TranslateMessage API,象上面那样做。 
以下命令适用于 OllyDbg 的命令行插件 Cmdline.dll(显示于程序的插件菜单中) 
聆风听雨整理 
===============================================================
命令行插件支持的命令 
CALC 
判断表达式 
WATCH 
添加监视表达式 
AT 
在指定地址进行反汇编 
FOLLOW 
跟随命令 
orIG 
反汇编于 EIP 
DUMP 
在指定地址进行转存 
DA 
转存为反汇编代码 
DB 
使用十六进制字节格式转存 
DC 
使用 ASCII 格式转存 
DD 
转存在堆栈格式 
DU 
转存在 UNICODE 格式 
DW 
使用十六进制字词格式转存 
STK 
前往堆栈中的地址 
AS 
(AS + 地址 + 字符串) 
在指定地址进行汇编 
BP 
进行条件中断(有条件的断点) 
BPX 
中断在全部调用 (Call) 
BPD 
清除全部调用中的断点 
BC 
清除断点 
MR 
内存断点于访问时 
MW 
内存断点于写入时 
MD 
清除内存断点 
HR 
访问时进行硬件中断 
HW 
写入时进行硬件中断 
HE 
执行时进行硬件中断 
HD 
清除硬件断点 
STOP 
停止运行程序调试 
PAUSE 
暂停执行程序调试 
RUN 
运行程序进行调试 
GE 
运行和通过例外 
SI 
单步进入 Call 中 
SO 
步过 Call 
TI 
跟踪进入直到地址 
TO 
跟踪步过直到地址 
TC 
跟踪进入直到满足条件 
TOC 
跟踪步过直到满足条件 
TR 
运行直到返回 
TU 
运行直到用户代码 
LOG 
查看记录窗口 
MOD 
查看模块窗口 
MEM 
查看内存窗口 
CPU 
查看 CPU 窗口 
CS 
查看 Call 堆栈 
BRK 
查看断点窗口 
OPT 
打开选项设置窗口 
EXIT 
退出 OllyDbg 
QUIT 
退出 OllyDbg 
OPEN 
打开一个可执行文件 
CLOSE 
关闭可执行文件 
RST 
重新运行当前程序 
HELP 
查看 API 函数的帮助 
原创粉丝点击