merces/entropy

GitHub: merces/entropy

一个用 C++20 编写的跨平台命令行工具,通过计算文件熵值来判断数据是否经过压缩、加密或加壳。

Stars: 77 | Forks: 11

# entropy `entropy` 是一个简单的命令行工具,用于计算文件的熵。 ## 为什么 [文件的熵](https://kennethghartman.com/blog/calculate-file-entropy/) 告诉我们文件的随机程度。 越接近 `8.00`,说明文件的随机性越高。 由于压缩和加密算法的输出通常由高熵数据组成,因此可以说 任何熵 `大于 7.0` 的文件都可能是经过压缩、加密或加壳(对于可执行文件而言)的。 我需要一种在 Windows 中快速计算一批文件熵的方法,所以我编写了 这个工具,它也可以在 Linux、macOS 以及其他可能的操作系统上使用。 ## 下载 Windows 版本可在[此处](https://github.com/merces/entropy/releases)下载。为了运行它们,您需要安装最新的 [Microsoft Visual C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist)。 要在其他操作系统上运行它,请查看[构建](#Building)部分。 ## 用法 计算单个文件的熵: ``` ./entropy /bin/ls 5.85 /bin/ls ``` 也支持 Shell 展开: ``` PS C:\> .\entropy.exe C:\Users\User\Downloads\* 7.92 C:\Users\User\Downloads\1.jpeg 8.00 C:\Users\User\Downloads\setup.exe 7.58 C:\Users\User\Downloads\nov.pptx 4.66 C:\Users\User\Downloads\data.bin 7.99 C:\Users\User\Downloads\pic.png 4.07 C:\Users\User\Downloads\budget.xls ``` 从上面的输出中,可以说 `/bin/ls` 没有被加壳,`1.jpeg` 使用了压缩, `setup.exe` 经过了压缩,`nov.pptx` 经过了压缩(没错,这些现代的 MS Office 文件实际上全都是 ZIP 文件),`data.bin` 未经压缩等等。这有绝对保证吗?并没有,这只是数学。:nerd_face: ## 构建 ### Linux/macOS 克隆仓库: ``` git clone https://github.com/merces/entropy.git cd entropy ``` 如果您安装了 CMake,请使用以下命令进行构建: ``` mkdir build cd build cmake .. make ``` 或者如果没有,直接使用 `g++`: ``` g++ -std=c++20 -o entropy entropy.cpp ``` ### Windows 如果您使用的是较新版本的 Visual Studio,可以克隆此仓库并在此处使用 `File -> Open -> CMake...` 打开 `CMakeLists.txt`。然后,选择适合您的配置并进行构建。 ## 类似工具 我知道以下工具可以达到类似的效果: | 名称 | 备注 | | --------------------------------------------------------------------------- | ----------------------------------------------------------------------- | | [DensityScout](https://cert.at/en/downloads/software/software-densityscout) | 使用作者称为 density 的不同算法。 | | [Detect It Easy](https://github.com/horsicq/Detect-It-Easy) | 显示漂亮的图表。还具备许多其他出色的功能。包含 CLI 版本。 | | [entropy](https://github.com/dirtbags/fluffy/blob/master/entropy.c) | 来自 Fluffy Suite。速度快。一次仅支持一个文件。 | | [Ent](https://gynvael.coldwind.pl/?id=158) | 算法不同,一次处理一个文件。仅限 Windows。可生成图表。 | | [ent](https://www.fourmilab.ch/random/) | 提供更多信息。一次处理一个文件。 | | [rahash2](https://www.radare.org/n/radare2.html) | 来自 radare2 框架。`rahash2 -a entropy` 即可完成。 | | [rz-hash](https://rizin.re) | 来自 Rizin 框架。`rz-hash -a entropy` 即可完成。 |
标签:Bash脚本, C++, 数据擦除, 文件分析, 熵计算