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优化函数
-
- 函数内联
-
- 带/不带常量折叠的值替换
-
- 函数指针去虚拟化 其核心技术包括:
- 对象标识系统:为所有IR元素分配唯一不透明ID
-
- 指令溯源机制:通过源ID/当前ID双标记体系(格式"XX|YY")追踪转换过程
-
- 通用替换接口:允许用户监控和精细化控制每个替换步骤
MagnifierUI可视化界面
前端采用Vue.js,后端使用C++,通过WebSocket实现双向通信。核心功能:
- 并排显示LLVM IR与反编译的C代码
-
- 指令级联动高亮(点击IR指令自动定位对应C代码)
-
- 集成完整的Magnifier转换命令集
-
- 一键式LLVM优化流程 典型工作流示例:
- 上传二进制文件
-
- 在终端视图执行参数值替换
-
- 通过Inline按钮内联函数调用
-
- 使用Optimize按钮触发LLVM优化
-
- 最终将复杂函数简化为常量返回值
LLVM优化的实战价值
通过"fibIter(100)"案例演示:
- 内联函数调用后
-
- 单次优化即直接输出第100个斐波那契数结果:3314859971
- 该过程完全静态完成,无需动态执行或人工逆向分析循环逻辑。
未来发展方向
- 扩展转换类型支持(最终实现完整补丁集表达)
-
- 集成Anvill实现直接二进制文件解析
-
- 增强UI与底层工具的深度整合
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)