Verlintas /NOIR

手机隐私审计:用 adb 扫出 Android 应用的权限、上报端点与数据流向,并给出可回滚的处置。Desktop Android leak audit: permissions, endpoints, data flows, reversible fixes.

★ 2,008⑂ 165👁 2▤ 10
KotlinCreated 2026-11-01verlintas.dev/noir/
2,008
stars
+0
165
forks
2
watchers
–
prs
–
issues
10
releases
–
discussions

README

███╗   ██╗ ██████╗ ██╗██████╗
  ████╗  ██║██╔═══██╗██║██╔══██╗
  ██╔██╗ ██║██║   ██║██║██████╔╝
  ██║╚██╗██║██║   ██║██║██╔══██╗
  ██║ ╚████║╚██████╔╝██║██║  ██║
  ╚═╝  ╚═══╝ ╚═════╝ ╚═╝╚═╝  ╚═╝


 NOIR




!platforms








把「这台手机到底能泄露什么」变成一份可复现的报告。

NOIR 是一个跑在电脑上的审计工具,通过 adb 读取已连接 Android 设备的应用清单、权限和 APK 里的网络端点,给出分类、风险评分和可执行的处置建议。它也可以在需要时调用 jadx 对单个应用做反编译和关键字检索。

 定位:审计与自我防护。面向自己的设备、自己的应用、已授权的安全研究。

官网 / Website: https://verlintas.dev/noir/ · 中文

AtomGit G-Star 项目 / Mirror: https://atomgit.com/Verlintas/NOIR

---

 它做什么

1. 盘点:列出所有「有网络权限 + 敏感权限」的应用,以及它们各自拿到了什么。
2. 抽取端点:在设备端用 unzip + strings 从每个 APK 的 dex 里提取 URL,只回传几 KB,不把整包拉回电脑。
3. 分类与打分:按包名和域名识别厂商(Xiaomi / Google / 腾讯 / 高德 …)与类别(遥测、广告、定位、输入法 …),结合权限和上报端点计算风险分。
4. 数据关联:把权限翻译成"能拿到什么数据"(位置/通讯录/短信/通话/麦克风/相机/屏幕/应用列表/设备标识/文件/日历/账号),再和上报域名配对,得出"哪类数据可能流向哪里"。
5. 共享 UID:识别 android.uid.system 这类共享用户,列出哪些包实际上共享同一套权限并集。
6. 清单层:解析 AndroidManifest.xml 二进制 AXML,找出没有权限保护的导出组件、明文流量、备份、debuggable、targetSdk。
7. 给建议:区分「可安全自动执行」「需人工确认」「不建议动」,并为每条动作生成回滚命令。
8. 必要时深挖:deep 会把一个应用的基础 APK 和 split APK 拉到本地,用 jadx 反编译后检索 Runtime.getRuntime().exec、setApplicationEnabledSetting、DexClassLoader、MediaProjection 等高风险调用。

 它不做什么

- 不联网、不上传任何数据、不需要账号。
- 不修改系统分区,不需要 root。
- 默认不会卸载任何东西;只有 noir deepscan --purge 会逐个确认卸载高风险用户应用。

---

 第一次运行

bash
noir


不带参数会进入向导:

1. 检查 adb,没有就问你要不要自动下载(~/.noir/tools)
2. 检查设备,没有就打印开发者模式 / USB 调试的开通步骤,然后等你插线(最多 180 秒)
3. 问一句「开始扫描?」,扫完直接出仪表盘
4. 问一句「执行安全处置?」,y 就执行,并写好回滚文件

全程只会问两三个 y/n,其余都是自动的。

 环境自检

bash
noir doctor



NOIR doctor
  platform  Mac OS X aarch64
  java      17.0.19
  adb       /opt/homebrew/.../platform-tools/adb
            Version 37.0.1-15733141
  device    178b0d2f  device  2509FPN0BC
  jadx      /opt/homebrew/bin/jadx


bash
noir setup           缺什么下什么
noir setup --yes     不询问,适合脚本


 出现问题时

所有错误都会带「怎么办」,而不是抛异常栈:


╭─ ERROR ──────────────────────────────────────────────────────────╮
│ 指定的 adb 不存在:/nonexistent/adb                              │
├──────────────────────────────────────────────────────────────────┤
│ 检查路径,或运行 noir setup 自动安装。                           │
╰──────────────────────────────────────────────────────────────────╯


没有设备时给出的是可执行步骤:


╭─ 没有检测到设备 ──────────────────────────────────────────────╮
│  1. 打开开发者模式                                           │
│     小米 / HyperOS:设置 → 我的设备 → 全部参数 → 连点「MIUI 版本」7 次
│  2. 开启 USB 调试:设置 → 系统 → 开发者选项 → USB 调试        │
│  3. 插线后手机弹「允许 USB 调试吗?」→ 勾选「一律允许」        │
│  4. 还不行就换一根数据线(很多线只能充电)                    │
╰──────────────────────────────────────────────────────────────╯


已连接但没授权时,会单独提示「撤销 USB 调试授权后重插」。

 支持平台

| 系统 | 状态 |
|---|---|
| macOS (Intel / Apple Silicon) | ✅ |
| Windows 10 / 11 | ✅ |
| Debian / Ubuntu | ✅ |

依赖:

- JDK 17+
- Android platform-tools(adb)
- jadx(仅 deep 命令需要)

程序会自动在常见安装位置查找 adb 和 jadx;找不到时可以用 --adb / --jadx 指定。

bash
 macOS
brew install --cask android-platform-tools jadx

 Debian / Ubuntu
sudo apt install adb
 jadx: https://github.com/skylot/jadx/releases

 Windows (scoop)
scoop install adb jadx


---

 

Snapshot: 2026-11-05T14:00:00Z · Data license Apache-2.0 · JSON