关于 binary-lifting
介绍将二进制程序提升为 LLVM IR 的技术与工具的技能,面向进行二进制分析、逆向研究和重编译的人员。内容涵盖多种提升框架、控制流恢复、符号执行集成及去混淆流程。
主要功能
- 01介绍二进制到 LLVM IR 的流程
- 02汇总多种二进制提升框架
- 03说明控制流恢复方法
- 04涵盖符号执行与 Triton 集成
- 05介绍优化和去混淆步骤
适用场景
- 01分析二进制程序的静态与动态行为
- 02研究漏洞或去除代码混淆
- 03将现有二进制重新编译或优化
- 04探索跨架构代码转换
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ gmh5225/ awesome-llvm-security --skill binary-lifting安装后在 Claude Code 中输入/binary-lifting确认已加载。
详细介绍
二进制提升技能
本技能涵盖将二进制可执行文件提升为 LLVM IR 的技术和工具,以便对现有二进制文件进行高级分析、转换和重新编译。
核心概念
什么是二进制提升?
二进制提升是将低级机器代码(x86、ARM 等)转换为更高级的中间表示(LLVM IR)的过程,可用于:
- 静态和动态分析
- 去混淆和漏洞研究
- 代码重新编译和优化
- 跨架构转换
提升流程
Binary → Disassembly → IR Generation → Optimization → Analysis/Recompilation
主要提升框架
生产级工具
- RetDec(Avast):完整反编译器,可输出 C 代码,支持多种架构
- McSema(Trail of Bits):将 x86/x64 转换为 LLVM IR,支持函数恢复
- revng:基于 QEMU,支持多种架构
- reopt(Galois):专注于正确性和形式化方法
研究/专用工具
- Rellume:面向 JIT 场景的快速 x86-64 到 LLVM 提升工具
- fcd:基于模式的反编译器,带有优化流程
- bin2llvm:基于 QEMU 的二进制到 LLVM 转换器
- llvm-mctoll:Microsoft 的机器代码到 LLVM 提升工具
特定语言的提升工具
- llvm2c/IR->C:将 LLVM IR 转换回 C 代码
- llvm2cranelift:将 LLVM IR 转换为 Cranelift IR
- Leaven:将 LLVM IR 转换为 Go 语言
- masxinlingvonta:将 JVM 字节码转换为 LLVM IR
实现技术
指令语义转换
// Example: Translating x86 ADD to LLVM IR
Value* translateADD(IRBuilder<> &builder, Value* op1, Value* op2) {
Value* result = builder.CreateAdd(op1, op2, "add_result");
// Update flags (CF, OF, SF, ZF, etc.)
updateCarryFlag(builder, op1, op2, result);
updateOverflowFlag(builder, op1, op2, result);
updateSignFlag(builder, result);
updateZeroFlag(builder, result);
return result;
}
控制流恢复
- 线性扫描:简单,但会遗漏嵌入数据中的代码
- 递归下降:沿控制流跟踪,覆盖率更高
- 推测式反汇编:处理间接跳转/调用
- 机器学习:使用 ML 识别函数边界
处理间接控制流
- 值集分析(VSA)
- 使用符号执行解析跳转目标
- 为重建虚函数表恢复类型
Triton 集成
Triton 符号执行引擎可与提升技术结合使用:
from triton import TritonContext, ARCH, Instruction
ctx = TritonContext(ARCH.X86_64)
# Symbolically execute and extract AST
inst = Instruction(b"\x48\x01\xd8") # add rax, rbx
ctx.processing(inst)
# Convert Triton AST to LLVM IR
ast = ctx.getRegisterAst(ctx.registers.rax)
llvm_ir = triton_ast_to_llvm(ast)
通过提升进行去混淆
方法
- 将混淆后的二进制文件提升为 LLVM IR
- 应用优化流程进行简化
- 使用自定义流程处理特定的混淆模式
- 重新生成清理后的代码
有用的优化流程
- 死存储消除(DSE)
- 全局值编号(GVN)
- 常量传播
- 指令合并
- 循环简化
VMP/VM 处理程序恢复
- 识别分发器模式
- 提取 VM 字节码语义
- 将处理程序转换为原生 IR
- 示例:使用 TicklingVMProtect 分析 VMProtect
最佳实践
- 架构支持:处理字节序、调用约定和 ABI 差异
- 内存建模:准确建模全局变量/栈变量的内存布局
- 外部依赖项:处理库调用和系统调用
- 验证:比较原始代码与提升后代码的执行跟踪
- 渐进式提升:支持部分程序分析
动态二进制提升
运行时转换
- Instrew:通过 LLVM 实现快速插桩
- QBDI:QuarkslaB 动态二进制插桩
- binopt:运行时优化二进制代码
JIT 重新编译
提升频繁执行的代码路径以进行运行时优化:
- 基于性能分析的提升
- 热路径检测
- 推测性优化
资源
如需完整的提升工具和研究论文列表,请参阅主 README.md 中的 LIFT 部分。
获取详细信息
如需详细且最新的资源链接、工具列表或项目参考资料,请从以下位置获取最新数据:
https://raw.githubusercontent.com/gmh5225/awesome-llvm-security/refs/heads/main/README.md
此 README 包含经过全面整理的列表:
- 二进制提升框架和工具(LIFT 部分)
- 相关研究论文和文档
- 实现示例和教程
评论
支持 Markdown