这是一篇关于虚拟化二进制文件反混淆的实习工作内容总结:
- 背景:混淆是为阻碍代码分析而故意使代码难以理解的过程,常用于恶意软件以隐藏恶意意图和避免检测,虚拟化是一种流行且强大的混淆形式,有多种混淆器提供虚拟化,导致其在恶意软件中被广泛使用。虚拟化二进制文件的架构包括原始程序编码为虚拟指令序列、包含虚拟指令和解释器,解释器负责执行虚拟指令,包含 VM 入口、VM 出口、调度器和处理程序等组件。
反混淆策略:
- 手动分析:直观方法是识别 VM 上下文、逆向工程处理程序并创建自定义反汇编器,但因 VM 架构可能变化和二进制文件进一步混淆而极其繁琐。
- 自动化分析:Yadegari 等人提出使用动态污点分析重建原始程序的控制流图(CFG),Jonathan Salwan 等人在此基础上利用符号执行和编译器优化创建反虚拟化程序,作者的反虚拟化方法受这些基于污点的方法启发,简化了符号执行组件,对混淆函数进行动态污点分析,根据 tainted conditional instruction 分割执行轨迹并组合重建 CFG。
- 示例:以简单程序为例,展示了混淆前后的 CFG 变化,通过污点分析确定 tainted instruction,收集执行轨迹并分割,合并相似块后重建 CFG,最后使用编译器优化简化 CFG。
- 使用 LLVM:基于污点的反虚拟化依赖编译器优化,作者决定在 LLVM IR 中进行所有分析,灵感来自 Saturn 反混淆器,这样可在反混淆管道开始进行优化,创建多架构工具,访问 LLVM 生态系统的工具,如 KLEE,提升过程使用 remill 库,提升二进制文件是实习的重要且复杂部分。
- 结果:在实习期间,使用反虚拟化工具对 Tigress 混淆器混淆的二进制文件(amd64 和 aarch64)进行处理,能快速部分反混淆 Tigress 挑战,如在特定机器上不到一秒内部分反混淆
challenge0000-binary1
,并展示了反混淆前后的结果,但存在局限性,如只考虑无调用的纯函数、只反混淆单个执行路径、对某些循环处理困难。 - 完整报告:作者将完整实习报告公开,报告包含更多技术细节、局限性讨论和未来计划,作者将继续在 Thales 攻读博士,如有问题可联系。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。