写点什么

Magnifier:交互式反编译的实验性工具探索

作者:qife
  • 2025-08-02
    福建
  • 本文字数:710 字

    阅读完需:约 2 分钟

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

  2. 指令溯源机制:通过源 ID/当前 ID 双标记体系(格式"XX|YY")追踪转换过程

  3. 通用替换接口:允许用户监控和精细化控制每个替换步骤

MagnifierUI 可视化界面

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


  • 并排显示 LLVM IR 与反编译的 C 代码

  • 指令级联动高亮(点击 IR 指令自动定位对应 C 代码)

  • 集成完整的 Magnifier 转换命令集

  • 一键式 LLVM 优化流程


典型工作流示例:


  1. 上传二进制文件

  2. 在终端视图执行参数值替换

  3. 通过 Inline 按钮内联函数调用

  4. 使用 Optimize 按钮触发 LLVM 优化

  5. 最终将复杂函数简化为常量返回值

LLVM 优化的实战价值

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


  1. 内联函数调用后

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

未来发展方向

  • 扩展转换类型支持(最终实现完整补丁集表达)

  • 集成 Anvill 实现直接二进制文件解析

  • 增强 UI 与底层工具的深度整合


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


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
Magnifier:交互式反编译的实验性工具探索_LLVM_qife_InfoQ写作社区