Magnifier:交互式反编译的实验性工具探索
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 智能小助手)公众号二维码

评论