工具栏
各种窗口切换
1.日志窗口(L):
2.模块窗口(E):查看每个模块的内存基址
3.内存窗口(M):查看每一个模块的段,所占用的内存区域
4.线程窗口(T):线程信息
5.窗口(W):查看程序的窗口句柄,窗口名,风格样式,回调函数等信息
6.句柄(H):
7.反汇编窗口( C):也就是我们的汇编代码显示窗口—很重要
8.补丁窗口(/):
9:堆栈窗口(K):可以查看调用堆栈,调试时堆栈回溯—很重要
10.断点窗口(B):所有的F2
断点都显示在这里
11.参考( R):比如如果你显示了参考字符串,可以在这个窗口找到
12.run跟踪窗口(…):
如何开始调试
- 直接调试:
- 拖拽方式:直接把文件拖拽到OD打开
- 菜单栏-文件-打开
- 附加调试:
- 可以调试正在运行的程序
- 设置为默认的调试器:
- 在程序崩溃的时候,能够接管程序,调试错误
- 调试DLL文件:
- Dll一般不是作为独立的程序运行,所以也不能执行
- OD能够独立的调试DLL,OD自己运行了一个程序,程序使用LoadLibrary加载DLL,然后可以调试DLL
OD主界面:
主要分为四部分:反汇编窗口、寄存器窗口、内存窗口、堆栈窗口
数据窗口支持查看各种类型的数据:
常用的几种形式:
- 十六进制 +ASC或者UNICODE的方式
- 长整型中的地址的形式(识别IAT比较明确的形式)
- 反汇编形式:
常用功能快捷键
术语
断点:程序被中断的地方
领空:程序自己程序码所处的位置
程序入口点,也叫OEP:程序在开始运行时执行的第一条指令的地址
快捷键
F2: 设置断点或双击HEX数据列
F8: 单步步过
F7: 单步步入,遇到CALL指令会进入其中,进入后会停在子程序第一条指令前
F4: 运行到选定位置,直接运行到光标所在位置暂停
F9: 运行,按下这个件如果没有设置相应断点的话,被调式的程序将直接开始运行
Ctrl+F9: 执行到返回,此命令在执行到一个ret指令时暂停,常用于从系统领空返回到我们调试的程序领空
Alt+F9: 执行到用户代码,可用于从系统领空快速返回到我们调试的程序领空
- 跳转地址
- 在jmp或者call指令上按回车,跟踪进入
- +号前进一步
- -号后退一步
- 修改汇编指令
- 双击反汇编窗口
- 按下空格
- 修改内存,编辑二进制代码
- Ctrl+E,不同窗口编辑不同地方
- 查找指令
- Ctrl+F 搜索一条指令
- Ctrl+L 搜索下一条指令
- Ctrl+s 搜索多条指令
- 分析代码
- Ctrl+A 分析代码
- 注释
- 左键点击注释列
- 右键点击注释,添加注释
- 快捷方式 ---- 分号注释
- 添加标签
- 只能给地址添加标签,不能是[ebp+8]
- 冒号(快捷方式)
- 查找指定地址
- Ctrl+G
- 输入地址或者API函数名
- 查找API地址==>(在内存窗口使用dp+MessageBoxA也能做到)
- 字符串搜索
- 使用插件 ----- 中文搜索引擎
- 右键—查看—所有文本字符串
- 重新启动程序
- Ctrl+F2
- 内存窗口命令栏
- dd +地址 看该地址内存
- dp +MessageBoxA 定位API函数
OD分析信息
我们分析程序下的断点,添加的标签,注释等到信息,都保存在UDD文件夹中
如果想让别人分享你的分析成果,可以把UDD文件发给对方