krycha420/Antivirus
GitHub: krycha420/Antivirus
一个基于 Python 的简易杀毒软件扫描器,通过文件签名和哈希机制检测并清除恶意软件。
Stars: 0 | Forks: 0
1. 作者信息
姓名:Krystian Kopeć
学号:337570
课程:计算机科学与编程基础
2. 项目目标与描述
本项目的目标是制作一个简单的杀毒软件扫描器,它可以扫描用户指定的目录,
检测包含病毒特征码的文件,并允许将其切除。该应用程序实现了任务要求的所有功能:
- 文件索引
- 扫描(全盘扫描、快速扫描、循环扫描)
- 威胁检测
- 修复(从受感染的文件中切除病毒特征码)
程序在控制台中运行,并以 JSON 格式存储文件状态。
3. 程序类划分及类描述
该程序按照面向对象编程的原则设计,划分为三个类以及一个控制模块。
- File 类(`file.py` 模块)
该类充当数据容器,代表系统中的单个文件。
1. 存储以下信息:文件名、路径、hash、最后修改时间、状态以及检测到的病毒特征码。
- Indexer 类(`indexer.py` 模块)
该类负责访问文件系统以及数据的读取和写入。
1. 递归搜索目录以查找文件。
2. 计算文件的 hash。hash 的计算是通过分块(chunks)实现的,即在计算大文件(例如视频)的 hash 时,为了不消耗过多 RAM,会分块读取数据,每次读取 8192 字节来计算 hash。
3. 管理文件的读取和写入。
4. 处理异常。
- Scanner 类(`scanner.py` 模块)
将 indexer 的操作与病毒数据库集成在一起。
```
1. Wczytuje sygnatury wirusów z pliku konfiguracyjnego (config.json). Celowo sygnatury wirusów są zapisane w systemie 16 aby były bardziej czytelne niz zapis bitowy. Dlatego potem korzystam z metody bytes.fromhex() aby zamienić sygnature z postaci heksadecymalnej na obiekt typu bytes, następnie czytam pliki binarnie i sprawdzam czy w pliku występuje sygnatura.Sygnatury nie są wpisane jako zwykły tekst, bo nie obsługiwałoby to znaków niedrukowalnych.
2. Aktualizuje stan w przypadku nowych lub zmodyfikowanych plików.
3. Prowadzi 3 tryby skanowania.
4. Zawiera metodę repair, która otwiera binarnie zainfekowany plik i usuwa ciąg bajtów odpowiadający wirusowi.
```
- 主模块(`main.py`)
负责与用户进行交互。
1. 获取待扫描目录的路径。
2. 显示扫描模式选择菜单。
3. 处理决策逻辑(在检测到感染的情况下)。
4. 用户指南与文件格式
要运行程序,请进入包含源代码和配置文件的目录,然后在终端中输入命令:
python3 main.py
- 程序启动后,会提示输入目录路径。
- 接着,用户需要从三种扫描模式中选择一种:
1:全盘扫描文件夹。
2:快速扫描(仅扫描更改)。
3:循环扫描(程序按照用户输入的间隔时间进行扫描)。
- 如果检测到病毒,程序将显示一条消息并询问:Do you want to cut out viruses YES/NO。选择 YES 将从文件中移除病毒。
配置文件与输出文件。
1. `config.json`(病毒库)包含病毒定义的 JSON 文件,格式如下:
{"NAZWA_WIRUSA": "SYGNATURA_HEX", ...}
为了使程序能够检测到病毒,受扫描的文件在二进制读取视图中必须包含该病毒的特征码。
(如果病毒是单词“VIRUS”,则其十六进制特征码为 5649525553,转换为 bytes 类型对象后即为“VIRUS”。因此,只要二进制读取视图中存在“VIRUS”字样,程序就能检测到该病毒。)
2. `indexes.json`(文件索引)由程序生成的文件。以 JSON 格式存储文件状态。用于在应用程序多次运行之间记住状态。结构如下:
[
{
"name": "plik.txt",
"path": "C:\\Sciezka\\do\\pliku.txt",
"modification_time": 1704281000.0,
"hash": "a1b2c3d4...",
"status": "clean",
"virus": null
}
]
5. 反思部分
工作范围。
所有的项目要求均已实现。应用程序能够对文件进行索引、计算它们的 hash 并检测文件系统中的更改。
扫描机制可以检测到被定义为病毒特定的字节序列。`repair` 方法则用于移除这些“危险的字节序列”。
遇到的问题及解决方案。
- 起初我没有进行递归进入子目录的操作,但为了修复这个问题,只需使用 `rglob` 方法即可。
- 我原本以为程序只能扫描与杀毒软件位于同一目录下的文件夹,但实际上,提供绝对路径就解决了这个问题。
标签:Homebrew安装, Python, 文件哈希, 无后门, 特征码匹配, 逆向工具