分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

Verlintas/NOIR

安全

在电脑上通过 adb 审计 Android 手机的权限、上报端点与清单风险,并给出可回滚的处置建议。

785
58
Kotlin
MIT
创建于 1 天前

项目介绍

NOIR 是一个跑在电脑上的命令行/TUI 工具,通过 adb 连接 Android 手机,把「这台手机到底能泄露什么」变成一份可复现的报告。它会盘点同时持有网络权限和敏感权限的应用,在设备端从 APK 的 dex 中提取 URL,按包名和域名识别厂商(小米、Google、腾讯、高德等)与类别(遥测、广告、定位、输入法 等),再结合权限和上报端点计算风险分。工具还会把权限翻译成能拿到的数据(位置、通讯录、短信、通话、麦克风、相机、屏幕、应用列表、设备标识、文件、日历、账号),并与上报域名配对,得出哪类数据可能流向哪里;android.uid.system 这类共享 UID 的权限会被合并回每个包,AndroidManifest.xml 也会解析出没有权限保护的导出组件、明文流量、备份、debuggable 和 targetSdk。

处置建议分为可安全自动执行、需人工确认和不建议动三类,每条动作都生成回滚命令。需要深挖时,deep/deepscan 会用 jadx 反编译单个应用并检索 Runtime.exec、DexClassLoader、setApplicationEnabledSetting、MediaProjection、WebView 桥、无障碍/通知监听、设备管理员等高风险调用 README lines 25–35。

适用对象是审计自己设备或已获授权设备的人。工具不联网、不需要账号、不修改系统分区、不需要 root,且只有显式加 --aggressive 或 --purge 才会卸载应用 README lines 36–43。

快速使用

两种安装方式:

  1. 从 Releases 下载对应平台的便携包(noir-v0.1.1-macOS-portable.zip、noir-v0.1.1-Windows-portable.zip、noir-v0.1.1-Linux-portable.zip,以及 SHA256SUMS.txt)。解压后,macOS 双击 Start NOIR.command,Windows 双击 Start NOIR.bat,Linux 先 chmod +x Start-NOIR.sh 再运行。启动器自带运行时,无需安装 Java。macOS 可能拦截命令文件(右键 → 打开,或清除隔离属性),Windows 可能弹出 SmartScreen 提示。包里不含 adb 和 jadx,首次运行会询问是否下载到 ~/.noir/tools README lines 136–169。
  2. 从源码构建,需要 JDK 17+ 和 Android platform-tools,只有 deep 才需要 jadx:
git clone https://github.com/Verlintas/NOIR
cd NOIR
./gradlew :cli:installDist
./cli/build/install/noir/bin/noir --about

手机开启 USB 调试并连接后:

noir doctor   # 显示 platform、java、adb、device 和 jadx 路径
noir          # 向导:检查 adb、等待设备、扫描、渲染仪表盘

向导只会问两三个 y/n 问题,最后展示仪表盘。想跳过提问或先看计划,可以用 noir scan、noir ui、noir auto(dry-run 计划)、noir auto --apply(只执行安全的 appops)或 noir deepscan README lines 206–233。结果写入 noir-out/ 下的 report.json、report.md、domains.txt 和 rollback.txt README lines 257–266。domains.txt 可导入 Pi-hole、AdGuard 或路由器;NOIR 本身不改 DNS。

使用约束

  • 支持 macOS(Intel 和 Apple Silicon)、Windows 10/11、Debian/Ubuntu。不支持 iOS,因为审计依赖 Android 的 dumpsys 和 APK 格式。
  • 需要 JDK 17+ 和 Android platform-tools(adb);jadx 仅 deep/deepscan 需要。路径可用 --adb / --jadx 覆盖。
  • 没有 root 权限,全部通过 adb 的 shell 权限完成。卸载只是 --user 0 级别,APK 仍在系统分区,OTA 或恢复出厂后可能回来。系统应用通常只标记为人工复核,不做真正卸载。
  • 默认完全只读。--apply 只修改 appops,可用 default 还原,rollback.txt 会记录命令;noir block 的卸载会先打印 pm install-existing 恢复命令。
  • 工具本身不联网:没有遥测、版本检查或崩溃上报。外部请求只发生在 noir setup(下载 adb/jadx)和本地 jadx 进程。报告可能包含设备上的包名和端点,分享前请自行检查 README lines 267–273。
  • 结果是静态证据——应用具备某能力、代码里有某端点——不能证明某次具体传输发生过 README lines 344–349。
  • 扫描结果按 包名 + APK 路径 缓存在 ~/.noir/endpoints.tsv,应用更新后路径变化会自动重新分析。
  • 许可证为 MIT README lines 350–352。

HotRepo 点评

NOIR 在 2026-11-02 进入 HotRepo 新项目榜,约 22 小时内新增 416 Star(采样曲线从 113 涨到 529),Fork 同期增加 30。增长集中在窗口最后几个小时,且没有记录到 GitHub 全部语言日榜名次,现有数据只能支持一次短时爆发,而不是持续趋势。技术上值得注意的是把端点抽取放在设备端用 adb shell 的 unzip | strings | grep 完成,避免把几百个 APK 拉回电脑,以及对 android.uid.system 这类共享 UID 做了专门处理 README lines 299–305。这些取舍与其「本地、默认只读」的审计定位相符,而不是通用安全扫描器。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。