McSema:二进制分析与逆向工程的利器

McSema是一款将x86机器码转换为LLVM位码的二进制翻译工具,经过全面升级后性能显著提升,支持更高效的静态分析和运行时编译,适用于安全加固和代码验证场景。

McSema:我正提升它 - The Trail of Bits Blog

Peter Goodman
2017年3月14日
darpa, mcsema

McSema,我们的x86机器码到LLVM位码二进制翻译器,刚刚进行了全面升级。上周我们成功举办了一次黑客松,显著提升了McSema的可用性、文档和代码质量。现在使用McSema分析和逆向工程二进制文件比以往任何时候都更容易。

成长阶段

我们每天使用McSema。它帮助我们查找并事后加固二进制程序以防范安全漏洞,独立验证供应商源代码,并生成高代码覆盖率的应用程序测试。它是学术界和DARPA项目中持续研究的一部分。我们(和其他人)不断扩展它以分析日益复杂的程序。

可以说,自2014年开源以来,McSema一直处于快速增长期。那时,LLVM 3.5还是新潮的,McSema就使用了它。2015年如此,2016年也是如此。McSema不断扩展和成长,但有些方面停滞了。随着时间的推移,一种渴望产生了——希望现代化并完善一切。上周,我们在McSema可用性黑客松期间解决了这些成长中的痛点。

回报显著

我们对McSema进行了广泛改进。代码比以往更清晰。安装更简单,可移植性更强。运行速度更快,生成的代码更好。

性能

McSema构建速度比以前快得多。我们通过移除死代码和不必要的库,并重新组织目录布局以更具描述性,简化了构建系统。

McSema生成位码的速度更快。我们改进了McSema遍历控制流图的方式,移除了对Boost的依赖,并简化了位码生成。

McSema生成更精简、更快的位码。McSema不再在函数入口和出口存储和溢出寄存器上下文。标志操作使用更快的自然位宽操作而不是位字段。McSema现在可以优化惰性生成的位码以消除未使用的计算。优化后的位码更易于分析,更符合原始程序的意图。

现代化

McSema现在使用标准分发的LLVM 3.8。之前,McSema使用自定义修改的LLVM 3.5版本。这次升级带来了更快的构建时间和更现代的LLVM功能。我们还消除了McSema对Boost的依赖,选择使用现代C++11功能代替。

简化

新的命令行界面更一致、更易用:mcsema-disass 反汇编二进制文件,mcsema-lift 将反汇编转换为LLVM位码。

我们移除了bin_descend,我们的自定义二进制反汇编器。现在只有一个支持的解码器,使用IDA Pro作为反汇编引擎。

新的代码布局更简单、更直观。构建McSema的CMake脚本现在更小、更简单。

旧的测试框架已被移除,转而采用基于集成测试的方法,无外部依赖。

新功能

McSema支持更多指令。我们一直在寻求帮助添加新指令语义,并更新了我们的指令添加指南。

McSema现在会通过 mcsema-lift --list-supported 命令告诉您哪些指令受支持,哪些不支持。

新的集成测试框架允许轻松添加全面的翻译测试,并有一个关于向McSema添加测试的新指南。

文档

我们的新文档详细描述了如何安装、使用、测试、扩展和调试McSema的代码库。我们还记录了常见错误及其解决方法。这些改进将使第三方更容易对McSema进行黑客修改。

运行时

McSema不仅用于静态分析。提升后的位码可以编译回可运行程序。我们改进了McSema的运行时占用,使其更快,大大减少了内存使用,并使其能够以复杂方式无缝与原生Windows和Linux代码交互。

投资未来

我们将继续投资改进McSema。我们一直在扩展对更大、更复杂软件的支持。我们希望转向Binary Ninja进行控制流恢复,而不是IDA Pro。我们计划添加将ARM二进制文件提升到LLVM位码的支持。我们希望扩大McSema的适用性,包括分析移动应用程序和嵌入式固件。

我们正在寻找对McSema可能性感到兴奋的实习生。想开始吗?尝试一下翻译真实Linux二进制文件的演练。之后,看看McSema如何使libFuzzer等工具在二进制文件上工作。最后,联系我们并告诉我们您希望将McSema带向何方。如果我们喜欢它并且您有计划,那么我们会付钱让您实现它。

如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News


页面内容
成长阶段
回报显著
性能
现代化
简化
新功能
文档
运行时
投资未来

近期文章
Trail of Bits的Buttercup在AIxCC挑战赛中赢得第二名
Buttercup现已开源!
AIxCC决赛:记录表
攻击者的提示注入工程:利用GitHub Copilot
作为新员工发现NVIDIA Triton中的内存损坏

© 2025 Trail of Bits.
使用Hugo和Mainroad主题生成。

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