OllyDbg的基本使用
注:内容整理自《逆向工程核心原理》,结合我的OllyDbg版本修改了一些内容
1. OllyDbg常用命令及其快捷键
| 指令 | 快捷键 | 含义 |
| Restart | Ctrl+F2 | 重新开始调试 |
| Step Into | F7 | 执行一句OP code,若遇到CALL,进入函数代码内部 |
| Step Over | F8 | 执行一句OP code,若遇到CALL,仅执行函数自身,不跟随进入 |
| Run | F9 | 运行(遇到断点时暂停) |
| Execute till return | Ctrl+F9 | 执行函数代码内的命令,直到遇到RETN命令,用于跳出函数体 |
| Execute till cursor | F4 | 执行到光标所在位置 |
| Comment | ; | 添加注释 |
| User-defined comment | 鼠标右键菜单Search for-User defined comment | 查看用户输入的注释目录 |
| Label | : | 添加标签 |
| User-defined label | 鼠标右键菜单Search for-User defined Label | 查看用户输入的标签目录 |
| Breakpoint | F2 | 设置或取消断点 |
| 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 data | Ctrl+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,保存为新的可执行文件即可。
②在其他内存区域新建字符串并传递给消息函数
待补充
OllyDbg的基本使用的更多相关文章
- OllyDBG 1.10
OllyDBG 1.10 OllyDBG.exeOllyDBG SoftICE文件->打开 (快捷键是 F3)F2 断点 F9F8 步过 F10F7 步入 F8F4 运行到位置 F7F9 运行 ...
- RockWare RockWorks的Ollydbg调试过程及注册机(破解)思路
最近拿到了RockWorks15的安装包,可惜没有破解,试用也只能用14天.用PEiD工具察看了一下,Delphi编写的程序,竟然没加壳.本想用OllyDBG调试进去爆破一下,不意发现注册码很简单,如 ...
- ollydbg z
通达信l2密码器方法: 1:使用Ollydbg,点文件,打开,选择通达信的可执行文件(或者把通达信的执行文件直接拖进Ollydbg的窗口),按F9运行程序. 2:正常使用通达信,进入到K线图后,在k线 ...
- 【原创】OllyDBG 入门系列(一)-认识OllyDBG
****** http://blog.fishc.com/645.html 标 题: [原创]OllyDBG 入门系列(一)-认识OllyDBG作 者: CCDebuger时 间: 2006-0 ...
- Ollydbg 中断方法浅探
Ollydbg是一个新的32位的汇编层调试软件.适应于windows98.me.2000.xp和2003操作系统.由于他具有图形窗口界面,所以操作方便.直观,是cracker的好工具. 由于Ollyd ...
- OllyDbg 使用笔记 (二)
OllyDbg 使用笔记 (二) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 TraceMe.exe下载地址:http://pan.baidu.com/s/1c0s2twO T ...
- 反汇编动态追踪工具Ollydbg. ALD,ddd,dbg,edb...
Ollydbg 通常称作OD,是反汇编工作的常用工具,吾爱破解OD附带了118脱壳脚本和各种插件,功能非常强大,基本上不需要再附加安装其它插件了. 对OD的窗口签名进行了更改,从而避免被针对性检测 修 ...
- OllyDbg 使用注意事项 (十)
OllyDbg 用笔记 (十) 參考 书:<加密与解密> 视频:小甲鱼 解密系列 视频 演示样例程序下载地址:http://pan.baidu.com/s/1kT1ce83 这个程序能够从 ...
- OllyDBG V1.10聆风听雨汉化版
软件名称:OllyDBG V1.10聆风听雨汉化版 软件语言: 简体中文 授权方式: 免费软件 运行环境: Win 32位/64位 软件大小: 3.84MB 图片预览: 软件简介: Ollydbg2. ...
- 32位汇编第一讲x86和8086的区别,以及OllyDbg调试器的使用
32位汇编第一讲x86和8086的区别,以及OllyDbg调试器的使用 一丶32位(x86也称为80386)与8086(16位)汇编的区别 1.寄存器的改变 AX 变为 EAX 可以这样想,16位通 ...
随机推荐
- iddler抓包过程以及fiddler抓包手机添加代理后连不上网解决办法
转载自:https://blog.csdn.net/m0_37554415/article/details/80434477,感谢博主的热心分享 1.(1)电脑端打开安装好的的fiddler,打开To ...
- lambda modern C++
Lambda expressions (since C++11) Syntax [ captures ] <tparams>(optional)(c++20) ( params ) s ...
- PHP 导入数据库 sql 文件
使用PHP 可以导入sql来建立数据库.代码如下: <?php $hostname = 'localhost'; $dbname = 'test'; $username = 'root'; $p ...
- 【Maven学习】maven-enforcer-plugin的使用
我们会经常碰到这样的问题,在pom中引入了一个jar,里面默认依赖了其他的jar包.jar包一多的时候,我们很难确认哪些jar是我们需要的,哪些jar是冲突的.此时会出现很多莫名其妙的问题,什么类找不 ...
- Mac版sublime text右键open in browser 不能识别中文名解决办法
问题描述: Mac下sublime text下打开中文命名的html文件,右键open in browser,浏览器无反应. 解决思路: 要么适应软件,要么改进软件来适应. 1. 将中文名的html ...
- manjaro 清理系统
sudo pacman -Rsn $(pacman -Qdtq) sudo pacman -Scc sudo rm /var/lib/systemd/coredump/. sudo journalct ...
- 介绍nodejs中的path模块的几个方法
webpack中常用的: var path = require('path') 是nodejs中的path模块,介绍一下webpack中常用的几个path模块的方法: 应用node环境的时候,这个pa ...
- Linux 命令学习之cd
功能说明: cd 命令是 linux 最基本的命令语句,其他的命令都会依赖与 cd 命令.因此学好 cd 命令是必须的. 语 法:cd [目的目录] 补充说明:cd指令可让用户在不同的目录间切换,需要 ...
- MarkDown编辑使用指南
MarkDown Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 区块元素 标题title # h1 ## h2 ### h3 # ...
- 什么是 JWT -- JSON WEB TOKEN
看链接:http://www.jianshu.com/p/576dbf44b2ae 来个工具类: import java.io.Serializable; import java.util.Date; ...