用途:逆向分析 Rust 编译出的二进制文件,包括恶意软件、CLI 工具和编译后的服务。Rust 二进制体积大、静态链接、内联泛型多,但会泄露源码路径、crate 与模块结构以及标准库特征。
主要能力:确认与指纹识别(strings 中可见 rustc 版本、core::panicking、/rustc/<hash>/library/;符号以 _ZN...17h<hex>E 或 _R 开头;剥离后 3–30 MB 且动态导入极少)。利用 panic 字符串泄露源码树与目录结构,利用 cargo/registry 路径还原依赖列表。符号还原支持 legacy 与 v0(RFC 2603)两种方案,可用 nm -C、rustfilt,Ghidra 11+ 与 IDA 8+ 内置 v0 还原。反汇编中需识别五种模式:单态化导致重复函数、Result/Option 按值返回(判别式加负载,调用后测试第一寄存器即错误分支)、无处不在的边界检查、dyn Trait 的 vtable 间接调用、String/&str 为指针加长度无终止符。
使用方式:先用 strings -n 8 target | rg -m8 'rustc version|/rustc/[0-9a-f]{40}|core::panicking|cargo/registry' 确认;用 strings -n 10 target | rg 'src/[a-z_/]+.rs' 提取源码路径;用 strings target | rg -o 'cargo/registry/src/[^/]+/([a-z0-9_-]+-[0-9.]+)' -r '$1' | sort -u 列出依赖;用 nm -C target 配合 rustfilt 还原符号,并过滤 core/alloc/std 及已知 crate。符号全剥离时以 panic 字符串为锚点定位所属函数。
适用场景:分析 Rust 恶意软件、CLI 或服务;安全审查关注 unsafe 块、release 下整数溢出静默回绕、unwrap/expect 导致的远程 panic、FFI 边界、serde 反序列化不变量。
限制:不适用于 Go 二进制(改用 analyzing-go-binaries)、.NET/Unity;疑似恶意软件须先做 containment(analyzing-malware);有源码时改用 auditing-code-for-vulnerabilities 与 cargo geiger。panic=abort 加重度剥离的样本可能不残留边界检查 panic 点,应视为反分析措施。