工具
rbasefind 固件基址搜索工具
一个多线程 Rust 命令行工具,以暴力搜索推算平面 32 位固件镜像的加载基址,是 mncoppola 的 basefind.py 和 rsaxvc 的 basefind.cpp 的重新实现。它记录 ASCII 字符串的偏移,把每个 32 位字都当作可能的指针,再按候选基址能让多少字符串成为指针目标来排序。README 称这只是一个简单的启发式方法,对部分 ARM(非 Thumb)二进制效果相当好,但不会创造奇迹。
- 目标
- 固件
- 类别
- 固件工具
- 关联
- 基础工具
- 来源复核于
使用条件与局限
- 审阅时最新标签为 v0.1.3,位于所审阅的 master 分支 2020-09-27 提交上;GitHub 上没有发布二进制,crates.io 上也没有对应软件包。需用 Cargo 从源码构建;Cargo.toml 未声明 edition,Cargo.lock 被忽略,因此 clap 2.33、regex 1.3 等依赖会在构建时按版本范围解析。README 的待办事项列出一种自动模式:根据最大交集判断字节序,并在最佳匹配附近自动缩小步长。
- 输入是使用者提供的平面 32 位镜像,默认按小端解释,-b 选项改为大端;仓库不含任何固件或样例。默认情况下,它提取至少 10 个字符、以 NUL 结尾的可打印 ASCII 字符串,从文件开头按 4 字节对齐读取每个字作为指针,并以 0x1000 字节为步长在整个 32 位地址空间测试候选基址,按 CPU 核心数分配线程划分搜索范围。整个文件会被读入内存。
- 结果是带匹配数的候选基址排序列表(默认 10 个),需要分析人员确认。README 示例中,在 8 线程下处理一个镜像约用 41 秒,并展示把最小字符串长度提高到 100 可大幅缩短耗时,但会牺牲一定准确性。单元测试只覆盖线程间的地址范围划分,没有 CI;本次审阅未扫描任何文件。
- 采用 MIT 许可证(2017 年,Scott Gayou)。被分析的固件适用其自身条款。
关于此条目
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · sgayou/rbasefind · 修订 a661118
- src/lib.rs GitHub · sgayou/rbasefind · 修订 a661118
- src/main.rs GitHub · sgayou/rbasefind · 修订 a661118
- Cargo.toml GitHub · sgayou/rbasefind · 修订 a661118
- .gitignore GitHub · sgayou/rbasefind · 修订 a661118
- LICENSE GitHub · sgayou/rbasefind · 修订 a661118
- https://github.com/sgayou/rbasefind/releases/tag/v0.1.3