查看: 118|回复: 57

[相关教程] Native代码混淆与反混淆:OLLVM三大技术和破解方法

[复制链接]

96

主题

5

回帖

951

积分

UID
2
贡献
9 点
钻石
7 个
C币
993 个
发表于 2026-3-7 16:19:28 | 显示全部楼层 |阅读模式
逆向 native 代码遇到混淆是最头疼的。so 库被 OLLVM 混淆后,IDA 反编译出来一团乱码。这篇讲混淆原理和反混淆思路。

一、OLLVM 三大混淆技术


  • 控制流平坦化:把正常的多分支 if/while 结构打碎,用一个 dispatcher 循环替代。所有基本块变成 case 分支,由一个状态变量控制跳转。逆向时很难看出原始逻辑。
  • 虚假控制流:在基本块前后插入永远为真的判断(如 x*x>=0),让 IDA 以为有分支,增加分析复杂度。
  • 指令替换:把简单运算拆成复杂等价运算。比如 a+b 替换成 a-(-b),再替换成 a^(~(~b))。


二、反混淆方法


  • 符号执行:用 angr 框架的符号执行,求解每个分支的实际条件,重建控制流。对简单混淆有效,复杂混淆会路径爆炸。
    1. import angr
    2. proj = angr.Project('libtarget.so', auto_load_libs=False)
    3. cfg = proj.analyses.CFGEmulated()
    4. # 找到目标函数地址
    5. func_addr = 0x1234
    6. # 符号执行恢复控制流
    7. state = proj.factory.blank_state(addr=func_addr)
    复制代码

  • 动态执行收集路径:用 Frida 在运行时 hook 目标函数,收集实际执行路径。跑几次不同输入,拼出真实控制流。
  • IDA 脚本去平坦化:写 IDAPython 脚本,识别 dispatcher 模式,按状态变量值重建基本块顺序。GitHub 上有现成的 deflat 脚本。
  • Patch 掉虚假分支:识别 bogus 分支的特征(如恒真条件),直接 NOP 掉判断和死代码。


三、实战流程

  • IDA 加载 so,找到目标函数
  • 看反编译结果判断用了哪些混淆
  • 如果有平坦化:跑 deflat 脚本
  • 如果有虚假控制流:写 pattern 匹配 NOP 掉
  • 如果指令替换:人工识别等价运算还原
  • 实在不行:动态调试,在关键点断下来看实际执行路径


四、工具推荐

  • IDA Pro + Hex-Rays:反编译+脚本
  • angr:符号执行框架
  • Frida:动态 hook 收集执行路径
  • Ghidra:免费替代 IDA,有反混淆插件




混淆和反混淆是猫鼠游戏。没有不可逆的混淆,只有成本高低。大部分商业 App 的混淆可以用 deflat + 动态调试搞定。
温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
回复

使用道具 举报

匿名  发表于 2026-9-17 18:33:42
LZ是天才,坚定完毕
回复

使用道具

匿名  发表于 2026-9-17 18:35:33
楼猪V5啊
回复

使用道具

0

主题

376

回帖

376

积分

UID
420254
贡献
0 点
钻石
0 个
C币
2 个
发表于 2026-9-17 18:42:11 | 显示全部楼层
工具链用对了能省很多事,但核心还是得耐心跟。想了解下有没有遇到反调试的坑?
回复

使用道具 举报

0

主题

365

回帖

0

积分

UID
260114
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:44:50 | 显示全部楼层
如果只是学习目的,建议从开源项目练手,别碰线上。
回复

使用道具 举报

0

主题

377

回帖

54

积分

UID
655918
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:46:40 | 显示全部楼层
遇到卡住的地方,换个思路往往比死磕更快。
回复

使用道具 举报

0

主题

384

回帖

0

积分

UID
416124
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:49:05 | 显示全部楼层
实际项目里最实用的往往是最朴素的抓包手段。
回复

使用道具 举报

0

主题

373

回帖

38

积分

UID
426725
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:52:36 | 显示全部楼层
现在的防护思路是增加时间成本,让你算不过来。这套思路对其他 App 通用吗?
回复

使用道具 举报

0

主题

378

回帖

48

积分

UID
129737
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:56:13 | 显示全部楼层
多平台的支持是个大工程,工作量远超预期。想了解下有没有遇到反调试的坑?
回复

使用道具 举报

0

主题

361

回帖

38

积分

UID
812017
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:58:29 | 显示全部楼层
建议把分析过程记录下来,下次遇到类似的能省一半时间。想了解下有没有遇到反调试的坑?
回复

使用道具 举报

温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

QQ客服返回顶部