【问题标题】:How to write signatures database for AntiVirus?如何为 AntiVirus 编写特征库?
【发布时间】:2023-04-10 21:49:01
【问题描述】:
我用 C 编写了小代码来扫描我硬盘中的所有文件和文件夹......它还可以读取可执行文件(如 .exe )的二进制代码的上部并将其与内联单个二进制文件进行比较签名(以十六进制表示)。如果签名与任何扫描文件的 bin 代码匹配,它会显示一条消息。
我们注意到我将样本签名保存在一个数组中,因为它只是一个签名。
如果我想添加很多其他签名,我必须做什么!我需要使用数据库!但是我需要什么样的数据库?我是否需要使用 SQL 查询来获取和比较签名!商业杀毒软件(Kaspersky、Symantic、..etc)使用什么样的数据库?
有什么想法吗?
【问题讨论】:
标签:
c++
database
algorithm
security
antivirus
【解决方案1】:
Berkeley DB 是一个免费/开源的嵌入式数据库库,基本上是磁盘上的键值存储(搜索树或哈希表,取决于设置)。它甚至比 SQLite 更简单,因为它避免了关系数据和 SQL 的概念。
例如,您可以将病毒签名用作键,将它们的名称用作值。
【解决方案2】:
SQLite 可能是您的应用程序的不错选择。与 SQL Server / Oracle 等成熟的 RDBMS 系统相比,它是一个轻量级 SQL 引擎。
附注:您可以考虑将此数据库保存在相关系统以外的位置。似乎您担心恶意用户会修改驱动器的内容。如果是这样,那些相同的用户可以很容易地了解您的方案,并确保他们更改的任何文件也反映在您的数据库中的新哈希值中,因此当您进行比较时,它们将始终匹配。相反,如果您运行您的程序,将哈希值存储在不同系统上的数据库中,那么您的数据库没有受到损害会更放心,因为这两个系统都必须被接管。