https://github.com/sefcom/oxidizer
Oxidizer:迈向简洁且高保真的 Rust 反编译
Oxidizer 是一个基于 angr 构建的 Rust 反编译器,能够从已剥离符号的 Rust 二进制文件中生成简洁且高保真的 Rust 伪代码。与现有的面向 C 语言的反编译器不同,Oxidizer 专为处理 Rust 独特的编译模式而设计,并可恢复高级 Rust 抽象,例如枚举、模式匹配、错误传播(? 运算符)以及宏(println!、format!、panic! 等)。该项目由亚利桑那州立大学 SEFCOM 提供。
我们已将 Oxidizer 合并到 angr 的主分支中。
概述
现代 C 语言反编译器(如 Hex-Rays、Ghidra、Binary Ninja、angr)在反编译 Rust 二进制文件时会产生冗长且不准确的输出,因为它们无法从底层实现中恢复高级 Rust 抽象。Oxidizer 通过实现一套专用于 Rust 的反编译流水线来解决这一问题:
-
二进制级分析 — 通过基于 FLIRT 的函数匹配率分析识别 Rust 编译器版本,恢复标准库函数,并加载版本相关的结构体/枚举/函数类型数据库(支持 Rust 1.39.0–1.93.0)。
-
fCFG(函数控制流图)简化(无类型) — 移除由 Rust 自动资源管理(drop_in_place、__rust_dealloc)和编译器插入的安全检查(越界检查等)产生的额外代码。
-
Rust 类型推断 — 执行跨过程的函数原型推断,以恢复结构体/枚举返回类型以及包含 Option<T> 和 Result<T, E> 的参数类型,并通过扩展了枚举类型支持的基于约束的类型推断算法(Retypd)进行增强。
-
fCFG 简化(带类型) — 恢复结构体和枚举的初始化,概括常见宏(println!、format!、write!、panic! 等),简化解引用强制转换等。
-
结构化 — 将简化后的 fCFG 转换为高级 Rust 控制流结构,包括 match/if let 模式匹配以及 ? 错误传播。
-
Rust 伪代码生成 — 输出结构化、可读性强的 Rust 伪代码。
|