McSema:二进制转LLVM比特码工具重大升级
我们的x86机器码转LLVM比特码工具McSema刚刚完成全面升级。上周举办的开发马拉松显著改善了McSema的易用性、文档质量和代码质量,现在使用McSema分析和逆向工程二进制文件比以往任何时候都更容易。
发展阶段
McSema已成为我们日常工作中不可或缺的工具,它能帮助我们发现并加固二进制程序的安全漏洞、独立验证供应商源代码,以及生成高代码覆盖率的应用测试。该工具不仅应用于学术研究,还参与DARPA项目。自2014年开源以来,我们(及其他贡献者)持续扩展其功能以分析日益复杂的程序。
性能优化
- 构建速度:通过清理死代码、移除冗余库及优化目录结构,构建系统更简洁
- 比特码生成:改进控制流图遍历算法,移除Boost依赖,简化比特码生成流程
- 比特码质量:取消函数入口/出口的寄存器上下文存储,改用原生位宽操作处理标志位,新增惰性生成比特码优化功能
现代化改造
- 升级至标准版LLVM 3.8(原使用定制版LLVM 3.5)
- 完全移除Boost依赖,改用C++11现代特性
功能简化
- 统一命令行接口:
mcsema-disass
负责反汇编,mcsema-lift
执行比特码转换 - 弃用定制反汇编器bin_descend,统一采用IDA Pro作为反汇编引擎
- 重构代码结构,精简CMake构建脚本
- 采用无外部依赖的集成测试框架
新增特性
- 支持更多指令集(提供指令添加指南)
- 新增
--list-supported
命令查看支持指令列表 - 集成测试框架支持快速添加全面翻译测试
文档完善
全新文档详细说明安装流程、使用方法、测试方案、功能扩展和调试技巧,并包含常见错误解决方案,显著降低第三方开发者的参与门槛。
运行时增强
提升运行效率,大幅降低内存占用,改进与原生Windows/Linux代码的复杂交互能力,使转换后的比特码不仅能用于静态分析,还可重新编译为可执行程序。
未来规划
- 扩展对复杂软件的支持
- 计划采用Binary Ninja替代IDA Pro进行控制流恢复
- 新增ARM架构二进制转LLVM比特码功能
- 拓展移动应用和嵌入式固件分析场景
我们正在招募对McSema开发感兴趣的实习生。入门者可先尝试Linux二进制转换教程,了解如何使libFuzzer等工具作用于二进制文件。如有创新构想,欢迎联系我们——若方案可行,我们将提供资金支持实现。