mcpField
B
binary-lifting

binary-lifting

github.com/gmh5225安全89076 次安装4 周前更新
代码仓库

关于 binary-lifting

介绍将二进制程序提升为 LLVM IR 的技术与工具的技能,面向进行二进制分析、逆向研究和重编译的人员。内容涵盖多种提升框架、控制流恢复、符号执行集成及去混淆流程。

主要功能

  1. 01介绍二进制到 LLVM IR 的流程
  2. 02汇总多种二进制提升框架
  3. 03说明控制流恢复方法
  4. 04涵盖符号执行与 Triton 集成
  5. 05介绍优化和去混淆步骤

适用场景

  1. 01分析二进制程序的静态与动态行为
  2. 02研究漏洞或去除代码混淆
  3. 03将现有二进制重新编译或优化
  4. 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;
}
控制流恢复
  1. 线性扫描:简单,但会遗漏嵌入数据中的代码
  2. 递归下降:沿控制流跟踪,覆盖率更高
  3. 推测式反汇编:处理间接跳转/调用
  4. 机器学习:使用 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)

通过提升进行去混淆

方法
  1. 将混淆后的二进制文件提升为 LLVM IR
  2. 应用优化流程进行简化
  3. 使用自定义流程处理特定的混淆模式
  4. 重新生成清理后的代码
有用的优化流程
  • 死存储消除(DSE)
  • 全局值编号(GVN)
  • 常量传播
  • 指令合并
  • 循环简化
VMP/VM 处理程序恢复
  • 识别分发器模式
  • 提取 VM 字节码语义
  • 将处理程序转换为原生 IR
  • 示例:使用 TicklingVMProtect 分析 VMProtect

最佳实践

  1. 架构支持:处理字节序、调用约定和 ABI 差异
  2. 内存建模:准确建模全局变量/栈变量的内存布局
  3. 外部依赖项:处理库调用和系统调用
  4. 验证:比较原始代码与提升后代码的执行跟踪
  5. 渐进式提升:支持部分程序分析

动态二进制提升

运行时转换
  • 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