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主题生成