Rani367/Armadillo
GitHub: Rani367/Armadillo
Armadillo 是一款使用纯 Rust 编写的 macOS 杀毒 CLI 和 TUI 工具,通过五引擎纵深检测架构实现零依赖的恶意软件扫描与系统持久化审计。
Stars: 0 | Forks: 0
# Armadillo
Armadillo 是一款使用 Rust 编写的 macOS 杀毒软件(CLI + TUI),具有**零系统依赖**的特点——无需 ClamAV,无需 libyara,无需 OpenSSL。整个检测栈完全采用纯 Rust 实现,因此只需在标准工具链下即可构建和运行,无需安装任何其他组件。
它使用五个独立的检测引擎扫描恶意软件、间谍软件、勒索软件和广告软件。这些引擎采用分层设计,使得一个引擎漏检的内容能被另一个引擎捕获,此外还配备了经过调优以避免误报的评分系统。
## 五大引擎
| # | 引擎 | 检测目标 |
|---|--------|-----------------|
| 1 | 哈希特征码 (SHA-256 / MD5) | 完全匹配的已知恶意文件。瞬时完成,零误报。 |
| 2 | YARA 规则 ([`yara-x`](https://github.com/VirusTotal/yara-x)) | 恶意软件家族及其变种,而不仅限于完全匹配的文件。 |
| 3 | 启发式引擎 | 加壳/加密的二进制文件(基于各段的 Shannon 熵),Mach-O 可疑特征(加密段、缺少代码签名),以及混淆脚本(`curl … \| bash`、base64 解码后执行、伪造密码提示)。 |
| 4 | 代码签名信任 | 对 Apple / Developer-ID-notarized(开发者 ID 公证)/ ad-hoc(临时签名)/ unsigned(未签名)进行分类,并对受信任代码上的启发式发现进行降权,以抑制误报。 |
| 5 | macOS 持久化与广告软件审计 | 检查 Mac 恶意软件实际隐藏的位置:LaunchAgents/Daemons、shell 启动文件、cron/periodic 任务、浏览器劫持、配置描述文件。 |
每个文件的检测结果会汇总为一个加权分数,并给出 Clean(安全)/ Suspicious(可疑)/ Malicious(恶意)的判定。
哈希和 YARA 匹配具有决定性;启发式检测结果在单独判定为“恶意”之前需要其他证据佐证,而 Apple 签名的代码会完全屏蔽启发式检测的噪音。
## 安装
需要稳定的 Rust 工具链 (1.82+)。无需其他依赖。
```
git clone https://github.com/Rani367/Armadillo && cd Armadillo
cargo build --release
# binary 位于 ./target/release/armadillo
```
## 用法
```
armadillo scan # quick scan of high-signal locations (default)
armadillo scan --full # full system scan (skips /System & pseudo-fs by default)
armadillo scan ~/Downloads # scan a specific path
armadillo scan --json # machine-readable output
armadillo scan --no-prompt # report only, never touch files
armadillo scan --quarantine-all # auto-quarantine every detection
armadillo audit # persistence & adware audit (no file-content scan)
armadillo tui # interactive dashboard
armadillo quarantine list # list the vault
armadillo quarantine restore # restore a file (id or unique prefix)
armadillo quarantine delete # permanently delete
armadillo quarantine add # manually quarantine a file
armadillo update # refresh definitions (YARA rules + hash feeds)
armadillo update --dry-run # show what would be fetched
armadillo status # definition version, last update, counts
# global flags: --verbose, --no-color
```
默认情况下,Armadillo 会在检测到每个威胁时提示您进行操作(隔离 / 删除 / 忽略 / 自动隔离)。
使用 `--no-prompt` 可仅生成报告,或使用 `--quarantine-all` 自动执行操作。
### 隔离
隔离功能会将文件移动到专用的安全库
(`~/Library/Application Support/armadillo/quarantine`)中,剥夺其执行权限使其无法运行,
并记录元数据以实现字节级完全一致的可逆恢复。未经您的许可,任何文件都不会被删除。
## 定义与更新
Armadillo 内置了一套规则集(自定义 macOS 恶意软件 YARA 规则、EICAR 自测文件以及入门级哈希列表),因此开箱即用,完全支持离线工作。`armadillo update` 功能包含:
- **哈希源** — 下载已知恶意哈希列表。abuse.ch URLhaus 是开放的;MalwareBazaar / ThreatFox 则需要在 `config.json` 中填写免费的 [Auth-Key](https://auth.abuse.ch/)。
- **规则** — 将内置的 YARA 规则与您放入 `~/Library/Application Support/armadillo/defs/custom/` 目录下的任何 `*.yar` 自定义规则文件一起重新编译。
下载过程使用 rustls(无需 OpenSSL),并在离线状态下平滑降级。
## 完全磁盘访问权限
某些位置(其他进程的数据、`~/Library` 的部分内容、`TCC.db`)受 macOS 保护。
要扫描这些位置,请在*系统设置 → 隐私与安全性 → 完全磁盘访问权限*中,为您的终端(或 `armadillo` 二进制文件)授予完全磁盘访问权限。若未授权,Armadillo 将跳过无法读取的内容并将其记录在报告中,而不会直接导致程序崩溃。
## 架构与构建方式
一个与前端无关的核心引擎通过流式传输 `ScanEvent` 并更新无锁计数器;CLI(使用 `indicatif` 显示进度)和 TUI(使用 `ratatui`)都消费同一个事件流。扫描过程通过 `rayon` 实现数据并行处理,文件则通过 `mmap` 进行零拷贝读取。
```
src/
engine/ # the five detection engines + scoring (verdict.rs)
heuristics/ # entropy, mach-o, codesign, scripts
scan/ # parallel walk + progress plumbing + target sets
macos/ # persistence & adware audit (launchd, startup, browser, profiles)
tui/ # ratatui dashboard
scan_cmd.rs # the `scan` command (progress + interactive triage)
quarantine.rs update.rs report.rs config.rs
rules/ # bundled YARA rule sources
data/hashes/ # bundled starter hash list
```
## 限制
- 仅支持 macOS(涉及 Mach-O / launchd / macOS 专有路径)。
- 代码签名信任机制使用了系统的 `codesign`/`spctl` 工具;未来计划实现原生的 Security.framework 路径。
- 哈希源更新需要网络访问权限,且对于某些数据源,需要免费的 abuse.ch 密钥。
- 当前版本不提供实时/常驻后台保护——仅支持按需扫描与审计。
- 不能替代保持 macOS 及其内置的 XProtect 处于最新状态的工作。
## 测试
```
cargo test # unit + engine integration tests (incl. the EICAR self-test)
cargo clippy --all-targets
```
为了安全地观察其检测效果,您可以使用标准(无害的)EICAR 测试文件:
```
printf 'X5O!P%%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/eicar.com
armadillo scan /tmp/eicar.com --no-prompt
```
## 许可证
MIT OR Apache-2.0 — 详见 [LICENSE](LICENSE) 和 [LICENSE-APACHE](LICENSE-APACHE)。内置的
第三方 YARA 规则保留其各自的许可证(参见 `data/hashes/NOTICE-THIRDPARTY.md`)。Apple 的
XProtect 规则未包含在此项目中。
标签:DNS 反向解析, Redis利用, Rust, YARA, 云资产可视化, 可视化界面, 网络流量审计, 通知系统, 防病毒软件