如何在安装 APK 之前查看 Android 应用程序权限
当您从 Google Play 商店安装应用程序时,Android 会显示该应用程序可以访问的内容的简化摘要。从非 Play 源旁加载 APK,除非您自己阅读清单,否则您没有这样的安全网。 “壁纸应用程序真的需要短信和麦克风访问吗?” 正是本指南将帮助您回答的问题。
接下来是我们团队在分类不熟悉的 APK 时使用的相同工作流程:打开它,读取 uses-permission 条目,解码保护级别,并将应用程序 说 所需的内容与其类别通常需要的内容进行比较。我们的 在线 APK 信息工具 为您进行二进制 XML 解码,因此整个过程大约需要 10 秒。
为什么要费心审核权限?
恶意开发人员获取流行的免费应用程序,对其进行更改,然后在第三方网站上重新发布它们。虽然该应用程序的外观和功能可能正常,但其隐藏代码可能会复制您的联系人列表或录制背景音频。通过查看权限 预安装,您可以发现这些“权限蠕变”的危险信号。
如何审核任何 APK 文件(在线)
我们的 APK信息工具 完全在您的浏览器中读取您的文件清单;该文件永远不会上传到服务器,也不会执行任何代码。使用方法如下:
过程:
- 请前往并使用我们的 APK信息页面。
- 选择您的 .apk 文件。
- 等待分析完成(通常 5 秒)。
- 向下滚动到 权限部分。
- 查找高风险标志,例如:READ_SMS、PROCESS_OUTGOING_CALLS 或 ACCESS_FINE_LOCATION。
权限危险信号列表
如果 计算器 或 手电筒 应用程序要求 READ_CONTACTS 或 RECORD_AUDIO,请立即删除该文件。这些应用程序拥有该数据的合法理由为零。
了解 Android 权限级别
并非所有权限都是一样的。 Android 将它们分为三个级别:
- 普通的: 不直接威胁隐私的低风险权限(例如 SET_ALARM)。 Android 会自动授予这些权限。
- 危险的: 高风险权限(联系人、位置、相机)。这些 必须 将在应用程序运行时由您确认。
- 签名/系统: 极高风险。这些仅适用于由设备制造商或操作系统本身签名的应用程序。
手动方法(使用 ZIP 查看器)
如果您有一定的技术能力,您可以自己审核权限:
- 将 app.apk 重命名为 app.zip 并打开。
- 找到AndroidManifest.xml。 (注意:它是二进制格式,在文本编辑器中看起来像乱码)。
- 使用 XML打印机 等工具将其转换为可读文本。
- 搜索以 <uses-permission> 开头的标签。
建议:使用我们的 在线工具 会更快地为您立即解码。
AndroidManifest.xml 中实际存储的内容
清单是应用程序声明的每个权限、组件和功能的真实来源。在 APK 中,文件采用 二进制XML 形式,而不是您在源代码中看到的纯文本,因此无法使用普通文本编辑器读取。我们的 APK 信息工具可解码二进制 XML 并显示相关标签。最重要的是:
- <uses-permission android:name="..."/>:应用程序可能请求的每个权限。 满的 列表位于此处,包括应用程序在运行时可能永远不会实际使用的列表。
- <uses-permission-sdk-23 ... />:相同,但仅当应用程序在 Android 6 或更高版本上运行时才请求。较旧的设备会在没有提示的情况下默默地允许。
- <uses-feature android:name="..." android:required="true|false"/>:应用程序使用的硬件功能(相机、GPS、NFC)。当标记为 必需的 时,Play 商店会向缺乏该功能的设备隐藏该应用程序。
- <application android:debuggable="true">:发布的 APK 中存在巨大的危险信号。可调试应用程序向具有 ADB 访问权限的任何人公开其内存和进程状态。拒绝。
- <activity android:exported="true"> 关于敏感活动:让其他应用程序启动该屏幕。对于隐私应用程序来说,这通常意味着编码很草率。
权限保护级别:备忘单
Android 为每个权限分配一个“保护级别”。了解请求属于哪个级别可以告诉您操作系统将如何认真地对待它。
| 防护等级 | 用户体验 | 示例 |
|---|---|---|
| 普通的 | 在安装时以静默方式授予。没有提示。 | 互联网、振动、访问网络状态、唤醒锁定 |
| 危险的 | 第一次使用该功能时会出现运行时提示。可在设置中撤销。 | 摄像机、录音音频、读取联系人、访问精细位置 |
| 签名 | 仅授予使用与授予应用程序或操作系统相同的证书签名的应用程序。 | BIND_VPN_SERVICE、INSTALL_PACKAGES(仅限系统) |
| 签名|特权 | 仅适用于系统映像的 priv-app 目录中预装的应用程序。 | 管理用户、读取日志 |
| 应用程序/角色 | 需要单独的设置流程才能启用。 | SYSTEM_ALERT_WINDOW、BIND_ACCESSIBILITY_SERVICE、MANAGE_EXTERNAL_STORAGE |
“隐藏”权限的实际含义是什么
一个常见的误解是某些权限是秘密的。它们不是:应用程序可能使用的每个权限都必须在 AndroidManifest.xml 中声明,并且操作系统拒绝授予此处未列出的任何权限。人们通常所说的“隐藏”是指以下两件事之一:
- 普通级别的权限是静默的。 它们在安装时获得授权,无需任何用户交互。 Play 商店摘要甚至没有显示其中一些。它们的“隐藏”是指“容易被忽视”,而不是“未公开”。
- 应用程序定义的自定义权限。 应用程序可以声明自己的 <permission> 标签,并在内部组件上要求它们。这些存在用于应用程序间通信,本身并不是隐私问题,但如果流行的应用程序声明具有错误保护级别的自定义权限,然后另一个应用程序将其用作后门,则它们可能会被滥用。
无论哪种方式,答案都是一样的:阅读清单,不要相信 Play 商店本身的描述。
工作示例:审核真实的 APK
假设您的下载文件夹中有 example.apk。这是确切的工作流程:
- 在浏览器中打开 APK信息工具。
- 将 APK 拖放到上传区域。处理发生在本地;该文件不会离开您的设备。
- 阅读 权限 部分。每个条目都显示常量名称 (android.permission.READ_CONTACTS 及其允许的简单语言描述)。
- 将列表与应用程序的类别进行比较。粗略地,预计:
- 相机应用程序: CAMERA、RECORD_AUDIO(用于视频)、STORAGE/MEDIA 写入
- 消息应用程序: INTERNET、READ_CONTACTS、SEND_SMS(仅基于短信)、RECORD_AUDIO(用于语音注释)、CAMERA(用于发送照片)
- 游戏: INTERNET,有时RECORD_AUDIO(用于游戏内语音聊天),计费相关权限;很少有其他事情
- 实用应用程序(计算器、手电筒、天气):INTERNET(用于广告)、ACCESS_NETWORK_STATE,可能是 LOCATION(仅天气)。除此之外的任何事情都是可疑的。
- 如果列表中的任何内容不符合该类别,请不要安装。计算器没有充分的理由需要短信访问。
无论文件是 APK、XAPK(我们在其中读取内部基础 APK)还是 APKS 捆绑包(在其中我们读取每个拆分的清单),都适用相同的逻辑。
从命令行执行此操作
如果您更喜欢终端路线,Android SDK 附带 aapt2,它以纯 XML 格式转储来自任何 APK 的清单:
aapt2 dump badging example.apk | grep "uses-permission"
或者同时使用apksigner来验证签名证书:
apksigner verify --print-certs example.apk
对于那些不想安装 SDK 只是为了检查单个文件的用户,浏览器工具可以执行相同的操作。
常见问题 (FAQ)
安装 APK 后可以拒绝权限吗?
是的。在 Android 6.0 及更高版本上,您可以转到 设置 > 应用程序 > [应用程序名称] > 权限 打开或关闭各个危险权限。
XAPK 文件是否有不同的权限?
一个 XAPK 包含一个或多个 APK。里面的每个 APK 都有自己的清单。我们的工具将分析捆绑包中的 主要APK 以向您显示相关权限。
为什么每个应用程序都要求“网络访问”?
几乎所有应用程序都需要访问互联网才能进行分析、错误报告或广告。虽然这很常见,但这也是将被盗数据发送到黑客服务器的方式。
在点击安装之前检查清单权限
你无法判断你看不到的东西。在旁加载之前花十秒 查看APK的权限 是了解应用程序可以达到的目标和只是希望它表现出来的区别。首先阅读列表,然后安装。