看雪 安卓高级研修班 月薪三万计划班
获课: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. 分析流程总结
- 初步分析:
- 使用反编译工具查看代码结构,识别混淆或保护技术。
- 静态分析:
- 分析控制流、指令模式和虚拟机架构。
- 动态调试:
- 跟踪程序执行,验证静态分析结果。
- 模式识别:
- 识别混淆或保护的固定模式,编写脚本自动化还原。
- 还原代码:
- 将混淆或虚拟机字节码还原为原始代码。
5. 挑战与注意事项
- 复杂性:OLLVM和VMP的保护机制通常非常复杂,需要耐心和细致分析。
- 反调试和反虚拟机:目标程序可能包含反调试和反虚拟机技术,需要绕过这些保护。
- 工具限制:现有的工具可能无法完全自动化还原,需要结合手动分析。
通过以上方法和工具,可以逐步分析和还原经过OLLVM或VMP保护的代码,但需要具备扎实的逆向工程基础和丰富的经验。