Trail of Bits的反编译技术栈

Trail of Bits正在开发多个与程序反编译相关的开源项目:Remill、Anvill、Rellic以及最新的Magnifier。其技术策略是通过多级中间表示(IR)逐步提升编译程序:

  • Remill:将机器指令转换为LLVM IR
    • Anvill:将机器码函数转化为LLVM函数
    • Rellic:通过Clang AST将LLVM IR转换为C代码 Magnifier验证了程序可在任意管道阶段进行转换的理论,研究人员能交互式修改Anvill的LLVM IR并即时查看Rellic生成的C代码。

从REPL到交互界面

Magnifier最初作为命令行REPL(读取-执行-打印循环)开发,支持以下关键转换:

  • 使用LLVM优化函数
    • 函数内联
    • 带/不带常量折叠的值替换
    • 函数指针去虚拟化 其核心技术包括:
  1. 对象标识系统:为所有IR元素分配唯一不透明ID
    1. 指令溯源机制:通过源ID/当前ID双标记体系(格式"XX|YY")追踪转换过程
    1. 通用替换接口:允许用户监控和精细化控制每个替换步骤

MagnifierUI可视化界面

前端采用Vue.js,后端使用C++,通过WebSocket实现双向通信。核心功能:

  • 并排显示LLVM IR与反编译的C代码
    • 指令级联动高亮(点击IR指令自动定位对应C代码)
    • 集成完整的Magnifier转换命令集
    • 一键式LLVM优化流程 典型工作流示例:
  1. 上传二进制文件
    1. 在终端视图执行参数值替换
    1. 通过Inline按钮内联函数调用
    1. 使用Optimize按钮触发LLVM优化
    1. 最终将复杂函数简化为常量返回值

LLVM优化的实战价值

通过"fibIter(100)"案例演示:

  1. 内联函数调用后
    1. 单次优化即直接输出第100个斐波那契数结果:3314859971
  2. 该过程完全静态完成,无需动态执行或人工逆向分析循环逻辑。

未来发展方向

  • 扩展转换类型支持(最终实现完整补丁集表达)
    • 集成Anvill实现直接二进制文件解析
    • 增强UI与底层工具的深度整合

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)