Zcxczcxcz/TurkmenGuard

GitHub: Zcxczcxcz/TurkmenGuard

基于 ClamAV、YARA 和哈希特征码的 Windows 桌面杀毒软件,提供离线扫描、实时防护与隔离管理。

Stars: 0 | Forks: 0

# TurkmenGuard (Türkmen Goragçy) v4.5.2 **仓库地址:** https://github.com/Zcxczcxcz/TurkmenGuard **面向开发者:** [docs/DEVELOPERS.md](docs/DEVELOPERS.md) · **Backend API:** [backend/README.md](backend/README.md) **适用于 Windows 7 SP1+ / 10 / 11 (x64) 的独立杀毒软件** 本地离线扫描。网络**仅**用于更新特征码(每周一次或手动更新)。 ## 这是什么 **TurkmenGuard** —— 一款采用深色极简界面(深蓝 + 绿色强调色)的桌面 WPF 杀毒软件。Türkmençe(土库曼语)为主要语言,同时也支持俄语和英语。 | 参数 | 值 | |----------|----------| | 平台 | **.NET Framework 4.8** (`net48`) —— 兼容 Windows 7 | | UI | WPF + Material Design 3,企业级深色主题 | | 引擎 | **ClamAV 1.5.3** (完整的 libclamav) → YARA → Entropy (PE, 7.95) | | Hash fallback | SQLite 540k+(如果未安装 ClamAV engine) | | 网络 | 用于 CVD 的 `SignatureUpdateService` + `freshclam` | | 版本 | **4.5.2** | ### 功能 - Dashboard —— 保护状态、YARA、统计数据 - 快速 / 全盘 / 自定义 / 文件扫描 - 实时保护 (FileSystemWatcher) - 隔离区 (AES-256,恢复/删除) - 设置:语言、白名单、计划任务、**开机自启**、**自我保护**、特征码更新 - 托盘:打开 / 退出;附带 `--tray` 参数自启(在无窗口的情况下驻留托盘) ## 部署 (Release) ### 快速构建发行版 (~1.1 GB) ``` cd TurkmenGuard publish.bat ``` 结果: - `dist/TurkmenGuard-v4.5.2/` —— 面向用户的现成文件夹 - `dist/TurkmenGuard-v4.5.2-win-x64.zip` —— 用于发送的压缩包(不提交至 git) ### 重置计数器和设置 ``` powershell -ExecutionPolicy Bypass -File tools\reset-user-settings.ps1 ``` ### 发行版包含的内容 | 组件 | 大小 (约) | |-----------|-------------------| | TurkmenGuard.exe + DLL | ~15 MB | | ClamAV engine + CVD | ~400 MB | | hash-signatures.db | ~95 MB | | YARA Rules (23 个文件) | ~1 MB | **不包含:** `UserManual/`, `database/unpacked/`, `clamav-download/` (节省 ~3+ GB)。 ### Git —— 克隆 (仓库中已包含所有必要运行文件) ``` git clone https://github.com/Zcxczcxcz/TurkmenGuard.git cd TurkmenGuard dotnet build TurkmenGuard.sln -c Release start.bat ``` | 仓库内文件 | 用途 | |---------------|------------| | `ThirdParty/ClamAV/` | ClamAV 1.5.3 引擎 + CVD 特征码 | | `Data/hash-signatures.db` | Hash SQLite fallback (~540k) | | `Rules/` | 23 条 YARA 规则 | | `backend/` | 面向 backend 团队的 API 规范 | `tools/setup-clamav.ps1` —— 仅在 ClamAV 文件夹损坏时使用。 **团队访问权限:** 所有者可通过 GitHub → Settings → Collaborators 添加协作者(参见 [docs/DEVELOPERS.md](docs/DEVELOPERS.md))。 ## 快速开始 ### 环境要求 - Windows 7 SP1+ / 10 / 11 x64 - [.NET Framework 4.8](https://dotnet.microsoft.com/download/dotnet-framework/net48) - [.NET SDK 8+](https://dotnet.microsoft.com/download) —— 仅用于构建 ### 构建并运行 ``` cd TurkmenGuard # 首次:下载 ClamAV engine + CVD 数据库 (~400 MB) powershell -ExecutionPolicy Bypass -File tools\setup-clamav.ps1 dotnet build TurkmenGuard.sln -c Release start.bat ``` 如果尚未安装引擎,`start.bat` 会自动运行 `setup-clamav.ps1`。 ### 强制停止 如果杀毒软件造成干扰(托盘、自启、自我保护)—— 请双击: ``` stop-turkmenguard.bat ``` 脚本将执行以下操作: 1. 结束 `TurkmenGuard.exe` 及所有 ClamAV 进程 (`clamscan`, `clamd`, `clamdscan`, `freshclam`) 2. 从注册表 `HKCU\...\Run\TurkmenGuard` 中删除自启项 3. 在 `%AppData%\TurkmenGuard\settings.json` 中禁用:AutoStart, RealTime, SelfProtection, ProcessMonitor 或者在 PowerShell 中执行: ``` powershell -ExecutionPolicy Bypass -File tools\force-stop.ps1 ``` 如果进程未能结束 —— 请**以管理员身份**运行 `stop-turkmenguard.bat`。 或者: ``` .\src\TurkmenGuard\bin\Release\TurkmenGuard.exe ``` 首次启动时 —— 会出现语言选择窗口 (🇹🇲 / 🇷🇺 / 🇬🇧)。 ### 测试 ``` dotnet run --project tests\TurkmenGuard.Tests\TurkmenGuard.Tests.csproj -c Release ``` 预期结果:**17/17 PASS** (如果被 Defender 拦截,EICAR 可能会显示 SKIP)。 ### 安装完整的 ClamAV (v4.2 必需) ``` powershell -ExecutionPolicy Bypass -File tools\setup-clamav.ps1 ``` 脚本将执行以下操作: 1. 从 GitHub / clamav.net 下载 **clamav-1.5.3.win.x64.zip** (~220 MB) 2. 解压至 `ThirdParty/ClamAV/` (`clamscan`, `clamd`, `clamdscan`, `freshclam`) 3. 通过 `freshclam` 或 `cvdupdate` 下载 **main.cvd + daily.cvd + bytecode.cvd** 如果 GitHub 下载中断,请使用支持断点续传的独立脚本: ``` powershell -ExecutionPolicy Bypass -File tools\download-clamav-zip.ps1 powershell -ExecutionPolicy Bypass -File tools\setup-clamav.ps1 -SkipDatabase ``` ### 随 Windows 自启动 在 **Settings → Start with Windows** 中开启注册表项: ``` HKCU\Software\Microsoft\Windows\CurrentVersion\Run\TurkmenGuard "C:\...\TurkmenGuard.exe" --tray ``` - Windows 加载时,应用程序将**在系统托盘中启动**(不显示主窗口) - 防篡改:如果注册表项被删除,`SelfProtectionService` 会将其恢复 - 双击托盘图标 —— 打开主窗口 ### 杀毒软件自我保护 默认开启 (**Settings → Self-protection**): | 机制 | 描述 | |----------|----------| | Single-instance mutex | 仅允许运行一个 TurkmenGuard 实例 | | FileSystemWatcher | 监控 `Rules/`, `ClamAV/`、设置、隔离区 | | Integrity check | 每 5 分钟检查一次 exe, clamscan, settings 的大小 | | Registry watchdog | 受到干预时恢复自启动项 | | Priority AboveNormal | 激活保护时提升进程优先级 | ### YARA 规则 (23 个文件,74 条规则) `Rules/` 中的分类: | 分类 | 文件 | |-----------|-------| | Credential theft | `credential_theft.yar` | | Persistence | `persistence_registry.yar`, `persistence_services.yar` | | Webshells | `webshell_php.yar`, `webshell_asp.yar` | | Office macros | `macro_office.yar` | | Crypto miners | `crypto_miner.yar` | | AMSI bypass | `amsi_bypass.yar` | | Shellcode / PE | `shellcode_pe.yar`, `packed_pe.yar` | | RAT / trojan | `trojan_rat.yar` | | Lateral movement | `lateral_movement.yar` | | Ransomware | `ransomware_markers.yar`, `ransomware_extended.yar` | | Info stealers | `info_stealer.yar` | | LOLBins | `script_dropper.yar`, `lolbin_extended.yar` | | PowerShell | `powershell_obfuscation.yar`, `downloader_powershell.yar` | | WMI abuse | `wmi_abuse.yar` | | Batch scripts | `suspicious_batch.yar` | | Test | `eicar.yar`, `test_malware.yar` | 流水线:**ClamAV → YARA (74 rules) → Entropy** ### 从 ClamAV 构建 hash 数据库 (fallback / dev) ``` pip install cvdupdate python tools/import-clamav-db.py --download ``` 脚本将执行以下操作: 1. 通过 **cvdupdate** (官方 ClamAV 客户端) 下载 `main.cvd` + `daily.cvd` 2. 解压 `.hdb` / `.hsb` (MD5 + SHA256 hash-签名) 3. 创建 `Data/hash-signatures.db` (~95 MB,**540,000+** 条记录) ### 从 JSON 构建 hash 数据库 (dev/fallback) ``` powershell -ExecutionPolicy Bypass -File tools\build-hash-db.ps1 ``` ## 使用说明 ### 首次启动 1. 运行 `start.bat` 或 `TurkmenGuard.exe` 2. 选择语言:Türkmençe / 俄语 / 英语 3. 在 Dashboard 上 —— 查看 YARA 和 hash 特征码状态 ### 扫描 | 按钮 | 操作 | |--------|----------| | **Quick Scan** | 下载、桌面、临时文件夹、文档 | | **Full Scan** | 所有本地磁盘 | | **Custom Scan** | 选定文件夹 | | **File Scan** | 单个文件 | ### 实时保护 **Goragçylyk / Protection** 选项卡 —— 开启/关闭 FileSystemWatcher。 ### 隔离区 **Karantin** 选项卡 —— 恢复或永久删除。 ### 设置 - 语言、主题、扫描计划 - 白名单(文件夹 + 扩展名) - **特征码更新**:每周 / 手动,backend URL,“立即更新”按钮 - 应用程序日志 ### 退出 - 托盘菜单 → **Exit** - 设置中的 Exit 按钮 - **Ctrl+Q** —— 直接退出无需确认(默认) ## 扫描架构 ``` Файл → exclusions + extension filter → ClamAV engine (libclamav: .ndb, .ldb, .hdb, .hsb, bytecode) → YARA (libyara.NET, 6 rule files) → Entropy (только PE .exe/.dll, per-section, порог 7.95) ``` 如果 ClamAV engine 不可用 —— 自动 fallback 至 SQLite hash (540k 特征码)。 ### ClamAV 作为主引擎 (v4.2) - 内置便携版 **ClamAV 1.5.3 x64** 位于 `ThirdParty/ClamAV/` - 守护进程 **clamd** + **clamdscan** 用于快速扫描 (TCP 127.0.0.1:3310) - 如果守护进程未启动,则 fallback 至 **clamscan.exe** - 完整的 CVD:`main.cvd`, `daily.cvd`, `bytecode.cvd` —— 涵盖所有特征码类型 - CVD 更新:从设置中更新特征码时由 `freshclam` 执行 ### ClamAV hash SQLite (fallback) 内置数据库 `Data/hash-signatures.db` (v4.1): - **540,326** 条 hash 特征码 (MD5 + SHA256) - 仅在未安装便携版 ClamAV 时使用 ### 降低误报率 (v4.0) - **Extension allow-list** —— 仅扫描可执行文件、脚本、压缩包和 Office 文件 - **Packed_PE / UPX** —— severity 为 `Info`,不计入威胁 - **Entropy** —— 仅针对 PE 文件,按区段分析,阈值为 **7.95**(而非针对整个文件的 7.8) - **Auto-quarantine** —— 仅限 `High+`(不包括 Medium/Low/Test/Info) ## 特征码更新 (唯一的网络模块) Backend 负责存储和分发: - `manifest.json` —— 版本、hash DB URL、SHA-256、规则 zip 包 URL - `hash-signatures.db` —— 最多包含约 1M SHA-256 的 SQLite 数据库 - `rules-pack.zip` —— YARA 规则 manifest 示例:`backend/manifest.sample.json` 客户端:`Services/SignatureUpdateService.cs` - 启动时检查 (可选) - 每周自动执行 (`SignatureUpdateSchedule = weekly`) - 在 Settings 中手动更新 在 `%AppData%/TurkmenGuard/settings.json` 中的设置: ``` { "SignatureUpdatesEnabled": true, "SignatureUpdateSchedule": "weekly", "SignatureUpdateEndpoint": "https://signatures.turkmenguard.local/v1/manifest.json", "CheckUpdatesOnStartup": true, "LastSignatureVersion": null, "LastSignatureUpdate": null } ``` ## 项目结构 ``` TurkmenGuard/ ├── TurkmenGuard.sln ├── README.md ├── screenshot-main.png ├── start.bat / publish.bat ├── backend/ │ └── manifest.sample.json # Пример API backend ├── Data/ │ ├── hash-signatures.json # Fallback / dev │ └── hash-signatures.db # ClamAV SQLite (~540k, ~95 MB) ├── Rules/ # 6 YARA правил ├── tools/ │ ├── setup-clamav.ps1 # ClamAV engine + CVD setup (v4.2) │ ├── force-stop.ps1 # Force stop all AV processes │ ├── download-clamav-zip.ps1 # Resumable engine zip download │ ├── import-clamav-db.py # ClamAV CVD → SQLite (fallback) │ ├── build-hash-db.ps1 # JSON → SQLite (dev) │ └── capture.py ├── ThirdParty/ │ └── ClamAV/ # Portable ClamAV 1.5.3 + CVD (в git) ├── docs/ │ └── DEVELOPERS.md # Онбординг для команды ├── src/TurkmenGuard/ │ ├── Core/ │ │ ├── ScannerEngine.cs │ │ ├── ClamAvEngine.cs # clamd + clamdscan (v4.2) │ │ ├── YaraScanner.cs # libyara.NET │ │ ├── HashChecker.cs │ │ ├── HashDatabase.cs # SQLite O(1) lookup │ │ ├── EntropyAnalyzer.cs │ │ ├── ScanPolicy.cs │ │ └── ScanModels.cs │ ├── Services/ │ │ ├── SignatureUpdateService.cs │ │ ├── AppSettings.cs │ │ └── ... │ ├── Monitoring/ # RealTimeGuard, ProcessMonitor │ ├── Quarantine/ │ ├── Security/ # Single-instance only │ ├── ViewModels/ + Views/ │ ├── Themes/Colors.xaml │ └── Localization/ # tk / ru / en └── tests/TurkmenGuard.Tests/ ``` ## 库 (NuGet) | 包 | 版本 | 用途 | |-------|--------|------------| | **MaterialDesignThemes** | 5.1.0 | UI Material Design 3 | | **MaterialDesignColors** | 3.1.0 | 调色板 | | **Microsoft.O365.Security.Native.libyara.NET** | 4.5.5 | YARA 引擎 (.NET Framework 4.8) | | **CommunityToolkit.Mvvm** | 8.2.2 | MVVM | | **System.Data.SQLite.Core** | 1.0.118 | Hash DB SQLite | | **System.Text.Json** | 8.0.5 | settings.json, manifest | | **System.Management** | 8.0.0 | WMI ProcessMonitor | | **cvdupdate** (Python) | 1.2+ | 下载 ClamAV CVD (dev/build) | | **ClamAV** (bundled) | 1.5.3 | 完整的 libclamav 引擎 (portable x64) | ## 磁盘路径 | 用途 | 路径|------------|------| | 设置 | `%AppData%/TurkmenGuard/settings.json` | | ClamAV engine | `{exe}/ClamAV/` (clamscan, clamd, clamdscan) | | ClamAV CVD DB | `{exe}/ClamAV/database/*.cvd` | | ClamAV logs | `%AppData%/TurkmenGuard/clamav/` | | Hash DB (runtime) | `%AppData%/TurkmenGuard/hash-signatures.db` | | 日志 | `%AppData%/TurkmenGuard/logs/` | | 隔离区 | `%ProgramData%/TurkmenGuard/Quarantine/` | | YARA rules | `{exe}/Rules/` | | 内置 DB | `{exe}/Data/hash-signatures.db` | ## 更新日志 (Changelog) ### v4.5.2 (2026-07-14) —— 温和的 YARA,仅针对真实威胁 - **YARA v4.5.2 strict** —— 规则要求同时满足 2-4 个指标(而不是单一的 `powershell` 或 `Quasar`) - 禁用了产生噪音的 `lateral_movement`(文件后缀为 `.yar.disabled`) - Macro/LOLBin/Persist/Stealer/Miner/RAT —— 已针对真实攻击链重写 - Quick Scan —— 仅限 ClamAV;Full/SingleFile —— 严格的 YARA ### v4.5.1 (2026-07-14) —— 误报、Quick Scan 速度、RT+进程 - **Quick Scan** —— 仅使用 ClamAV (不含 YARA);YARA 保留在 Full 和“文件扫描”中 - **Quick Scan 更快** —— 移除了 `%TEMP%`,跳过压缩包/DLL/PDF,使用 3 个并行线程 - **YARA heuristics** (LOLBin, Macro, PS_Downloader…) —— severity Medium;在 Full 中仅为 Critical - **Real-time** —— 开启时会自动启动**进程监控**(新的 .exe) - ProcessMonitor:间隔 5 秒(原为 10 秒) ### v4.5.0 (2026-07-14) —— 部署 + GitHub - **GitHub:** https://github.com/Zcxczcxcz/TurkmenGuard —— 仓库中包含 ClamAV engine + CVD + hash DB + YARA - **docs/DEVELOPERS.md** —— 面向 frontend/backend 团队的入职指南 - **backend/README.md** —— 特征码 API 规范 - **publish.bat** + `tools/publish-release.ps1` —— 生成约 1.1 GB 的发行版 - **DetectionFilter v2** —— PUA/PUP/Adware → Info,Quick/Full/RealTime 仅限 **High+** - 排除项:`node_modules`, `.git`, WinSxS, AppData\Local\Programs - 重置计数器,defaults:RealTime/ProcessMonitor/AutoQuarantine **off** - `tools/reset-user-settings.ps1` —— 重置 `%AppData%\TurkmenGuard\settings.json` - csproj:不复制 `unpacked/`, `UserManual/`, `clamav-download/` - `.gitignore`:`dist/`, pdb/lib ClamAV;运行时引擎包含在 git 中 - **SelfProtectionService** —— 在 headless 测试中无 NRE ### v4.4.1 (2026-07-14) —— 误报、停止、主题 - **DetectionFilter** —— 在 Quick/Full 扫描中隐藏 PUA/PUP/Heuristics、entropy 和 Medium;仅保留 High+ - **默认排除项**:`C:\Windows`, `Program Files`, `Program Files (x86)` - Entropy 仅在 **Full Scan** 时运行(不在 Quick 中) - Hash DB fallback 仅用于 **High+** 特征码 - **“取消”按钮** —— 修复了 CanExecute(之前在扫描期间被禁用) - **任务计划程序** —— 当 `LastScheduledScan == null` 时,不再每小时重启扫描 - **主题** —— MainWindow 中的 `DynamicResource` + 切换主题时更新 CardHover - AutoQuarantine 默认**关闭** - Dashboard 上的威胁计数器 —— 仅显示 High+(过滤掉 PUA 噪音) ### v4.4.0 (2026-07-14) —— 审计:稳定性 + 性能 **阶段 1 —— 关键修复:** - **ClamAV pipe-deadlock** —— `BeginOutputReadLine`/`BeginErrorReadLine`,超时后保证执行 `Kill()` - **自动隔离死锁** —— `QuarantineChanged` 在 `lock` 外部,在 UI 中使用 `BeginInvoke` - **自我保护** —— 优先级设为 `Normal`,移除对 `AppData`/日志的 watcher,限制篡改通知频率 - **ProcessMonitor** —— dispose 所有 `Process`/WMI,保障可重入性 - **Logger** —— 缓冲 `StreamWriter`,10 MB / 14 天轮换 - **ClamAV daemon** —— 每 60 秒进行一次健康检查 + 自动重启;bulk/realtime 无需逐个文件执行 `clamscan`(使用 YARA+hash fallback) **阶段 2 —— HIGH/MEDIUM:** - 解压规则时的 Zip Slip 保护 - Hash DB:在 `File.Copy` 之前关闭 SQLite - 修复 `ScannerEngine` 中的竞态条件 (`Interlocked`, `_ctsLock`) - RealTimeGuard:修复了反向过滤器 (`||`),清理了 `_debounce` - HashDatabase TOCTOU,用于托盘的 UI marshalling,取消订阅托盘事件 **阶段 3 —— 优化:** - 隔离区:通过 **DPAPI** (`ProtectedData`) 获取密钥,实现事务性,恢复时不覆盖 - Entropy `Log2` 缓存,带引号的 `explorer.exe` 路径 **测试:** 16/16 PASS (如果 Defender 删除了文件,EICAR 会 SKIP) ### v4.3.1 (2026-07-13) - **stop-turkmenguard.bat** —— 强制停止所有进程并禁用自启/自我保护 - `tools/force-stop.ps1` —— 用于 force stop 的 PowerShell 脚本 - **force-stop v2** —— `taskkill /F /T` (进程树),3 次遍历,通过 `ClamAV` 路径搜索,在 `.bat` 中自动请求管理员权限,在 kill **之前**禁用设置/注册表 - **修复了**同时进行扫描和实时保护时的卡死现象 - 一次仅运行一个 `clamscan`(全局信号量)—— 笔记本电脑不再“假死” - Real-time:使用队列代替数百个并行的 Task;在 bulk 扫描期间暂停 - UI:`BeginInvoke` + 进度节流(不阻塞界面) - ClamAV:优先级设为 BelowNormal,real-time 超时为 30 秒 ### v4.3.0 (2026-07-13) - **YARA 规则包扩展**:从 6 个增加到 **23 个文件**,**74 条编译规则** - 新分类:credential theft, persistence, webshells, macros, miners, AMSI bypass, RAT, lateral movement, stealers, WMI, LOLBins - **自动启动**:注册表中的 `--tray` 参数,在系统托盘启动,`SyncEnabled()` / `IsRegistryCorrect()` - **自我保护**:FileSystemWatcher,integrity check,registry watchdog,优先级设为 AboveNormal - 扩展了 `YaraScanner` 中的 severity 映射(针对 RAT/webshell/AMSI 设为 Critical) - 测试:**17/17 PASS** (YARA heuristics, autostart, self-protection) - 本地化:篡改通知 (en/ru/tk) ### v4.2.0 (2026-07-13) - **完整的 ClamAV engine**:便携版 1.5.3 x64 (`clamscan`, `clamd`, `clamdscan`, `freshclam`) - `Core/ClamAvEngine.cs` —— clamd 守护进程 + clamdscan,fallback clamscan - 流水线:**ClamAV → YARA → Entropy** (hash SQLite 仅作为 fallback) - `tools/setup-clamav.ps1` —— 自动安装 engine + CVD - `tools/download-clamav-zip.ps1` —— 从 GitHub/clamav.net 续传下载 zip (curl `-C -`,校验 zip CRC) - `setup-clamav.ps1`:解压时保留 `database/`;修复了 `cvdupdate` 的调用;zip 大小精确为 229959640 字节 - `SignatureUpdateService` —— 通过 `freshclam` 更新 CVD - Dashboard:ClamAV 状态(版本、DB、守护进程) - 扫描模型中的 `DetectionMethod.ClamAV` ### v4.1.0 (2026-07-13) - **ClamAV hash database**:540,326 条特征码 (main.cvd + daily.cvd) 已内置于 `Data/hash-signatures.db` - MD5 + SHA256 查询,并进行文件大小校验 - `tools/import-clamav-db.py` —— 通过 cvdupdate 构建的流水线 - Dashboard 显示 ClamAV 来源和特征码数量 - 测试:校验加载超过 10 万条记录的 DB ### v4.0.0 (2026-07-13) - **迁移至 .NET Framework 4.8** —— 支持 Windows 7 SP1+ - 使用 **libyara.NET** 代替 YaraXSharp (仅限 net8) - **SQLite hash database** —— `HashDatabase.cs`,内置且可更新的数据库 - **SignatureUpdateService** —— 唯一的网络模块 (weekly/manual) - **False positives**:每个 PE section 的 entropy 为 7.95,加壳规则 → Info,自动隔离仅限 High+ - **Self-protection**:仅限 single-instance,正常退出 - 修复了 WPF temp projects 的 libyara 构建 - 特征码更新模块的本地化 (tk/ru/en) - `tools/build-hash-db.ps1`, `backend/manifest.sample.json` ### v3.4.0 (2026-07-12) - File Scan,托盘菜单,日志查看器 ### v3.0.0 (2026-07-12) - WPF 重构,YARA 规则,ScannerEngine ## 许可证 本项目仅用于**教育目的**。EICAR 是测试文件,并非恶意软件。
标签:AI合规, ClamAV, .NET Framework, Web 安全测试, WPF, YARA, 云资产可视化, 终端安全, 网页爬虫, 跨平台, 防病毒软件