Deobfuscation Ollvm

反混淆/控制流平坦化还原(De-OLLVM)方法论(供安全研究/自有应用)。当 native 函数被 OLLVM 混淆(控制流平坦化 Flattening、虚假控制流 BCF、指令替换 SUB)导致 IDA 反编译一团乱、看不懂逻辑时,用于识别分发器、还原真实控制流、恢复可读逻辑。涵盖 OLLVM 三种混淆识别与去除思路、Deflat 脚本、符号执行辅助。

xiamiya Updated

File contents

反混淆 · 控制流平坦化还原(De-OLLVM)

OLLVM 是最常见的 native 混淆,反编译出来全是 while(1){ switch(state){...} } 看不懂逻辑。这个技能教你还原。

一、识别 OLLVM 三大混淆

混淆 特征 IDA 表现
控制流平坦化 (Flattening) 把顺序代码拆成 switch-case + 状态分发器 一个大 while + switch,块之间靠 state 变量跳
虚假控制流 (BCF) 插入永假/永真的分支 大量 if(opaque) 不会走的死代码
指令替换 (Sub) 简单运算换成等价复杂式子 a+b 变成一堆位运算

二、平坦化还原核心思路(重点)

平坦化的本质:真实的"块 A→块 B"被 ...[520 chars omitted]... 署 patch) 3. 复杂/大量函数 → 用 D-810(IDA 插件,自动去 OLLVM)或 Triton/Miasm 符号执行做(见 static-symbolic-execution 技能) 4. 只需理解逻辑不需还原文件 → 直接跟着 state 变量人工梳理主干

四、工具

  • D-810:IDA 插件,自动反 OLLVM,首选
  • deflat.py(angr 系):脚本化去平坦化
  • Triton/Miasm:符号执行还原(硬核,见 static-symbolic-execution)
  • unicorn:模拟执行辅助确定 state 转移(见 rev-unicorn-debug)

五、验证

还原后对比:关键输入下,原函数和还原函数输出是否一致(可用 unicorn 各跑一遍对比)。

边界

用于自有 App / 授权样本的混淆分析、算法理解、安全研究、学习编译器混淆原理。不协助破解他人商业保护牟利。

xiamiya/mhook/tree/main/app/src/main/assets/skills/deobfuscation-ollvm commit d7c8f08493

Frequently asked questions

npx skillmds@latest add xiamiya/deobfuscation-ollvm