McSema技术解析:从二进制代码到LLVM比特码的现代化转换

本文详细介绍McSema工具的重大技术升级,包括性能优化、LLVM 3.8迁移、指令集扩展、运行时改进等核心特性,涵盖静态分析、动态测试和跨平台支持等关键技术实现方案。

McSema:我来提升它 - Trail of Bits博客

Peter Goodman
2017年3月14日
darpa, mcsema

McSema是我们开发的x86机器码到LLVM比特码的二进制转换工具,刚刚完成了重大升级。上周我们成功举办了黑客马拉松,显著提升了McSema的可用性、文档质量和代码质量。现在使用McSema分析和逆向工程二进制文件比以往任何时候都更加容易。

成长阶段

我们日常使用McSema进行以下工作:

  • 发现并加固二进制程序的安全漏洞
  • 独立验证供应商源代码
  • 生成高代码覆盖率的应用测试 该工具被应用于学术研究和DARPA项目,我们(及其他团队)持续扩展其能力以分析日益复杂的程序。

自2014年开源以来,McSema经历了快速成长。虽然最初基于LLVM 3.5,但随着时间的推移,我们通过上周的黑客马拉松解决了现代化改造的需求。

收益回报

我们对McSema进行了全面改进:

  • 代码更清晰
  • 安装更简便且更具可移植性
  • 运行速度更快且生成代码质量更高

性能提升

  • 构建加速:通过清理死代码、移除冗余库和优化目录结构简化构建系统
  • 比特码生成加速:改进控制流图遍历方式,移除Boost依赖
  • 生成更高效的比特码
    • 取消函数入口/出口的寄存器上下文存储
    • 标志操作使用自然位宽运算替代位域
    • 支持优化未使用的计算

现代化升级

  • 迁移至标准LLVM 3.8发行版(原使用自定义LLVM 3.5)
  • 使用C++11特性替代Boost依赖

简化改进

  • 统一命令行接口:mcsema-disass反汇编二进制文件,mcsema-lift转换为LLVM比特码
  • 移除自定义反汇编器bin_descend,仅支持IDA Pro反汇编引擎
  • 优化代码结构和CMake构建脚本
  • 采用无外部依赖的集成测试框架

新特性

  • 支持更多指令集(持续征集指令语义补充)
  • 通过mcsema-lift --list-supported命令显示支持指令列表
  • 新增集成测试框架和测试添加指南

文档完善

新文档详细说明如何安装、使用、测试、扩展和调试McSema代码库,包含常见错误解决方案,显著降低第三方开发门槛。

运行时优化

McSema不仅支持静态分析,提升后的比特码可重新编译为可执行程序。我们改进了运行时性能:

  • 大幅降低内存占用
  • 增强与Windows/Linux原生代码的复杂交互能力

未来规划

我们将持续投入McSema开发:

  • 扩展对大型复杂软件的支持
  • 计划采用Binary Ninja替代IDA Pro进行控制流恢复
  • 新增ARM二进制码转LLVM比特码功能
  • 拓展移动应用和嵌入式固件分析能力

我们正在招募对McSema潜感兴趣的实习生。建议从实际Linux二进制文件转换教程入手,了解如何结合libFuzzer等工具工作。欢迎联系我们提出开发构想,经评估后我们将提供资金支持实现方案。

原文分享平台:Twitter、LinkedIn、GitHub、Mastodon、Hacker News


页面内容目录:成长阶段、收益回报、性能、现代化、简化改进、新特性、文档、运行时、未来规划
近期文章:非传统创新者奖学金、PajaMAS中的多智能体系统劫持、构建MCP必需的安全层、废弃硬件中的零日漏洞利用、EthCC[8]内幕:成为智能合约审计师
© 2025 Trail of Bits.
使用Hugo和Mainroad主题生成

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计