alexbeatnik/AV

GitHub: alexbeatnik/AV

一款零依赖的 Windows 便携式多引擎杀毒工具,通过 ClamAV、YARA 规则和 VirusTotal 三层检测机制提供轻量级的恶意软件防护。

Stars: 0 | Forks: 0

# AV

AV Logo

[![许可证](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) [![平台](https://img.shields.io/badge/Platform-Windows_10_/_11-0078d7.svg)](https://www.microsoft.com/windows) [![框架](https://img.shields.io/badge/.NET_Framework-4.8-purple.svg)](https://dotnet.microsoft.com/download/dotnet-framework/net48)

Dashboard Logs

Quarantine Settings

一款轻量级的 **Windows 多引擎杀毒软件**。三层检测机制集成于一个约 280 KB 的便携版 exe 中,**零依赖、零工具链** —— 直接使用 Windows 内置的 `csc.exe` 编译器(.NET Framework 4.8,Win10/11 自带)即可构建: 1. **ClamAV** — 经典的特征码引擎(官方未修改的二进制文件,自动下载); 2. **YARA rules** — 第二层检测引擎,在每次扫描中运行来自 [YARA Forge](https://yarahq.github.io/) 的社区规则(以及你自定义的 `.yar` 文件),以捕获特征码数据库遗漏的恶意软件家族和新型威胁; 3. **VirusTotal** — 通过 SHA256 哈希值使用 70 多个引擎检查可疑和未知文件;VirusTotal 从未见过的文件可以(自主选择开启)上传进行分析。 界面提供**英文**(默认)和**乌克兰文**,可随时在“设置”中切换。 ## 为什么要有这个项目? Windows Defender 非常出色,本项目无意取代它。相反,它作为一个轻量级的高效工具,展示了如何完全用 C# 构建一个单一的便携式面板,将独立、解耦的恶意软件检测系统协调起来——在保持最小资源占用的同时,通过本地特征码、本地启发式规则和云端信誉审查最大化覆盖范围。 ## 专注资源与性能 * **可执行文件大小:** 约 280 KB(单一便携版 EXE,零依赖) * **下载体积:** ClamAV 二进制资源及数据库(总计约 220 MB)+ YARA 核心规则集(总计约 15 MB) * **典型内存占用:** * **空闲时:** < 15 MB RAM(驻留系统托盘) * **扫描时:** 协调器 UI(`AV.exe`)占用约 80 MB RAM * *注意:* 扫描生成的子进程会按需分配内存。ClamAV 常驻数据库后端(`clamd`)占用约 1.2 GB RAM(仅在活动扫描期间加载),而 `yara64` 启发式进程在评估规则时通常占用约 150 MB RAM。 ## 扫描架构与流程 ``` Scan Input (Disk / RAM / New File Event) │ ┌────────┴────────┐ ▼ ▼ ClamAV YARA Signatures Heuristics │ │ └────────┬────────┘ ▼ Suspicion │ ▼ VirusTotal Arbitration │ ▼ Threat Decision ┌────────┴────────┐ ▼ ▼ Quarantine Exclusion ``` ## 三个引擎如何协同工作 每次扫描(手动扫描、快速扫描、全盘扫描、内存扫描以及自动的新文件监控)都会在完全相同的文件列表上分阶段进行: 1. **ClamAV** 扫描文件(手动扫描使用带有并行 worker 的快速 `clamd` 守护进程,并自动回退到 `clamscan`;来自监控器的新文件小批量直接送入 `clamscan`)。 2. **YARA** 使用 `yara64 --scan-list` 重新检查同一列表——包括转储的进程内存。ClamAV 的检测结果是*判定*;而单个社区规则匹配仅仅是一种*怀疑*(YARA Forge 规则确实会误报合法的打包器和安装程序),因此两者的信任度不同——请参见下方的信任层级。 3. **VirusTotal** 负责对这些怀疑进行仲裁:仅被 YARA 标记的文件以及被文件夹监控器捕获的新文件将被排入 SHA256 哈希查询队列(限制为免费层级的 4 次请求/分钟)。**只有在**明确启用上传开关时,VirusTotal 中未知的文件才会上传进行分析(上传到 VT 的文件将对全球研究人员可见——默认仅查询哈希,不会有任何数据离开你的电脑)。 ### 信任层级 — 如何解决冲突的结果 | 信号 | 处理为 | 处理方式 | |--------|-----------|--------------| | ClamAV 特征码匹配 | 威胁 | 立即弹出威胁对话框 / 自动隔离 | | YARA 匹配,VirusTotal 确认(≥ 3 个引擎) | 威胁 | 弹出威胁对话框 / 自动隔离,命名为 `YARA: + VirusTotal x/y` | | YARA 匹配,VirusNormal 扫描干净(20+ 引擎 0 标记) | 极有可能是误报 | 文件保留原位,并记录在日志中 | | YARA 匹配,VT 不确定 / 未知 / 无法访问 | 怀疑 | 由你通过威胁对话框决定(或者在开启自动隔离时静默隔离——可在“隔离区”页面撤销) | | YARA 匹配,未配置 VT 密钥 | 怀疑 | 经典流程:弹出威胁对话框 / 自动隔离 | 当文件在等待 VirusTotal 判决时,不会有任何程序触碰它,扫描摘要也会如实说明,判决结果通常会在几秒钟内出现在日志(和托盘)中。针对转储进程内存的 YARA 匹配会跳过等待步骤——因为转储文件在扫描结束时会被删除,所以它们会直接进入威胁处理流程。 YARA 引擎(`yara64.exe`,来自官方的 [VirusTotal/yara](https://github.com/VirusTotal/yara) 发布版)和 YARA Forge *核心* 规则集会在首次运行时自动下载,并且规则每周刷新一次。自定义规则请放入 `yara\rules\custom\`。 所有配置都在 **设置 → DETECTION ENGINES…** 中完成——包括 YARA 开关和规则维护,以及 VirusTotal API 密钥(可在 [virustotal.com](https://www.virustotal.com/) 免费注册账号)和哈希检查与上传的开关。隔离区的 **属性** 对话框和 **威胁对话框** 也有一个 VIRUSTOTAL 按钮,可以在浏览器中打开该文件的公开 VT 页面——该功能无需任何 API 密钥即可使用。 ## 安全设计流水线 每个被扫描的文件都会遵循多阶段的纵深防御安全流水线,以高效隔离和消除威胁,同时最小化性能影响并防止对干净文件的误报: ``` [ Threat Sources (Disk / RAM / Folder Monitor) ] │ ▼ ┌───────────────────────┐ │ 1. Signature Engine │ ──(Threat Found)──► [ Auto-Quarantine / Alert ] │ (ClamAV CVD/CLD) │ └───────────────────────┘ │ (No matches) ▼ ┌───────────────────────┐ │ 2. Heuristics Engine │ ──(No matches)────► [ Target Allowed (Clean) ] │ (YARA ruleset) │ └───────────────────────┘ │ (Suspicious) ▼ ┌───────────────────────┐ │ 3. Cloud Reputation │ ──(Clean / 0 flags)► [ Left in Place (False Pos.)] │ (VirusTotal Hash API)│ └───────────────────────┘ │ (≥ 3 Engines) ▼ [ Threat Verdict Confirmed ] │ ▼ [ Neutralized Quarantine / XOR ] ``` ## 特性 - 扫描文件、文件夹或**整台电脑**;**内存扫描**(实时进程内存——捕获磁盘上隐藏的注入/解压代码);对常见感染点进行**快速扫描**;**快速全盘扫描**(仅针对高风险文件类型,可在设置中切换);计划快速扫描(每周/每日) - **扫描时使用 clamd 引擎**:数据库加载到内存中进行并行扫描,仅在扫描期间驻留 - **自动检查新文件**:文件夹监控(下载、桌面、Program Files、Temp、AppData…)——新文件会被所有引擎自动扫描 - **威胁处理**:针对每个文件可选择隔离 / 删除 / 排除,或者静默自动隔离 - **无害化隔离区**(XOR 转换的 `.quar` 文件,既无法运行也不会触发其他杀毒软件),支持搜索、排序以及包含 SHA256 在内的属性查看 - **白名单**、**USB 扫描提醒**、**扫描性能模式**,带有进度和预计到达时间(ETA)的可读彩色日志、统计数据 - 一键更新特征码,每日自动检查(当特征码超过一周未更新时会发出**数据库过期警告**),应用可从该仓库的 GitHub Releases 进行**自更新** - **便携版或按用户安装**(无需管理员权限)——首次运行会询问一次;托盘图标、自启动、单实例、固定大小的暗色主题窗口 ## 构建 ``` .\build.ps1 # builds AV.exe with the csc.exe built into Windows .\test.ps1 # builds and runs the unit tests (AVUI.Tests.exe) ``` 无需安装任何东西。有关贡献者/代理指南,请参见 `AGENTS.md`(硬性限制:C# 5,仅限 .NET Framework 4.8 BCL,不使用 NuGet)。 ## 在新电脑上安装 将单一的 `AV.exe` 复制到任意位置并运行。首次启动会询问:是按用户安装到 `%LocalAppData%\Programs\AV`(无需管理员权限,创建快捷方式及“应用”菜单项),还是保持便携模式。ClamAV(包含数据库约 220 MB)和 YARA 引擎及规则(约 15 MB)将被自动下载。 ## 结构 ``` src/ — the application (WinForms, C# 5), one portable exe MainForm.Yara.cs — YARA engine: download, Forge rules, scan phase MainForm.VirusTotal.cs — VT hash lookups, opt-in uploads, rate limiting MainForm.Engines.cs — the engines settings dialog MainForm.Scan.cs — scans, progress/ETA, clamd engine MainForm.*.cs — monitor, quarantine, updates, install, USB, UI… Lang.cs — English/Ukrainian string table tests/ — unit tests + zero-dependency test runner build.ps1 / test.ps1 — zero-toolchain build scripts app.ico / logo.png — placeholder shield icon (temporary branding) clamav/ — portable ClamAV (not in git, downloaded) yara/ — yara64.exe + rules (not in git, downloaded) quarantine/ — neutralized (.quar) files + index ``` ## 许可证 [Apache License 2.0](LICENSE)。ClamAV® 是 Cisco Systems, Inc. 的注册商标(GPLv2,作为独立的未修改进程运行);YARA 版权归 VirusTotal 所有(BSD-3);规则由 [YARA Forge](https://github.com/YARAHQ/yara-forge) 提供(适用捆绑规则集的许可协议);VirusTotal 通过其公共 API 并在其服务条款下使用。本项目是一个独立的开源 UI,与上述任何一方均无附属关系。
标签:ClamAV, Web 安全测试, YARA, 云资产可视化, 防病毒软件