基于 Kotlin 与原生探针的 Android 设备侧环境完整性诊断工具。
下载 Nightly · 文档 · SDK 集成
# 项目概述 DuckDetector 在 Android 设备上采集并关联与安全相关的证据,用于发现启动状态变化、Root 与 SU 痕迹、运行时注入或 Hook、挂载命名空间异常、系统属性篡改、可疑应用、KeyStore 与证明链异常,以及虚拟化迹象。 应用由 Jetpack Compose 界面、按功能拆分的 Gradle 模块和 C++/汇编原生库组成;同一套检测器也以不含 UI 的 SDK AAR 形式发布,可以嵌入其他应用。检测结果是用于诊断的信号,不代表对设备“安全”或“已受损”的权威认证。 # 快速上手 1. **下载:** 从 [Nightly 版本](https://github.com/eltavine/Duck-Detector-Refactoring/releases/tag/nightly)下载 APK。Nightly 构建从 `main` 分支发布,并同步推送到 [Telegram 频道](https://t.me/duck_detector);目前尚无正式版本。 2. **安装:** 安装到 Android 10 及以上版本的设备,无需 Root 权限。 3. **扫描:** 首次启动时需要同意用户协议,并完成几项启动选项:通知、Live Update、TEE 检查所用的在线吊销数据刷新,以及包可见性。之后扫描会自动开始,每个检测器完成后,对应卡片随即显示结果。 4. **解读结果:** 参照下文说明。报告结果或寻求帮助时,请[提交 Issue](https://github.com/eltavine/Duck-Detector-Refactoring/issues),并附上用仪表盘顶部 **Export Report** 保存的报告文件;只有摘要截图是不够的。 ## 如何解读结果 每张卡片显示以下状态之一: | 状态 | 含义 | | :--- | :--- | | **Danger**、**Warning** | 检测器观察到了证据,卡片会列出具体发现。 | | **All Clear** | 探针已运行,未发现其检查的任何证据;这并不能证明设备未被修改。 | | **Info**(Support) | 探针在此设备上不受支持或不可用,此时没有发现不代表不存在。 | | **Info**(Error) | 检查执行失败,卡片会说明原因。 | 想了解某个检测器检查什么、为什么构成证据,可从[检测范围](#检测范围)打开它的证据记录。 # 检测范围 当前覆盖以下功能域,每项都链接到对应的证据记录(英文),说明检测器检查什么、为什么构成证据,以及哪些情况它观察不到: [`ADB Runtime`](./feature/adbruntime/EVIDENCE.md) · [`Bootloader`](./feature/bootloader/EVIDENCE.md) · [`Custom ROM`](./feature/customrom/EVIDENCE.md) · [`Dangerous Apps`](./feature/dangerousapps/EVIDENCE.md) · [`Kernel Check`](./feature/kernelcheck/EVIDENCE.md) · [`LSPosed`](./feature/lsposed/EVIDENCE.md) · [`Memory`](./feature/memory/EVIDENCE.md) · [`Mount`](./feature/mount/EVIDENCE.md) · [`Native Root`](./feature/nativeroot/EVIDENCE.md) · [`Play Integrity Fix`](./feature/playintegrityfix/EVIDENCE.md) · [`Root Managers`](./feature/rootmanagers/EVIDENCE.md) · [`SELinux`](./feature/selinux/EVIDENCE.md) · [`SU`](./feature/su/EVIDENCE.md) · [`System Properties`](./feature/systemproperties/EVIDENCE.md) · [`TEE`](./feature/tee/EVIDENCE.md) · [`Virtualization`](./feature/virtualization/EVIDENCE.md) · [`Zygisk`](./feature/zygisk/EVIDENCE.md) 其中,`Play Integrity Fix` 检测的是与完整性伪装修改相关的本地迹象,并不会返回 Google Play Integrity API 的官方判定。TEE 模块检查 Android KeyStore 与设备证明证据,包括证书链、安全级别、吊销数据,以及设备支持时的部分 KeyMint、StrongBox 和 Soter 行为。 SELinux 检测还保留了 app-zygote 阶段的 SID 表查询与注册对照实验。重复差异只作为辅助警告;同步注册的策略隐藏可能不留下差异。特权上下文写入在一次性子进程中执行,并加入畸形与合法载荷控制;上下文识别和普通 app 计时只作为辅助警告,app-zygote AVC 查找计数画像仅作信息展示,阴性观察不能排除隐藏策略。访问失败和不完整实验分别显示覆盖状态。源码依据与真机验证缺口见 [SELinux 证据记录](./feature/selinux/EVIDENCE.md)。 项目还包含仪表盘、设备信息、设置、更新检查、通知、开源许可和通用 UI 等辅助模块。 # 工作方式 - **按功能拆分模块:** 每个检测器在自己的 Gradle 模块中维护采集、判定规则、报告投影与界面,多个检测器共用的采集代码放在 capability 模块中。 - **启动早期采集:** 透明的 `NativeActivity` 在 `MainActivity` 之前运行,记录早期挂载与虚拟化证据。 - **原生探针:** 共享原生库负责直接系统调用、`/proc` 检查、计时测量、链接器与运行时可见性检查,以及特定架构的汇编路径。 - **进程隔离:** 部分 Zygisk、Mount、Native Root、虚拟化、SELinux、LSPosed 和 TEE 检查运行在独立进程或隔离服务中,用于对照不同进程边界下的证据。 - **证据关联:** 仪表盘分别展示检测项与覆盖状态,不将单个启发式信号视为确定结论。 Native Root 另有默认关闭的 [fsnotify SRCU 时序实验](feature/nativeroot/SRCU_TIMING.md)。用户明确启用后,它在支持的 Android 12–14 环境中临时修改私有动态权限,比较 inotify 实例关闭的延迟。重复延迟只作为竞争的辅助证据,不判定 KernelSU;阈值仍待真机校准,独立进程超时也无法恢复阻塞的内核。 # 兼容性 | 项目 | 说明 | | :--- | :--- | | **Android** | 支持 Android 10 及以上版本(`minSdk 29`),使用 Android API 37 编译并作为目标版本。 | | **ABI** | 为 `arm64-v8a`、`armeabi-v7a`、`x86` 和 `x86_64` 提供原生系统调用路径;部分计时与虚拟化陷阱探针仅适用于 `arm64-v8a`。 | | **权限** | 应用无需 Root 权限,但 Android 权限、包可见性和平台沙盒仍会限制可观测范围。 | | **设备差异** | OEM 修改、内核配置、Android 版本和沙盒策略可能导致探针显示不支持、不可用或低置信度。 | | **网络使用** | 核心设备扫描在本地运行。TEE 吊销检查始终包含内置快照;下载 Google 最新吊销数据需要用户授权。应用还会在冷启动后以及用户从设置页操作时访问 GitHub 检查 Nightly 更新。开启 GitHub 加速后(中文用户会收到开启询问,也可在设置中切换),这些检查和 Nightly 下载改由第三方服务 [gh-proxy.com](https://gh-proxy.com/docs) 中转。 | # 项目结构 ```text Duck-Detector-Refactoring/ ├─ app/ # UI 组合根:Activity、仪表盘卡片、通知 ├─ sdk/runtime/ # Headless 组合根:检测器目录、扫描 API、进程钩子、原生库注册表 ├─ sdk/aar/ # 可分发的 SDK:把所有 headless 模块融合成一个 AAR ├─ core/ # 契约与共享基础设施:证据、原生载荷、平台访问、报告、扫描生命周期、检测器、UI ├─ capability/ # 多个检测器共享的证据采集 ├─ feature/ # 每个目录一个检测器或辅助功能,按层拆分 ├─ samples/sdk-consumer/ # 只依赖已发布 AAR 构建的独立示例应用 ├─ build-logic/ # 约定插件、模块边界与依赖校验、生成资源任务 ├─ uihelper/ # 锁定提交的 Git 子模块:MIUIX / Material UI,独立 Gradle 构建 ├─ docs/ # 架构概览、指南与后续事项 ├─ .github/policies/ # 模块、原生、检测器接触点、反射与文本协议策略 ├─ .github/scripts/ # 仓库守卫脚本及其自测 ├─ gradle/ # 版本目录与 Gradle Wrapper 文件 ├─ scripts/ # 检测器脚手架与仓库维护脚本 ├─ build.gradle.kts └─ settings.gradle.kts ``` 每个检测器是 `feature/