在设计完病毒库后,接下来的这几篇文章将着重于设计并实现一个扫描器,结合上一模块设计的病毒库实现基本的文件检测功能,为我们的第一个杀毒引擎打下基础。
1.4.1 扫描器概述
扫描器(Scanner)是杀毒引擎中用于识别和检测恶意程序的核心组件。它的主要任务是分析给定文件是否包含已知的病毒特征,例如哈希值、特征码、特征字符串、特定的程序行为序列信息等,并据此判断该文件是否为恶意样本。
在杀毒引擎的整体架构中,扫描器与日志记录、用户界面、网络通信等模块相比,属于“核心中的核心”。它直接承担了病毒识别任务,是整个杀毒引擎能否“看见病毒”的关键模块。
简而言之,扫描器通常执行以下几个步骤:
特征提取:从文件中提取关键特征,如SHA-256哈希、可疑二进制片段等。
数据库比对:将这些特征与本地或云端病毒库中的记录进行比对。
判断输出:根据比对结果与检测逻辑,输出具体的威胁标签。
下面这张图简单展示了扫描器在杀毒引擎中的核心地位与模块关系:

扫描器在杀毒引擎中承担着路径处理、文件扫描、恶意代码检测等重要流程。
1.4.2 扫描流程概述
在上一小节中,已经了解了扫描器模块的功能定位。现在,我们将深入设计扫描流程,确保其能够完成基本的恶意代码检测任务。
流程设计思路
1.获取扫描对象路径
扫描器需要接收一个路径以此来确定扫描对象,这里的路径可以是具体文件的路径,也可以是一个文件目录的路径。当传入的是文件目录的路径时我们需要递归目录内的所有文件进行扫描。
2.文件读取与预处理
在确定了扫描对象后,需要对待检测文件进行读取与预处理。
3.SHA-256指纹比对
在这个步骤中需要计算文件的SHA-256值,并调用病毒数据库进行快速比对。
4.特征码匹配
假若上个步骤中指纹未命中,将进入本步骤对文件二进制内容进行特征码扫描。这一步骤同样需要调用病毒数据库进行病毒片段匹配。
5.结果判定与报告生成
最后根据检测结果判断文件是否为恶意样本,并生成相应的检测报告。
最终的扫描流程就像下面这个流程图所展示的一样:

这一流程图展示了通用的杀毒引擎检测逻辑。
1.4.3 扫描器核心设计
基于SHA-256与特征码的检测模块
1. 概述
后续我们会使用C语言配合Sqlite3数据库接口实现扫描器的核心检测逻辑。其中我们还会使用 WindowsAPI 以及 Windows 提供的 Bcrypt 接口分别来实现目录遍历、SHA-256 值计算等步骤。
2. 模块分工
我们将分别设计三个模块,分别是用于实现Sqlite3数据库操作的数据访问DAL层(DataAccessLayer)、用于扫描文件的核心模块以及将上面两个模块整合在一起的主模块。
DAL(DataAccessLayer)数据访问层:DAL是一个架构设计中的概念,DAL层负责数据库的访问,通常项目核心模块不会直接调用数据库接口来访问数据库,而是构建一个DAL数据访问层接口,通过该接口来提供符合项目的数据库访问方法。这样做可以使核心模块逻辑结构清晰,因为其隐藏了底层数据库的访问细节。实现“高内聚,低耦合”的优秀设计思想。除此之外还有表示层(USL)、业务逻辑层(BLL)。
文件名 | 文件功能 |
CoreEngine.c | 主模块,实现主要检测流程 |
CoreEngine.h | 主模块头文件,提供统一的检测接口 |
Database.c | 数据库访问层,用于封装对Sqlite3数据库的调用 |
Database.h | 数据库模块头文件 |
Scanner.c | 核心扫描器逻辑,实现文件指纹计算与特征码匹配 |
Scanner.h | 核心扫描器头文件,向CoreEngine模块提供检测接口 |
CoreEngine模块:负责整体扫描流程的实现,包含文件路径传入、调用检测流程、结果输出等。
Database模块:专注于构建对本地病毒数据库的访问操作,屏蔽底层数据库访问SQL细节。
Scanner模块:负责实际的病毒检测任务,如SHA-256的计算与特征码匹配逻辑的实现。
我们可以用下面的结构图来表示各模块之间的关系:

接下来的文章将开始逐步实现这三个模块。我们的实现流程应该是由底层到表层,因此实现的顺序应该是:
Database模块 -> Scanner模块 -> CoreEngine模块
以上就是扫描器核心逻辑设计与实现的上半部分,接下来的几篇文章,笔者都会围绕着扫描器的技术实现展开说明。
最后欢迎大家关注,后续还有很多好康的哦!若各位有任何的反馈与建议,也欢迎反馈至邮箱 llmsecbook@163.com。
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 3天前
被MysticEcho编辑
,原因: