[论文解读] Automated Deobfuscation of Android Native Binary Code
本文提出 DiANa,这是首个针对经 Obfuscator-LLVM(O-LLVM)混淆的 Android 原生二进制代码实现自动化去混淆的系统。通过结合静态污点分析与面向流的符号执行,DiANa 以高保真度恢复原始控制流图,在真实世界混淆函数上的相似度得分最高达 0.963。
With the popularity of Android apps, different techniques have been proposed to enhance app protection. As an effective approach to prevent reverse engineering, obfuscation can be used to serve both benign and malicious purposes. In recent years, more and more sensitive logic or data have been implemented as obfuscated native code because of the limitations of Java bytecode. As a result, native code obfuscation becomes a great obstacle for security analysis to understand the complicated logic. In this paper, we propose DiANa, an automated system to facilitate the deobfuscation of native binary code in Android apps. Specifically, given a binary obfuscated by Obfuscator-LLVM (the most popular native code obfuscator), DiANa is capable of recovering the original Control Flow Graph. To the best of our knowledge, DiANa is the first system that aims to tackle the problem of Android native binary deobfuscation. We have applied DiANa in different scenarios, and the experimental results demonstrate the effectiveness of DiANa based on generic similarity comparison metrics.
研究动机与目标
- 解决缺乏自动化工具去混淆 Android 原生代码的问题,特别是针对 O-LLVM 保护的场景。
- 克服在 ARM 指令优化、控制流扁平化以及符号执行过程中的路径爆炸等挑战。
- 从混淆的原生二进制代码中准确恢复原始程序逻辑,以支持安全分析与恶意软件逆向工程。
- 提供一种可扩展且精确的去混淆解决方案,确保原始代码与去混淆后代码之间的语义等价性。
提出的方法
- 应用静态污点分析,以识别并传播语义级别的信息,跨越混淆指令,实现在语义层面的去混淆。
- 使用面向流的符号执行来重构复杂的控制流结构,特别是那些因控制流扁平化而被破坏的结构。
- 通过动态切分控制流并基于静态特征选择关键块,调整分析目标序列,以最大化上下文继承。
- 在符号执行中引入可配置的状态保存机制,以减少路径爆炸,同时保留关键执行路径。
- 利用 IDA Pro 进行初始二进制反汇编,使用 Angr 进行符号执行,将二者整合为统一的去混淆处理流水线。
- 通过结构相似性度量(如 CFG 相似度)和通过输入输出对比的语义等价性测试,验证去混淆结果。
实验结果
研究问题
- RQ1能否以高结构保真度实现对 O-LLVM 保护的 Android 原生二进制代码的自动化去混淆?
- RQ2污点分析与符号执行的结合在从 ARM 上的混淆原生代码中恢复控制流方面有多高效?
- RQ3DiANa 在多大程度上保持了原始函数与去混淆后函数之间的语义等价性?
- RQ4在使用 O-LLVM 对 ARM 二进制代码进行去混淆时,主要挑战是什么?在实践中如何缓解?
- RQ5DiANa 在不同混淆类型(如 CFF、ALL)及真实世界 Android 应用中的表现如何?
主要发现
- 在控制流扁平化(CFF)混淆下,DiANa 在 "send_magicmsg" 函数上实现 0.963 的控制流图(CFG)相似度得分,在 "search_goodnum" 函数上为 0.939。
- 在更复杂的 "ALL" 混淆场景下(包含 O-LLVM 的所有技术),DiANa 仍保持高精度,相同函数的相似度得分分别为 0.962 和 0.900。
- 通过 1,500 个输入的语义等价性测试,所有测试用例的原始函数与去混淆函数输出完全一致,证实了语义等价性。
- 尽管在符号执行中因被调用函数处理和状态丢失导致存在轻微不一致,但人工分析确认语义保持不变。
- 通过限制并智能管理符号执行状态,系统有效缓解了路径爆炸问题,在不牺牲准确性的前提下提升了效率。
- 去混淆后的 CFG 显著比原始混淆版本更易于人工阅读,尤其在揭示系统调用序列和关键逻辑方面表现突出。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。