1个回答
2013-03-29
展开全部
ollydbg的界面: 菜单: 文件: 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(显示于程序的插件菜单中) 聆风听雨整理
AiPPT
2024-09-19 广告
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图...
点击进入详情页
本回答由AiPPT提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询