Reverse工具


一、反汇编

VS写的程序应该选择release版本,因为release是发布版本,更接近实际情况。

1 CE

本地运行的exe改内存

2 OD

动态反汇编调试

2.1 基本窗口

顶部栏:

  • 运行:F9
  • 重开:Ctrl + F2
  • 单步步过:F8
  • 单步步入:F7
  • 运行到选定位置:F4
  • 执行到返回:Ctrl + F9
  • 执行到用户代码:Alt + F9
  • 断点窗口:Alt + B
  • 查看上一步:-
  • 查看下一步:+
  • 查看当前指令地址:*

反汇编窗口:

  • 显示被调试程序的反汇编代码。
  • 断点:F2 / 右键——Breakpoint——Toggle。
  • 查看或修改具体汇编代码:双击Command中代码。
  • Comments:注释,点击可以关闭。
  • 添加注释:双击Comments中的指定行。
  • 找函数或地址:Ctrl + G / 右键——goto——Expression(其他窗口同理)
  • 重新分析代码:右键——Analysis——Analyse code
  • 窗口属性:右键——Appearance

寄存器窗口:

  • 显示当前所选线程的CPU寄存器信息。

信息窗口:

  • 选中的语句的相关信息。

数据窗口:

  • 内存或文件的内容。

  • Value:值,点击可以切换出ASCII码等窗口。(右键显示详细信息)

堆栈窗口:

  • 显示当前线程的堆栈。

  • 跳转到指定位置:回车。

2.2 调试流程

调试流程:

  1. 打开文件
  2. 在反汇编窗口用Ctrl + G定位函数名
  3. F2加断点
  4. F9执行
  5. 分析堆栈,回车跳转

2.3 插件

command:

  • bp [addr] / function:给指定反汇编窗口地址或函数入口加断点。
  • bc [addr] / function:清除断点
  • db / dw / dd / dc [addr]:跳转到指定数据窗口的地址处,以 字节 /字 / 双字 / 字符方式显示数据。
  • ? reg:查看指定寄存器值(除了? eax也可以? ebp-8

2.4 技巧

Command中带有详细注释:

  • VS在编译时会生成一个exe和pdb文件,pdb中会保留调试信息。所以若pdb文件存在,OD在读取exe时会同时读取pdb文件,将注释信息加载到OD中,也可以在OD的Options中设置。

[local.num]

  • 表示是第几个局部变量,如[local.1]表示是函数中第一个局部变量,以此类推。(按栈的顺序,并非源代码的定义的顺序)

2.5 问题

VS生成的有的代码没有:

  • 在VS中右键项目——属性——配置属性——C/C++——优化——禁用
  • 不禁用的话有的代码在编译时会被优化。

窗口混乱:

  • View——CPU——全屏
  • 初始打开的窗口是CPU窗口。

3 IDA

静态反汇编分析

4 VS调试

加断点——运行——调试——窗口——反汇编


二、 其他工具

1 磁盘文件

机器码修改

磁盘扫描

2 游戏解包

游戏资源提取:official::Ninja Ripper Official Website

资源解密:noesis