如何为AntiVirus编写签名数据库?

时间:2011-03-17 19:22:33

标签: c++ database algorithm security antivirus

我用C编写了一些小代码来扫描所有文件&我的硬盘中的文件夹...它还可以读取可执行文件(如.exe)的二进制代码的上半部分,并将其与内联单二进制签名(十六进制表示)进行比较。如果签名与任何扫描文件的bin代码匹配,它可以显示一条消息。

我们注意到我将样本签名保存在一个数组中,因为它只是一个签名。 如果我想添加许多其他签名,我该怎么办!我需要使用数据库!但我需要什么样的数据库?我需要使用SQL查询来获取和比较签名!商业反病毒(卡巴斯基,Symantic,..等)使用什么样的数据库? 任何想法PLZ?

3 个答案:

答案 0 :(得分:2)

Berkeley DB是一个免费/开源的嵌入式数据库库,基本上是磁盘上的键值存储(搜索树或散列表,具体取决于设置)。它甚至比SQLite更简单,因为它避免了关系数据和SQL的想法。

例如,您可以使用病毒签名作为键及其名称作为值。

答案 1 :(得分:1)

SQLite可能是您的应用程序的不错选择。与SQL Server / Oracle等完整的RDBMS系统相比,它是一个轻量级的SQL引擎。

附注:您可以考虑将此数据库保留在相关系统以外的位置。您好像担心恶意用户修改驱动器的内容。如果是这样,那些相同的用户可以很容易地知道您的方案,并确保他们更改的任何文件也反映在数据库中的新哈希值,因此当您进行比较时,它们将始终匹配。相反,如果您运行程序,将哈希值存储在不同系统上的数据库中,您可以更加轻松地保护数据库,因为两个系统都必须被接管。

答案 2 :(得分:1)

专业的avs不使用sql来匹配病毒签名。它是一个复杂得多的过程。 如果您对该主题感兴趣,请查看http://sourceforge.net/projects/clamwin/。或者在卡巴斯基2008泄露的消息来源......