# #扫描器 #文件 #恶意软件 #结构体 #威胁 #狩猎

app entropyscan-rs

文件熵扫描器,用于检测恶意软件

1 个不稳定版本

0.1.0 2024年5月12日

科学类别中排名137

MIT授权

20KB
363

entropyscan-rs

威胁狩猎的熵扫描器。也是一个教学项目。

项目被分为独立的“阶段”进行开发。

阶段 0:MVP

这是最小可行产品,我们实现了熵计算算法,并将其指向一个文件进行计算。非常基础,但这是我们开始的起点。

阶段 1:递归!

现在我们添加了处理整个目录的能力,通过递归收集来自父路径参数的可行目标(真实文件)。我们也开始正确使用 PathBuf

阶段 2:最小熵

我们的目标是找到可疑的熵文件,因此能够设置一个最低熵值可能很有用,低于此值的工具不会报告。在这个阶段,这通过位置参数来处理。

此外,现在我们有两个参数,我们包括一个小的 usage() 函数,但这很快就会变得烦人。我想知道在 Rust 中处理 CLI 参数是否有更好的方法...

阶段 3:Clap!

在我们添加更多功能之前,我们需要清理我们的 CLI 选项管理。是时候使用 clap 来简化我们的 CLI 配置了。这构成了一个重大的重建,但长远来看将带来回报。

阶段 4:模块

一个大的飞跃!在这个阶段,我们将代码重构到 main.rs 之外,并放入一个独立的模块。这为轻松添加新功能奠定了基础。

阶段 5:结构体和大量数学

我们希望为扫描器添加一些新功能,但要做到这一点,我们需要更正式地考虑数据。在这个阶段,我们添加了一个 FileEntropy 结构体,帮助我们将有用信息放在一个地方。

但最大的变化是在添加了 stats 模块,该模块添加了关于我们发现文件的统计计算。尽管目前尚未在程序中使用,但将此代码编写下来是这一阶段的一个重大变化。这包括一个 IQR 结构体,帮助我们包含关于异常值四分位距的数据。

阶段 6:子命令

我们在第5阶段为提供扫描目标的统计数据打下了基础:平均和中位熵、方差,甚至是基于IQR方法的异常值。这种输出与标准列表有很大不同,可能需要成为一个独立的命令。幸运的是,我们已实现了Clap,因此重构为子命令将会相对容易。我们将需要编写代码来打印这些统计数据,但这并不困难,因为我们有很好的清洁函数。

第7阶段:用户体验

我们已经添加了所有真正想要的功能,现在我们可以考虑让用户界面更美观。特别是,如果输出不仅仅是制表符分隔的字段将会很棒。让我们将默认输出设置为漂亮的视觉表格。为了实现这一点,我们将添加另一个依赖项:名为tabled的库。

第8阶段:格式

我们最后的一项任务是给用户提供一些输出选项。默认表格很好,但我们可能还想让数据在其他工具中使用。为此,我们将提供另外两种选项:CSV和JSON输出,通过-f--format选项来控制。这将对statsscan子命令都可用。

这引入了一个非常有价值的库:serde-json,可以直接将我们的结构体转换为JSON。

第9阶段:完善细节

我们已经完成了所有功能!剩下的是从效率和风格的角度审查我们的代码,以进行清理。

最好的改进之一是移除了那些令人讨厌的clone()调用,改为使用引用。当我们不需要传递整个结构体时,就不应该这样做!

依赖项

约3-4MB
约76K SLoC