学习笔记

1、调试逆向概念

在程序开发过程中,程序员会使用一些调试工具,以便在高效地发现软件中存在的错误;而在逆向分析领域,分析者也会利用相关的调试工具,来分析软件的行为和验证分析思路。由于操作系统均提供了完善的调试接口,所以可以使用各种调试工具来方便灵活地观察和控制目标程序。

在使用调试工具调试程序时,程序会按照调试者的意愿按指令为单位执行。

  • 动态分析技术指的是使用调试工具加载程序并运行,随着程序运行,调试者可以随时中断目标的指令序列,以便观察相关计算的结果和当前的设备情况。
  • 静态分析技术是相对于动态分析技术而言的,在实际分析中,很多场景不适合运行目标(如病毒程序、设备不兼容、软件单独某一模块等)。
    • 病毒:运行之后威胁系统安全
    • 设备不兼容:如工控设备,造价高昂,接触不到
    • 软件单独某一模块:不完整,没有主程序去调用它,运行不起来

2、OllyDbg界面

OllyDbg基础界面

反汇编窗口分为四部分:

  • 汇编代码对应的地址窗口
  • 汇编代码对应的十六进制机器码窗口
  • 反汇编代码窗口
  • 反汇编代码对应的注释信息窗口

寄存器窗口显示所有寄存器的相关信息

信息窗口显示当前执行到的反汇编代码的信息

数据窗口分为三部分:

  • 数据存放的地址
  • 数据的十六进制
  • 数据的ASCII码

堆栈窗口分为三部分:

  • 栈地址
  • 存放的数据
  • 对应说明信息

3、OllyDbg快捷键

快捷键 作用
F2 下断点,指定断点的位置
F3 加载一个可执行程序,进行调试分析
F4 执行程序到光标处
F5 缩小、还原当前窗口
F7 单步步入
F8 单步步过
F9 直接执行程序,遇到断点时,程序暂停
Ctrl+F2 重新执行程序到起始处,一般用于重新调试程序
Ctrl+F9 执行到函数返回处,用于跳出函数实现
Alt+F9 执行到用户代码处,用于快速跳出系统函数
Ctrl+G 输入十六进制地址,快速定位到该地址
输入注释

4、调试技巧

  1. 第一次调试,采用F8单步步过大体走一遍。

5、小知识点

  • Windows调用A函数时,会按照参数从右到左依次push参数,之后call函数的地址
  • 修改数据窗口中的数据后,如果是字符串,需要以00结尾
  • 数据窗口被修改后,重新执行程序修改的内容会丢失

独立思考

产生过的疑问