-
-
[原创]从零构建杀毒引擎系列之本地病毒库设计
-
发表于: 3天前 536
-
本文将接续前文,设计出杀毒引擎中的本地病毒库。
清晰、结构合理的病毒库是后续各功能模块实现的基础,能够使整个扫描与检测流程更加高效、规范。
本地病毒库的主要作用是用于存储已知的恶意样本特征信息(如文件哈希值、特征码等),并为扫描器模块提供实时的查询支持。其核心目标是实现:
快速查询
易更新
支持离线环境下的基础病毒识别
1.3.1 设计目标
在设计本地病毒库之前,首先需要明确该模块的核心任务与技术方案。在前面的文章中我们已经确定了将会使用 Sqlite3 作为本地数据库存储引擎,而我们的最终目标是构建一个杀毒引擎。因此,可以通过设计一个 Sqlite 本地病毒库并使用扫描器对文件对象进行检测。
在设计流程之前,首先要确定引擎中将使用哪些恶意代码检测技术来实现核心检测逻辑。考虑到这是一个从 0 开始构建的入门级杀毒引擎,我们将会使用最基础且经典的静态扫描技术:
SHA-256 指纹比对技术
特征码检测技术(Signature Matching)
虽然基础,但这两项技术仍然是目前大多数杀毒软件不可或缺的核心组件。
在确定了扫描器的检测技术逻辑后,就可以开始设计我们的本地病毒库。这个本地病毒库要用于存储已知的病毒SHA256值、已知的特征码和名称。只要知道这两点就可以为杀毒引擎提供数据支撑了。
因此,我们需要两个表,分别存储SHA-256值和特征码:
1. 哈希特征表(SHA256表):存储已知恶意样本的哈希值、对应标签与记录时间等信息。
2. 特征码表(Signature表):存储已知恶意特征码的字节序列、检测标签等信息。
1.3.2 表结构设计与字段说明
为了实现本地快速恶意软件检测功能,我们基于上一小节的目标设计了两张核心数据库表:virus_sha256 和 virus_signatures。
这两张表分别用于支持基于哈希比对和基于特征码匹配的静态检测机制,是本地扫描器的重要数据基础。
virus_sha256 表
该表用于存储已知恶意文件的 SHA-256 哈希值。扫描器在扫描文件时,将计算文件的 SHA-256 值,并与此表中的记录进行比对,若存在匹配则判定为已知病毒。
建表语句
CREATETABLE virus_sha256 ( sha256 TEXT PRIMARY KEY, UNIQUE(sha256));
字段说明
字段名 | 类型 | 说明 |
sha256 | TEXT | 病毒样本文件的SHA-256值,主键且唯一 |
实际使用中,还需要扩展其他辅助字段,如病毒名称、添加时间等,感兴趣的同学可以自行扩充参数。
virus_signatures 表
该表用于存储病毒特征码及其对应的名称,比如“5768426F79....,Trojan.Panda.a”等,扫描器在扫描文件时将读取该表,并将已知的病毒特征码带入进行比对查找,若比对成功则判定为已知病毒。
建表语句
CREATETABLE virus_signatures ( name TEXTNOTNULL, signature TEXTNOTNULL, PRIMARY KEY (name, signature));
字段说明
字段名 | 类型 | 说明 |
name | TEXT | 病毒样本名称,用于标识此特征码属于哪个病毒 |
signature | TEXT | 特征码字节序列(以十六进制字符串形式存储) |
以上就是本项目将要用到的两个表,下面贴出完整的建表语句:
-- 恶意软件哈希指纹表(用于SHA-256哈希比对)CREATETABLE virus_sha256 (sha256 TEXT PRIMARY KEY,-- 病毒样本的SHA-256值,唯一文件标识UNIQUE(sha256));-- 恶意软件特征码表(用于特征码静态匹配)CREATETABLE virus_signatures (name TEXTNOTNULL,-- 病毒样本代号signature TEXTNOTNULL,-- 病毒样本特征码,用于识别病毒PRIMARY KEY (name, signature));
以上就是项目本地病毒库的设计,下一篇文章将介绍扫描器的核心逻辑设计与实现。
最后欢迎大家关注,后续还有很多好康的哦!若各位有任何的反馈与建议,也欢迎反馈至邮箱 llmsecbook@163.com。