OllyDbg的基本使用

注:内容整理自《逆向工程核心原理》,结合我的OllyDbg版本修改了一些内容

1. OllyDbg常用命令及其快捷键

指令快捷键含义
RestartCtrl+F2重新开始调试
Step IntoF7执行一句OP code,若遇到CALL,进入函数代码内部
Step OverF8执行一句OP code,若遇到CALL,仅执行函数自身,不跟随进入
RunF9运行(遇到断点时暂停)
 Execute till returnCtrl+F9  执行函数代码内的命令,直到遇到RETN命令,用于跳出函数体
 Execute till cursorF4 执行到光标所在位置 
 Comment添加注释 
User-defined comment鼠标右键菜单Search for-User defined comment查看用户输入的注释目录
Label:添加标签
User-defined label鼠标右键菜单Search for-User defined Label查看用户输入的标签目录
BreakpointF2设置或取消断点
All referenced text strings鼠标右键菜单Search for-All referenced text strings查看代码中引用的字符串
All intermodular calls鼠标右键菜单Search for-All intermodular calls查看代码中调用的所有API函数
Name in all modules鼠标右键菜单Search for-Name in all modules查看所有API函数
Edit dataCtrl+E编辑数据
Assemble空格键编写汇编代码
Copy to executable file鼠标右键菜单Copy to executable file创建文本副本(修改的项目被保留)

2. 设置点的方法(这里我们假设大本营的地址为004010ED)

①Goto命令

执行Goto命令(Ctrl+G),在打开的对话框中输入004010ED,然后单击OK按钮,这样光标就会自动定位到004010ED处

然后执行Execute till cursor(F4)命令,让调试流运行到该处

②设置断点

选中004010ED这一行(可以手动找,也可以使用上述Goto命令中的第一步),设置BreakPoint(F2),调试运行到断点处会暂停

然后执行Run debugged application(F9)即可让调试直接运行到断点处暂停

注:在OllyDbg菜单栏中选择View-Breakpoints(Alt+B),可以打开Breakpoints对话框,列出代码中设置的断点。在断点列表中双击某个断点会直接跳转到相应位置

 ③使用注释

选中004010ED这一行(可以手动找,也可以使用上述Goto命令中的第一步),按;键添加注释

在鼠标右键菜单中选择Search for-User defined comment,就能看到用户输入的所有注释,双击相应注释,光标将自动定位到相应位置

然后执行Execute till cursor(F4)命令,让调试流运行到该处

④使用标签

选中004010ED这一行(可以手动找,也可以使用上述Goto命令中的第一步),按:键为其添加标签

在鼠标右键菜单中选择Search for-User defined labels,就能看到用户设置的所有标签,双击相应标签,光标将自动定位到相应位置

然后执行Execute till cursor(F4)命令,让调试流运行到该处

3. 快速查找指定代码的方法

①代码执行法

当代码量不大且程序功能非常明确时,逐条执行指令来查找需要查找的位置。

具体方法为结合使用F8和F7

②字符串检索法

OllyDbg会先经历一个预分析过程,此过程中会查看进程内存,程序中引用的字符串和调用的API都会被摘录出来,整理到另外一个列表中,这样的列表可以使用鼠标右键菜单Search for-All referenced strings来查看

地址00401007处有一条PUSH OFFSET 00411AF0指令,该指令中引用的00411AF0处即是字符串Hello World!,双击字符串,光标将定位到00401007这一位置

使用Goto命令查看00411AF0地址处的字符串:

即是Hello World!这个字符串

③API检索法——在调用代码中设置断点

OllyDbg的预分析中不仅可以分析出程序中使用的字符串,还可以摘录出程序运行时调用的API函数列表,可以通过鼠标右键菜单中Search for-Intermodular calls来查看该列表

双击其中的任意一行可以定位到该处所对应的代码位置,使用F2下断点即可。

④API检索法——在API代码中设置断点

我们编写的应用程序执行某种操作时(如各种IO操作),必须使用OS提供的API向OS提出请求,然后与被调用API对应的系统DLL文件就会被加载到应用程序的进程内存。使用OllyDbg中的Search for-Names可以列出被加载的DLL文件中提供的所有API

单击Name栏目按名称排序,通过键盘敲出MessageBoxW后,光标会自动定位到MessageBoxW上,双击之后就会显示其代码???(我这里好像不太行,此处存疑)

在MessageBoxW函数的内部实现中的起始地址按下F2下断点,调试时程序运行到该处就会暂停。

4. 修改字符串的方法

①直接修改字符串缓冲区

首先找到Hello World!字符串所在的位置(我这里是00411AF0),在Dump窗口中按Ctrl+G,跳转到这一位置,使用鼠标选中Hello World这一字符串,按Ctrl+E快捷键打开编辑窗口

在弹出的编辑窗口的UNICODE文本框中输入Hello Reversing字符串,Unicode字符串必须以NULL结束,它占据两个字节(00 00),添加NULL只能在HEX文本框中添加,修改完毕之后点击OK即可

这种方法的优点是使用起来非常简单,缺点是对新字符串的长度有限制,新字符串的长度不应比原字符串长(虽然可执行文件保存时一般会给字符串多留出一些空间)

注意:这种修改方式只是暂时的,终止调试后,程序中的字符串仍然没有改变。要把这种更改保存下来,就要把更改后的程序另保存为一个可执行文件。

方法如下:在Dump窗口中,选中更改后的Hello Reversing字符串,单击鼠标右键Edit-Copy to Executable,会打开Hex窗口,在弹出的Hex窗口中点击鼠标右键,选择Save file,保存为新的可执行文件即可。

②在其他内存区域新建字符串并传递给消息函数

待补充

转载于:https://www.cnblogs.com/Briddle-ch/p/10340100.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值