packing-box/docker-packing-box
GitHub: packing-box/docker-packing-box
一个集成加壳工具、检测器和机器学习流水线的 Docker 容器,用于生成加壳样本数据集、训练和评估可执行文件加壳检测模型。
Stars: 62 | Forks: 17

Packing Box 
Experimental toolkit for static detection of executable packing.
[](http://docker-packing-box.readthedocs.io/en/latest/?badge=latest)
[](https://www.blackhat.com/eu-22/arsenal/schedule/index.html#packing-box-playing-with-executable-packing-29054)
[](https://www.blackhat.com/eu-23/arsenal/schedule/#packing-box-breaking-detectors--visualizing-packing-35678)
[](https://www.blackhat.com/eu-24/arsenal/schedule/#packing-box-improving-detection-of-executable-packing-41931)
[](https://www.gnu.org/licenses/gpl-3.0)
此 Docker 容器是一个 CLI 环境,包含一个工具集,汇集了可执行文件分析器、加壳检测器、加壳工具和解壳工具,以及许多用于生成和操作不同格式(包括 PE、ELF 和 Mach-O)的加壳与未加壳可执行文件数据集的工具,旨在评估静态检测技术和工具,可视化可执行文件的布局,并在多种算法的支持下自动化机器学习流程。
请参阅 Black Hat Arsenal 的演示文稿以获取演示:
- [Packing-Box: Playing with Executable Packing](https://raw.githubusercontent.com/packing-box/docker-packing-box/main/docs/material/bheu22-packingbox.pdf)
- [Packing-Box: Breaking Detectors & Visualizing Packing](https://raw.githubusercontent.com/packing-box/docker-packing-box/main/docs/material/bheu23-packingbox.pdf)
- [Packing-Box: Improving Detection of Executable Packing](https://raw.githubusercontent.com/packing-box/docker-packing-box/main/docs/material/bheu24-packingbox.pdf)
这是您启动 Docker 容器时可以看到的内容。

Packing-Box 中集成的各种项目是通过非常声明式且易于使用的 YAML 格式在不同的[配置文件](https://github.com/packing-box/docker-packing-box/tree/main/src/conf)中定义的。这使得为研究人员界定评估和机器学习模型训练的范围变得直接且实用。
## :fast_forward: 快速开始
构建镜像:
```
# docker build -t dhondta/packing-box .
[...]
<<
>>
[...]
```
启动并将当前工作目录挂载为容器中的 `/mnt/share`:
**Windows**
```
PS C:\> docker run -it -h packing-box -v ${pwd}:/mnt/share dhondta/packing-box
```
**Linux**
```
# docker run -it -h packing-box -v `pwd`:/mnt/share dhondta/packing-box
```
## :clipboard: 基础知识
### 项目使用
*项目*是通过 [YAML 配置文件](https://github.com/packing-box/docker-packing-box/tree/main/src/conf)进行配置的。它们包括:
- [`analyzers.yml`](https://github.com/packing-box/docker-packing-box/blob/main/src/conf/analyzers.yml): 用于分析文件或更具体地说是加壳痕迹的工具
- [`detectors.yml`](https://github.com/packing-box/docker-packing-box/blob/main/src/conf/detectors.yml): 用于分析并判断可执行文件是否已加壳的工具
- [`packers.yml`](https://github.com/packing-box/docker-packing-box/blob/main/src/conf/packers.yml) 和 [`unpackers.yml`](https://github.com/packing-box/docker-packing-box/blob/main/src/conf/unpackers.yml): 不言自明
在 Packing-Box 内部,[`packing-box`](https://github.com/packing-box/docker-packing-box/blob/main/src/files/tools/packing-box) 工具允许设置和测试项目。
**操作** | **描述** | **命令**
:---:| --- | ---
**`setup`** | 根据 YAML `install` 定义设置项目 | `# packing-box setup detector die`
**`test`** | 使用内置测试样本集测试项目 | `# packing-box test packer upx`
之后,项目就可以在控制台中使用了。
```
$ die --help
<>
$ upx --help
<>
```
### 批量加壳与检测
加壳工具和检测器都有各自用于批量操作的专用工具,[`packer`](https://github.com/packing-box/docker-packing-box/blob/main/src/files/tools/packer) 和 [`detector`](https://github.com/packing-box/docker-packing-box/blob/main/src/files/tools/detector)。它们可以处理单个文件、整个文件夹或特殊的数据集实例(基于 [`pbox`](https://github.com/packing-box/docker-packing-box/tree/main/src/lib/pbox) 包中定义的抽象)。
```
$ packer upx path/to/executables --prefix "upx_"
<>
```
对于 [`detector`](https://github.com/packing-box/docker-packing-box/blob/main/src/files/tools/detector) 工具,如果不选择任何检测器,将使用在 [`detectors.yml`](https://github.com/packing-box/docker-packing-box/blob/main/src/conf/detectors.yml) 中被选为“*superdetector*”的检测器。此外,`--binary` 选项将只判断目标可执行文件是否已加壳,而不检测具体的加壳工具。
```
$ detector path/to/single-executable -d die -d pypackerdetect
<>
$ detector path/to/executables
<>
$ detector path/to/executables -d bintropy --binary
<>
```
### 学习流程
机器学习模型通过 [YAML 配置文件](https://github.com/packing-box/docker-packing-box/tree/main/src/conf)进行微调。它们包括:
- [`algorithms.yml`](https://github.com/packing-box/docker-packing-box/blob/main/src/conf/algorithms.yml): 训练模型时使用的算法及其静态或动态参数
- [`features.yml`](https://github.com/packing-box/docker-packing-box/blob/main/src/conf/features.yml): 训练和使用模型时要考虑的特征

*PREPARE* 阶段,尤其是 *特征工程*,是通过 *features* YAML 定义进行微调的。请注意,特征提取是通过 Packing-Box 的 [`pbox`](https://github.com/packing-box/docker-packing-box/tree/main/src/lib/pbox) 包实现的,而特征推导和转换则是通过 *features* YAML 文件进行微调的。
*TRAIN* 阶段通过 *algorithms* YAML 文件进行微调,通过设置静态和/或交叉验证参数。
### 数据集操作
*PREPARE* 阶段,尤其是 *数据集生成*,是通过 [`dataset`](https://github.com/packing-box/docker-packing-box/blob/main/src/files/tools/dataset) 工具实现的。
**操作** | **描述** | **命令**
:---:| --- | ---
**`make`**  | 制作一个新的数据集,可以是完全加壳的,也可以是与未加壳样本混合的 | `# dataset make dataset -f PE -n 200 -s /path/to/pe`
**`merge`**  | 合并两个数据集 | `# dataset merge dataset dataset2`
**`select`**  | 选择数据集的一个子集以创建新数据集 | `# dataset select dataset dataset2 -q "format == 'PE32'"`
**`update`**  | 根据给定标签的新样本更新数据集 | `# dataset update dataset -l labels.json -s folder-of-executables`
### 数据可视化
*VISUALIZE* 阶段可以使用 [`dataset`](https://github.com/packing-box/docker-packing-box/blob/main/src/files/tools/dataset) 和 [`visualizer`](https://github.com/packing-box/docker-packing-box/blob/main/src/files/tools/visualizer) 工具执行。
为了可视化特征值:
```
$ dataset plot test-mix byte_0_after_ep byte_1_after_ep --multiclass
```

为了可视化样本(旨在比较未加壳版本和某些加壳版本):
```
$ visualizer plot "PsExec.exe$" dataset -s -l not-packed -l MEW -l RLPack -l UPX
```

例如,这将适用于如下格式化的结构:
```
folder/
+-- not-packed/PsExec.exe
+-- packed
+-- MEW/mew_PsExec.exe
+-- RLPack/rlpack_PsExec.exe
+-- UPX/upx_PsExec.exe
```
### 模型操作
流程的 *TRAIN* 和 *PREDICT* 阶段是通过 [`model`](https://github.com/packing-box/docker-packing-box/blob/main/src/files/tools/model) 工具实现的。
**操作** | **描述** | **命令**
:---:| --- | ---
**`compare`**  | 比较多个模型的性能指标 | `# model compare model --dataset dataset --model model2`
**`test`**  | 在给定数据集上测试模型 | `# model test model --name dataset`
**`train`**  | 根据给定算法和输入数据集训练模型 | `# model train dataset --algorithm dt`
## :star: 相关项目
您可能也会喜欢这些:
- [Awesome Executable Packing](https://github.com/packing-box/awesome-executable-packing): 与可执行文件加壳相关的精选资源列表。
- [Bintropy](https://github.com/packing-box/bintropy): 用于估计二进制文件是否包含压缩或加密字节可能性的分析工具(灵感来自[这篇论文](https://ieeexplore.ieee.org/document/4140989))。
- [Dataset of packed ELF files](https://github.com/packing-box/dataset-packed-elf): 使用许多不同加壳工具加壳的 ELF 样本数据集。
- [Dataset of packed PE files](https://github.com/packing-box/dataset-packed-pe): 使用许多不同加壳工具加壳的 PE 样本数据集([此仓库](https://github.com/chesvectain/PackingData)的分支)。
- [DSFF](https://github.com/packing-box/python-dsff): 实现 DataSet File Format (DSFF) 的库。
- [PEiD](https://github.com/packing-box/peid): 著名的 Packed Executable iDentifier ([PEiD](https://www.aldeid.com/wiki/PEiD)) 的 Python 实现。
- [PyPackerDetect](https://github.com/packing-box/pypackerdetect): PE 文件的加壳检测工具([此仓库](https://github.com/cylance/PyPackerDetect)的分支)。
- [REMINDer](https://github.com/packing-box/reminder): 使用简单启发式方法的加壳检测器(灵感来自[这篇论文](https://ieeexplore.ieee.org/document/5404211)))。
## :books: 相关阅读
- arXiv - [Experimental Toolkit for Manipulating Executable Packing](https://arxiv.org/abs/2302.09286)
- Black Hat Arsenal EU 2022 - [Packing-Box: Playing with Executable Packing](https://raw.githubusercontent.com/packing-box/docker-packing-box/main/docs/material/bheu22-packingbox.pdf)
- Black Hat Arsenal EU 2023 - [Packing-Box: Breaking Detectors & Visualizing Packing](https://raw.githubusercontent.com/packing-box/docker-packing-box/main/docs/material/bheu23-packingbox.pdf)
- Medium 博客文章 - [Unpacking the Potential of "Packing Box"](https://medium.com/@elniak/unpacking-the-potential-of-packing-box-dfd765609233)
## :clap: 支持者
[](https://github.com/packing-box/docker-packing-box/stargazers)
[](https://github.com/packing-box/docker-packing-box/network/members)

标签:Apex, Black Hat Arsenal, DAST, DNS 反向解析, DNS 解析, Docker, ELF文件分析, Mach-O文件, PE文件分析, Python, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 加壳检测, 可执行文件加壳, 安全防御评估, 容器化安全, 异常检测, 恶意软件分析, 数据集生成, 无后门, 机器学习, 模型训练, 网络安全, 脱壳, 请求拦截, 逆向工具, 逆向工程, 隐私保护, 静态分析