是学不会的OD啊(一)->初次见面,请多指教

是学不会的OD啊

OD是个啥?

  • OllyDbg简称OD,是一款具有可视化界面的用户模式调试器,结合了动态调试静态分析,具有强大的反汇编引擎,能够识别数千个被C和Windows所使用的函数,并能将其参数注释出,能自动分析函数过程、循环语句、代码中的字符串等。

OD的那些看不明白的窗口

在这里插入图片描述

主窗口

在这里插入图片描述

  • 从右往左依次为:VA虚拟地址,机器码,汇编指令
  • 主窗口里面的一些标识
    在这里插入图片描述

看到那些工具栏了吗

在这里插入图片描述

各个位置双击效果

  • 地址列:显示相对被单击地址的地址,再次双击返回到标准地址模式;

  • Hex数据列:设置或取消无条件断点,对应的快捷键是F2键

  • 反汇编列:调用汇编器,可直接修改汇编代码

  • 注释列:允许增加或编辑注释

  • 寄存器窗口的标志寄存器:修改标志寄存器的值

  • 16进制窗口:弹出编辑框

  • 堆栈窗口:16进制跳转到当前双击位置

我最喜欢的快捷键来了

  • F2:设置断点,只要在光标定位的位置(上图中灰色条)按F2键即可,再按一次F2键则会删除断点
  • F8:单步步过。每按一次这个键执行一条反汇编窗口中的一条指令,遇到 CALL 等子程序不进入其代码
  • F7:单步步入。功能同单步步过(F8)类似,区别是遇到 CALL 等子程序时会进入其中,进入后首先会停留在子程序的第一条指令上
  • F4:运行到选定位置。作用就是直接运行到光标所在位置处暂停
  • F9:运行。按下这个键如果没有设置相应断点的话,被调试的程序将直接开始运行
  • CTR+F9:执行到返回。此命令在执行到一个 ret (返回指令)指令时暂停,常用于从系统领空返回到我们调试的程序领空
  • ALT+F9:执行到用户代码。可用于从系统领空快速返回到我们调试的程序领空

断点

  • 断点是调试器的一个重要功能,它能使程序中断在需要的地方,从而方便对其分析,常用的断点是int3,其原理是OllyDbg将断点处的代码设置为int3指令。
  • 设置方法:将光标移动到要设断点的行,按快捷键F2键就可以设置了,也可以双击Hex数据列
  • 设置目的:可以让软件运行的时候停在设断点的地方,以方便反复跟踪调试
  • 当关闭程序时,OllyDbg会将设置好的断点保存在UDD文件中,下次运行时还有效。

常见断点类型

  1. 软件断点(不受条件的限制):
    • 普通的f2断点CC断点,原理是在调试器会利用一些在执行时会报出异常或者中断的命令替换断点位置命令的第一个字节。一般来说,经常使用INT3 (二进制代码0xCC)作为替换指令,某些特权指令,如HLT或者CLI等,也可以作为替换指令。
  2. 内存断点(跟踪关键数据的断点):
    • 内存访问断点 or 内存写入断点,原理是对所设的地址赋予不可访问、不可写属性,这样当访问、写入的时候久会产生异常,使得OD接管异常,OD接管异常后会比较异常地址是不是断点地址,如果是就中断。每次异常时都要通过比较来确定是否应该中断,内存断点会有些慢,只能下1个内存断点。
  3. 硬件断点(跟踪关键标志的断点):
    • 现代cpu为程序调试提供了8个寄存器,名为DRx。调试器可以轻易读写被调试程序的这8个寄存器,而被调试程序不容易读写也通常不需要读写。DR0~DR3四个寄存器用来存放欲下断的地址,DR4,DR5这两个保留, DR6和DR7用来控制断点的大小和触发断点的时机。(比如说大小一个byte,触发时机为写入时)

OD 常用的插件

  • 命令行插件CmdBar

在这里插入图片描述

命令含义
?表达式计算表达式的值,如“?1+1”
D(DB,DW,DD) 表达式查看内存数据,如“D 401000” “D esp+c”
BP 表达式,[条件式]设置断点,例如“bp 401000”
Hw 表达式设置硬件写断点
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值