McSema:二进制分析与反编译的现代化升级

本文详细介绍了McSema工具的重大更新,包括性能优化、LLVM 3.8迁移、依赖简化、新指令支持及运行时改进,旨在提升二进制到LLVM位码的转换效率与分析能力。

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

Peter Goodman
2017年3月14日
darpa, mcsema

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

成长阶段

我们每天使用McSema。它帮助我们查找并 retroactively 加固二进制程序以防范安全漏洞,独立验证供应商源代码,并生成高代码覆盖率的应用程序测试。它是学术界和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

页面内容

成长阶段
回报丰厚
性能
现代化
简化
新功能
文档
运行时
投资未来

近期文章

使用Deptective调查您的依赖项
系好安全带,Buttercup,AIxCC的评分回合正在进行中!
超越私钥风险,成熟您的智能合约
Go解析器中意外的安全陷阱
我们审查首批DKLs之一的经验
来自Silence Laboratories的23个库

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

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