使用 PLATFORM key 签名的 Android APK 未授予系统权限?

标签 android android-studio apk android-install-apk

我可以访问 Android 平板电脑的平台 key 和证书。我正在尝试构建一个应用程序并通过执行以下操作以系统级权限安装它:

  1. 使用名为 platform_import_keystore 的 bash 脚本创建包含 platform.pk8 和 platform.x509.pem 的 Java KeyStore 文件在 GitHub 上找到。

  2. 在 AndroidManifex.xml 中添加以下内容:

    <uses-permission android:name="android.permission.READ_LOGS"/> android:sharedUserId="android.uid.system"

  3. 使用 Android Studio 中的 Java KeyStore 文件使用平台 key 和证书对 APK 进行签名。

  4. 安装APK

当应用程序运行时,系统拒绝 READ_LOGS 权限。 为什么我的应用程序没有以系统级权限运行?

最佳答案

对于系统应用程序来说,@Mark 提到的内容在某种程度上是正确的。 我认为你还做错了其他事情。 我也用系统应用程序尝试过这一点,只要它使用平台 keystore 签名,它就可以工作。现在这是在 Android 8 和 Android 9 上。您还没有提到运行设备的 AOSP 版本。

据我所知,这会改变事情,所以如果它是 AOSP 10+,它的行为可能会有所不同。

此外,其他评论还缺少另一个关键的东西 SELinux。 SELinux 不允许用户构建。 Verity 已启用,您无法获得 root 访问权限。因此,您无法将应用程序推送到 /system/priv-app/ 或将其推送到 /vendor/app/。 如果没有正确的 SE 策略文件,您将无法访问系统资源。您可以自己检查日志,以查看 avc returned 消息。

我认为总的来说,您所看到的应该符合 AOSP 的安全理念。使用系统 key 签名的应用程序不应获得系统权限。它还需要位于正确的位置,无论是作为特权应用程序还是供应商应用程序。此类应用程序需要列入白名单。 AOSP 源代码中有一个内置脚本,甚至可以生成白名单权限(它生成所需的 xml)

系统应用程序有两类:/system/app//system/priv-app/ 特权应用程序是唯一获得签名级别权​​限的应用程序,根据较新版本的 Android,您需要在 /system/etc/priv_app-permissions_device_name 中启用白名单。

如果您在启用验证时对系统或供应商进行任何更改,首先它们会以只读方式安装,但如果您确实进行更改,设备将自行变砖。这是安全功能。所有的自定义开发都需要在SELinux的许可模式下的userdebug构建中完成,然后需要预定义所有权限,将SE策略微调到最小,然后用户构建才能正常运行。用户构建根本不适合 AOSP 开发 Activity ,即使它只是为了测试或尝试单个应用程序。

用户构建是最终用户可以使用的生产类型构建,不用于开发。它是最安全的 Android 形式,因此如果您有平台 key ,可能永远都不够。

综上所述,我确信您没有正确的 key 。只需从 system/priv-app/ 中提取应用程序并使用 keytool 或类似工具检查其签名,然后尝试与您的发布 apk 进行匹配。

这有点复杂,有点难以解释,而且 Android 中也有权限级别,所以如果您不遵循特定的方法/路径,您将无法让它工作。

关于使用 PLATFORM key 签名的 Android APK 未授予系统权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57084935/

相关文章:

java - 以编程方式接听电话

java - joda periodFormatter 打印 null

android - 我的 Android Studio 中的 Java 文件被毁坏了

java - 微调器不显示数组和文本

android - Chain animator设置android动画

android - 如何使用android studio设置apk发布文件名?

java - 无法在 Android Studio 中清理项目

android - 如何在客户端验证 APK 签名证书?

lua - 如何从apk中提取Lua文件(corona生成的apk)

android - 将多个 APK 上传到 Play 商店并将其本地化为不同语言