OLLYDBG的学习和使用
常用快捷键
F2: 设置断点
F7: 单步跳入
F8: 单步跳过
Ctrl+F7: 可视化反复单步跳入
Ctrl+F8: 可视化反复单步跳过
Ctrl+F11: 不可视反复单步跳入
Ctrl+F12: 不可视反复单步跳过
F9: 跳出(?)
F4: 运行到光标处
Ctrl+N: 打开动态链接库的函数表(导入表)
此时就可以输入函数名来查找,找到后回车即可跳转到代码.
Alt+M: 查看内存
Alt+L: 打开"Log data"窗口
界面按钮
C按钮
将反汇编面板
的光标定位到当前的IP指针处.
B按钮
打开断点窗口
,查看断点明细
W按钮
列出窗口相关的参数.
常用断点
INT 3-软中断
该指令机器码为0xCC
,因此也常被称为"CC指令",被调试进程执行到INT 3指令时导致一个异常时,调试器就会捕获该异常,从而停在断点处,然后将断点处的指令恢复成原来的指令.
优点是可以下无数个断点.
缺点是改变了机器码,容易被检测到,例如有些软件会检测API的首地址是否为0xCC,以此来判断是否被下断点.
用C语言来检测的话,方法是:取得检测函数的地址,然后读取其第一个字节,判断是否为0xCC.
躲过检测的方法是将断点设在函数内部或末尾.
硬件断点
硬件断点和DRx调试寄存器
有关:
DRx调试寄存器共有8个(DR0~DR7),区别如下:
- DR0~DR7: 调试地址寄存器,用于保存需要监视的地址,例如设置硬件断点.
- DR4~DR5: 保留,未公开具体用途.
- DR6: 调试寄存器组状态寄存器.
- DR7: 调试寄存器组控制寄存器.
所以最多可以设置4个硬件断点.
内存断点
原理是将指定地址赋予不可访问/不可写属性来引发异常,OD截取该异常后检查是否为断点地址,如果是则进行中断.
消息断点
Windows本身是消息驱动的,可以尝试使用消息断点,使用W按钮
打开窗口信息,选择需要的条目(例如"Button"),然后在弹出界面的菜单中选择需要的消息即可.
条件断点
可以使用一些条件来设置断点,例如寄存器条件,存储器条件
插件使用
CmdBar
常用指令如下:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 WAHAHA's blog!
评论