news 2026/11/6 1:44:22

NOIR手机隐私审计风险评分详解:完整拆解Rules、Classifier与Exposure组件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NOIR手机隐私审计风险评分详解:完整拆解Rules、Classifier与Exposure组件
  • 网络安全
  • 应用安全
  • 隐私合规
  • CLI
  • 静态分析
  • 逆向工程
  • 移动开发

【免费下载链接】NOIR

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

项目地址:https://gitcode.com/Verlintas/NOIR
点击查看免费下载

NOIR 是一款跑在电脑上的手机隐私审计工具,通过 adb 扫描 Android 应用的权限、上报端点与数据流向,生成可复现的隐私报告。每份报告里的核心数字就是风险评分(score)。本文带你完整看懂 NOIR 风险评分是如何计算的,以及 Rules、Classifier、Exposure 三大核心组件各自承担"打分、归类、串数据流"的分工。🔍

一、扫描流水线:风险评分从哪里来?

NOIR 先筛选出「有网络权限 + 敏感权限」的候选应用,然后对每个应用并行做三件事(Main.kt):

组件职责回答的问题
Rules风险打分"这个应用有多可疑?"
Classifier类别 + 厂商识别"它是谁、干什么用的?"
Exposure数据流关联"哪类数据可能流向哪个域名?"

评分算出后,NOIR 用--min <score>参数过滤低分应用,并按分数降序排列——仪表盘里的 TOP FINDINGS 榜单就是这么排出来的。

二、Rules 打分规则拆解:基础分 + 加权分

评分逻辑完全写在 Rules.kt 的score()函数里,没有机器学习、没有黑盒权重——每一条结论都能追溯到 APK 里真实存在的权限或字符串。

1. 基础分:敏感权限数量

应用声明的权限先过一遍敏感权限清单(Rules.kt),包括ACCESS_FINE_LOCATION(精确定位)、READ_CONTACTS(通讯录)、READ_SMS(短信)、RECORD_AUDIO(麦克风)、CAMERA(相机)等 20 多项。

每命中一个敏感权限,基础分 +1。

2. 加权项:高危信号额外加分

信号加分为什么高危
QUERY_ALL_PACKAGES+2可以枚举你手机上的全部应用列表
READ_PRIVILEGED_PHONE_STATE+3特权级设备标识权限
FOREGROUND_SERVICE_MEDIA_PROJECTION+4录屏能力,常被滥用做屏幕监控
系统应用(isSystem)+2权限更多、无法卸载,需重点审视
可调试(debuggable)+2生产环境不该开,易被利用
存在命令型端点+2应用能远程执行指令
存在上报型端点+3数据确实有出口

3. 端点如何判定:两条正则说了算

NOIR 从 APK 的 dex 里提取 URL,用两条正则区分用途(Rules.kt):

上报型 /upload、/collect、/track、/stat、/beacon、/log、/report 命令型 /command、/cmd、/dispatch、/execute、/script

注意正则要求这些词出现在路径段的开头(前面是/,后面是/、?或结尾),所以普通文本里偶然出现 "track" 一词不会误报。

4. 算分示例:10 分是怎么来的

假设一个系统应用声明了 3 个敏感权限(CAMERA、READ_CONTACTS、ACCESS_FINE_LOCATION),代码里有一个/report端点和一个/cmd端点:

信号得分
3 个敏感权限3
系统应用+2
1 个上报型端点+3
1 个命令型端点+2
合计10

三、Classifier 分类识别:它是谁、干什么用的?

类别和厂商信息不参与分数计算,但它们决定了处置建议和报告的可读性,实现都在 Classifier.kt。

1. 类别识别 category():三层判断

  1. 白名单直查:KNOWN 映射表 里预置了com.miui.analytics → 遥测/统计、com.tencent.mm → 社交等常见包,命中直接返回;
  2. 关键词匹配:按包名和端点 URL 里的关键词打分,例如包名含market/vending判为「应用商店」,URL 里出现analytics/telemetry/beacon判为「遥测/统计」,出现ads/pangle/sigmob判为「广告」;
  3. 兜底:系统应用归「系统」,其余归「其他」。

共 17 个类别(Category 枚举):遥测/统计、广告、安全/杀毒、AI/语音、定位/地图、推送、应用商店、输入法、支付、金融、购物、影音、社交、游戏、工具、运营商、系统。

2. 厂商识别 vendor():两轮归因

厂商识别采用「两轮走」策略(vendor() 函数):

  • 第一轮看包名:com.tencent.mm就是腾讯,不管它内嵌了哪些 SDK 域名——包名是权威证据;
  • 第二轮看域名投票:包名对不上时,统计上传 host 里有多少个匹配各厂商域名后缀(VENDOR_DOMAINS 表 覆盖小米、OPPO、华为、腾讯、字节、阿里等 24 家),得票最高的厂商胜出。

一个关键细节:schemas.android.com、github.com这类基础设施域名会被忽略(Domains.kt),否则每个 APK 都会因为内嵌的schemas.android.com/aapt被误判成 Google。

四、Exposure 数据流关联:从权限到"数据流向"

这是 NOIR 最有价值的一环,回答的不是"它申请了什么权限",而是"什么数据能离开这台设备"。

1. 权限 → 数据类型

Exposure.kt 内置了一张映射表,把权限翻译成 12 种用户数据类别:

数据类型对应权限(示例)
位置ACCESS_FINE_LOCATION、ACCESS_BACKGROUND_LOCATION
通讯录 / 短信 / 通话记录READ_CONTACTS、READ_SMS、READ_CALL_LOG
麦克风 / 相机 / 屏幕RECORD_AUDIO、CAMERA、FOREGROUND_SERVICE_MEDIA_PROJECTION
应用列表QUERY_ALL_PACKAGES、PACKAGE_USAGE_STATS
设备标识READ_PHONE_STATE、READ_PRIVILEGED_PHONE_STATE
文件/相册 / 日历 / 账号READ_MEDIA_IMAGES、READ_CALENDAR、GET_ACCOUNTS

2. 能力 × 出口 = 泄露路径

leaks() 函数 的关联规则很克制:

没有上报端点的应用,leaks 直接为空——只有能力、没有出口,不算泄露。

一旦存在上报型端点,就输出「数据类型 → 可上传的 host 列表」的配对结果,例如位置 → a.stat.example.com, b.report.example.com。报告里的 "leak paths" 一栏就来自这里。

上图中com.miui.securitycenter风险分 36:它是系统应用(+2)、声明了大量敏感权限、同时存在 12 个上报型端点(+3)和 3 个命令型端点(+2)——多类加权项叠加,最终登顶榜单。

五、评分如何用:过滤、排序与处置建议

  • 过滤与排序:noir scan --min 15只保留分数 ≥ 15 的应用;报告 report.md 的 Overview 表格首列就是 score;
  • 驱动处置建议:Advisor.kt 依赖分类结果生成动作——遥测/广告类应用进入「人工复核」,系统组件若同时具备录屏能力和上报端点则建议「禁止录屏」(appops 级别,可回滚),多上报端点的应用给出「DNS 拦截」候选;
  • 导出域名清单:上报域名还会被 Domains.kt 分成三档——可直接拦截的追踪域名、需人工判断的域名、千万别拦的功能域名(推送/登录/更新/支付),避免一拦就断推送。

六、核心文件索引

文件说明
Rules.kt敏感权限清单、端点正则、score() 打分函数
Classifier.kt17 类别识别与 24 厂商归因
Exposure.kt权限→数据类型映射、泄露路径关联
Models.ktAppEntry 数据模型(score、leaks 字段)
Advisor.kt由分类与端点生成处置建议
Report.ktJSON / Markdown 报告渲染
Main.kt三组件的调用与排序入口

总结

NOIR 风险评分的设计哲学是简单且可解释:敏感权限计基础分,高危权限、系统属性、命令端点与上报端点按固定规则加权;Classifier 补充"它是谁"的上下文;Exposure 把静态证据串成"数据 → 出口"的泄露路径。没有黑盒模型,每一分都能追到 APK 里的具体权限或字符串——这也是审计工具该有的样子。✅

  • 网络安全
  • 应用安全
  • 隐私合规
  • CLI
  • 静态分析
  • 逆向工程
  • 移动开发

【免费下载链接】NOIR

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

项目地址:https://gitcode.com/Verlintas/NOIR
点击查看免费下载
上一篇:静态vs动态:PreciseCoder-9B-i1-GGUF与静态GGUF量化质量差多少?实测对比
下一篇:5分钟上手!一行命令,把整个代码仓库变成能点能搜的交互架构图

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/6 1:42:21

WeasyPrint 实战指南:一条命令把 HTML 变成排版精准的 PDF

WeasyPrint 实战指南&#xff1a;一条命令把 HTML 变成排版精准的 PDF 【免费下载链接】WeasyPrint The awesome document factory 项目地址: https://gitcode.com/gh_mirrors/we/WeasyPrint 如果你需要把 HTML 网页、模板化的报告或存档页面输出成 PDF&#xff0c;Weas…

作者头像 李华
网站建设 2026/11/6 1:41:48

项目上线那晚,我们开了哪瓶酒?一份工程师的选酒避坑实录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/6 1:41:19

C# 系列教程_8 循环语句 保姆级精讲(面向新手)

前置回顾顺序结构&#xff1a;代码从上到下执行一次分支判断&#xff08;if/switch&#xff09;&#xff1a;选择性执行&#xff0c;代码最多跑一遍循环&#xff1a;让一段代码重复执行&#xff0c;直到满足退出条件。C# 4 种循环&#xff1a;while 先判断&#xff0c;后执行&a…

作者头像 李华