vobst/coderec
GitHub: vobst/coderec
一个基于统计学的机器码检测工具,用于在二进制与内存转储中高效定位可执行代码。
Stars: 2 | Forks: 2
# coderec
在二进制文件或内存转储中查找机器码。示例:
Cisco IOS 固件镜像:

Cisco 启动 ROM 内存转储:

## 安装
将数据块包含在版本控制中是一个糟糕的主意。因此你必须
下载当前的语料库并解压,然后才能构建可执行文件。
一键命令如下:
```
curl --proto '=https' --tlsv1.2 -sSf https://valentinobst.de/a13f15d91f0f8846d748e42e7a881f783eb8f922861a63d9dfb74824d21337039dd8216f0373c3e5820c5e32de8f0a1880ec55456ff0da39f17d32f567d62b84/cpu_rec_corpus.tar.gz -o cpu_rec_corpus.tar.gz && tar xf cpu_rec_corpus.tar.gz && rm cpu_rec_corpus.tar.gz
```
构建此项目需要
[`pkg-config`](https://en.wikipedia.org/wiki/Pkg-config)
和 `libfontconfig1`。在基于 Debian 的系统上,可以通过以下方式安装:
```
apt install libfontconfig1-dev pkg-config
```
然后你可以像其他 `cargo` 基础的 Rust 项目一样安装:
```
cargo install --locked --path .
```
### 打包
Arch 系列发行版用户可以通过
[AUR](https://aur.archlinux.org/packages/coderec) 安装 `coderec`。
## 如何阅读图表
有两种图表:字节图表和区域图表。在字节图表中,每个
点对应文件中的一个字节;X 值为字节偏移量,Y 值为其数值。使用颜色来指示该字节所属区域的检测结果。以下是一个字节图表示例:

对于较大的文件,字节图表不再实用。此时可以使用区域图表。这些图表以两个彩色条形的形式显示目标文件每个区域的检测结果,分别对应顶部和底部的质量指示条,表示三元组和二元组检测的质量。条形的颜色用于指示该区域的二元和三元组检测结果是否一致。以下是一个区域图表示例:

默认生成字节图表;使用 `--big-file` 标志可切换为区域图表。
## 关于
检测机器码和语料库的方法来源于
[`cpu_rec`](https://github.com/airbus-seclab/cpu_rec/)。此代码库是
[`cpu_rec_rs`](https://github.com/trou/cpu_rec_rs) 的一个硬分支。
为什么要使用这个而不是 `cpu_rec_rs`?原因如下:
- 利用所有 CPU 核心(在大文件上速度显著更快),
- 生成美观的图表,
- 更易用,因为语料库已内嵌(将二进制文件加入 PATH 即可直接使用),
- 不同的假阳性过滤启发式算法,
- 针对大文件使用不同的窗口大小策略(由于利用所有核心,可以使用更小的窗口以获得更好结果),
- 更佳的高熵和字符串区域检测,
更多详细信息请参考我们的 [博客文章](https://blog.eb9f.de/2024/11/24/coderec.html)。
注意:由于该方法基于统计学,误报是可能发生的。你应该交叉验证其他来源,并使用反汇编器验证结果。
标签:Cargo, Ruby on Rails, Rust, SEO: 二进制文件识别, SEO: 机器码查找, 二进制分析, 二进制发布, 二进制文件扫描, 云安全运维, 云资产清单, 代码检测, 内存转储, 区域检测, 可视化分析, 可视化界面, 固件分析, 固件逆向, 字节级分析, 开源工具, 数据库接管, 文件格式分析, 机器码识别, 熵分析, 系统运维工具, 网络流量审计, 逆向工程, 通知系统