OllyDbg调试器的使用
CPU窗口
我们进行载入的时候 主要返回的是CPU窗口 是最主要的窗口 对应面板的C
反汇编窗口
我们先查看CPU窗口 打开后是有 5个面板
主要查看反汇编窗口
我们可以对这些列进行操作
操作都是进行双击
地址: 显示被双击行地址的相对地址 再次双击返回标准地址模式
这里就能出现相对于双击地址的其他地址的偏移量
十六进制机器码:设置或取消无条件断点 对应快捷键是F12
反汇编:调用汇编器 可直接修改汇编代码 快捷键是空格
注释:添加注释 快捷键是;
从键盘选择多行 按住shift +上下键 可以实现 也可以右键快捷菜单命令实现
ctrl + 上下 可以滚动汇编(对于数据和代码混合 这个方式很有用)
信息面板
在进行动态跟踪的时候 信息面板窗口 显示指令和寄存器的值 API函数的调用提示和跳转信息
数据面板
数据面板是以十六进制和字符方式显示文件在内存中的数据
要显示制定的内存地址数据
右键快捷键的 go to expression 或者 ctrl+G 实现
寄存器面板
寄存器面板显示CPU各个寄存器的值 支持浮点、MMX、3DNow!寄存器
可以右键或者窗口标题切换显示寄存器的方式
栈面板
显示栈的内容 就是 ESP指向地址的内容 将数据存入栈叫做入栈
从栈取出数据叫做出栈
栈窗口很重要 各个API函数和子程序都是利用它传递参数
OllyDbg的配置
在选项界面 有两个设置 一个是界面设置 一个是调试设置
界面设置
这里存放着两个路径
UDD 是 OllyDbg的工程文件 保存着当前调试的一些状态
断点 注释等
插件是用于扩充功能 当我们把插件复制到 plugin目录中
相对应的选项就会在 插件中显示出来
调试设置
加载符号文件
使用lib文件(符号库) 可以让OllyDbg 以函数名字显示DLL 中的函数
在调试中 选择导入库
基本操作
对于windows程序 只要API被调用 我们几乎就可以得到消息
所以对于一个windows程序
选择API函数作为切入点就很重要 只要有经验 就可以很容易
这里看雪给出了一个测试软件
通过看雪我们可以了解程序的运行
这个就是这个程序的流程
我们进行OllyDbg调试
调试
因为我们设置了 winmain处
所以打开程序后会得到程序执行的第一条指令处
这里 004013A0就是这个程序的入口(EntryPoint)
通过快捷键F7可以执行一条指令
EIP指向当前要执行的指令 然后我们进行执行 EIP就会指向下一条指令
我们可以通过对地址右键 然后选择此处为新的EIP来让程序从此处开始
单步跟踪
F7 单步步进 遇到call指令进行跟进
F8 单步步过 遇到cal指令路过 不跟进
Ctrl+F9 直到ret指令中断
ATL+F9 如果进入系统领空 此命令可以瞬间返回到程序领空
F9 运行程序
F2 设置断点
其中 F8在调试的时候很频繁
如果F8 遇到就路过这个call
F7 F8的区别就是
遇到call loop 是否跳过或者跟进
遇到call 就会去call 里面
call 00401DA0就是调用 这个地址的子程序
一旦子程序运行完毕 就会返回call的下一条指令
这里就是 004013FFh
看栈窗口就能发现 调用call 下一条指令的地址就被压入栈内
按-号可以返回上一步地址
双击EIP可以返回当前地址
如果需要重复 F8 F7 我们可以使用CTRL+F8/F7
这个快捷键会直到用户 按esc 或者 F12 或者遇到其他断点 停止
如果我们已经进入了call 指令 想返回原本调用call的地方 我们可以使用ctrl+F9
这里进入了系统领空
按Ctrl+F9返回程序领空 因为这里进入了 DLL地址
领空 就是在某一时刻CPU的 cs:EIP执行某段代码的所有者
如果我们想直接运行
如果想重新运行
或者 Ctrl+F12
如果程序进入死循环 F12暂停程序
设置断点
断点是调试器非常重要的部分
可以让程序中断在指定的地方
F12作为快捷键 就可以设置断点
设置断点后 通过ALT+B 或者
可以访问断点窗口
我们可以在窗口中对断点进行操作
下面对这个程序进行完整的调试分析
先按F9 让程序运行起来
方法1 猜函数
然后我们可以猜测函数
因为我们是输入文本框里面 所以肯定会调用 读取文本框的API函数
16位:GetDlgItemText GetWindowText
32位(ANSI):GetDlgItemTextA GetWindowTextA
32位(Unicode):GetDlgItemTextW GetWindowTextW
CTRL+G设置断点
注意要大小写
这里是系统USER32.DLL的GetDlgItemTextA函数的入口
在此处设置一个断点
如果这个函数被调用 就会中断程序
设置了断点 我们就可以捕捉任何对此函数的调用了
输入姓名和序列号 然后check 就会在OllyDbg中中断
方法二
在反汇编中右键 打开查找当前模块的名称 或者 CTRL+N 获取 TraceMe的API函数
按 enter进入
我们继续 调试
按F8走出GetDlgItemTextA函数
这里是这个函数的参数 我们能够在反汇编里面找到 并且已经给出注释