看雪 安卓高级研修班 月薪三万计划班

lkjh · · 28 次点击 · · 开始浏览    

看雪 安卓高级研修班 月薪三万计划班

获课:789it.top/13684/

分析还原ollvm、vmp的方法

OLLVM(Obfuscator-LLVM)和VMP(Virtual Machine Protection)是常见的代码混淆和保护技术,用于增加逆向工程的难度。分析并还原经过OLLVM或VMP保护的代码是逆向工程中的高级任务,通常需要结合静态分析、动态调试和模式识别等技术。以下是分析还原OLLVM和VMP的方法:

1. 分析OLLVM混淆代码

OLLVM通过控制流平坦化、指令替换、虚假控制流等技术混淆代码。以下是分析OLLVM混淆代码的步骤:

1.1 控制流平坦化(Control Flow Flattening)

  • 特点
    • 将原始代码的控制流转换为一个状态机,使用一个调度变量控制执行流程。
    • 基本块之间的跳转关系被隐藏。
  • 分析方法
    • 静态分析
      • 使用反编译工具(如Ghidra、IDA Pro)分析控制流图(CFG)。
      • 识别调度变量和状态机结构,还原原始控制流。
    • 动态调试
      • 使用调试器(如GDB、LLDB)跟踪调度变量的值,观察程序执行路径。
      • 通过动态执行记录基本块的执行顺序。
    • 模式识别
      • OLLVM的控制流平坦化通常有固定的模式,可以通过脚本或工具(如deflat)自动化还原。

1.2 指令替换(Instruction Substitution)

  • 特点
    • 将简单的指令替换为等价的复杂指令序列。
    • 例如,将a = b + c替换为a = b - (-c)。
  • 分析方法
    • 静态分析
      • 使用反编译工具识别指令模式,还原原始指令。
    • 动态调试
      • 跟踪指令执行结果,验证等价性。

1.3 虚假控制流(Bogus Control Flow)

  • 特点
    • 插入永远不会执行的条件跳转,增加控制流的复杂性。
  • 分析方法
    • 静态分析
      • 识别永远不会执行的条件跳转,移除无效分支。
    • 动态调试
      • 跟踪条件跳转的执行情况,验证其真实性。

1.4 字符串加密

  • 特点
    • 字符串常量被加密,运行时解密。
  • 分析方法
    • 动态调试
      • 在运行时定位解密函数,提取解密后的字符串。
    • 静态分析
      • 识别解密函数,编写脚本批量解密字符串。

2. 分析VMP保护代码

VMP通过将代码转换为自定义的虚拟机指令集来保护代码,增加了逆向工程的难度。

2.1 虚拟机架构分析

  • 特点
    • 原始代码被转换为虚拟机的字节码,由虚拟机解释执行。
    • 虚拟机通常包括指令集、寄存器、栈等组件。
  • 分析方法
    • 静态分析
      • 使用反编译工具分析虚拟机解释器的代码。
      • 识别虚拟机的指令集、寄存器和栈结构。
    • 动态调试
      • 跟踪虚拟机的执行过程,记录字节码的执行流程。
      • 使用调试器设置断点,观察虚拟机解释器的行为。

2.2 字节码还原

  • 特点
    • 原始代码被转换为虚拟机字节码,需要还原为原始指令。
  • 分析方法
    • 静态分析
      • 分析虚拟机解释器的代码,理解字节码的含义。
      • 编写脚本或工具将字节码转换为原始指令。
    • 动态调试
      • 跟踪字节码的执行过程,记录输入输出,推断字节码的功能。

2.3 反虚拟机检测

  • 特点
    • VMP可能包含反虚拟机检测机制,防止在虚拟机环境中运行。
  • 分析方法
    • 动态调试
      • 在真实环境中运行程序,绕过反虚拟机检测。
    • 静态分析
      • 识别反虚拟机检测代码,修改或绕过检测逻辑。

3. 工具和技术支持

3.1 静态分析工具

  • IDA Pro:强大的反编译工具,支持脚本编写和插件扩展。
  • Ghidra:开源的反编译工具,支持自定义脚本和分析。
  • Binary Ninja:轻量级反编译工具,支持Python脚本。

3.2 动态调试工具

  • GDB/LLDB:用于Linux/macOS平台的动态调试。
  • x64dbg/x32dbg:用于Windows平台的动态调试。
  • Frida:动态插桩工具,支持Hook和运行时分析。

3.3 自动化工具

  • deflat:用于还原OLLVM控制流平坦化的工具。
  • Unicorn:基于QEMU的CPU模拟器,用于模拟执行虚拟机字节码。
  • angr:符号执行工具,用于分析复杂控制流。

4. 分析流程总结

  1. 初步分析
  2. 使用反编译工具查看代码结构,识别混淆或保护技术。
  3. 静态分析
  4. 分析控制流、指令模式和虚拟机架构。
  5. 动态调试
  6. 跟踪程序执行,验证静态分析结果。
  7. 模式识别
  8. 识别混淆或保护的固定模式,编写脚本自动化还原。
  9. 还原代码
  10. 将混淆或虚拟机字节码还原为原始代码。

5. 挑战与注意事项

  • 复杂性:OLLVM和VMP的保护机制通常非常复杂,需要耐心和细致分析。
  • 反调试和反虚拟机:目标程序可能包含反调试和反虚拟机技术,需要绕过这些保护。
  • 工具限制:现有的工具可能无法完全自动化还原,需要结合手动分析。

通过以上方法和工具,可以逐步分析和还原经过OLLVM或VMP保护的代码,但需要具备扎实的逆向工程基础和丰富的经验。

28 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传