Android Safety 系列专题【篇一:系统签名】

本篇提到的应用签名,其实就是指android系统编译构建过程中,对应用包的签名。

相关的定义和说明Android源代码中的/build/target/product/security/的内容:

如上的官方介绍文档:https://source.android.com/devices/tech/ota/sign_builds.html

  • 其中pk8文件是私钥文件,PKCS#8 DER格式的文件
  • 其中x509.pem文件是证书文件,PEM格式。

1、目的和作用?

  • 为什么要针对apk包进行签名?同google官方网站的描述,如果你更新apk的时候,系统会检测你的apk的签名秘钥是否和系统指定的签名秘钥匹配,如果不匹配,系统将会拒绝安装改应用,这样能够保证被更新的应用是没有掉过包的。
  • 为什么要针对ota包进行签名?同前面提到的apk应用一样,OTA包其实也可以简单的理解为一个大型apk,我们在安装OTA包之前需要对其进行校验(通过RecoverySystem.verifyPackage()),如果签名秘钥对不匹配,讲拒绝OTA升级,同样保证被更新的OTA是没有掉过包的。

2、长什么样子?

每个密钥都包含两个文件:一个是扩展名为 .x509.pem 的证书,另一个是扩展名为 .pk8 的私钥。 私钥需要加以保密,并用于对 apk 包进行签名。 密钥本身也可能受密码保护。相比之下,证书只包含公开的一半密钥,因此可以大范围地分发。证书用于验证某个 apk 包是否由相应的私钥进行签名。

标准 Android build 使用四个密钥,所有这些密钥都位于 build/target/product/security

  • testkey:适用于未另外指定密钥的 apk 包的通用默认密钥。
  • platform:适用于核心平台所包含的 apk 包的测试密钥。
  • shared:适用于家庭/联系人进程中的共享内容的测试密钥。
  • media:适用于媒体/下载系统所包含的 apk 包的测试密钥。
  • networkstack:适用于网络系统所包含的 apk 包的测试密钥

3、如何客制化?

通常android源码默认使用了aosp的应用签名中的testkey,如上目录/build/target/product/security/目录下的testkey签名,然而这套签名是aosp的公共测试签名,因此安全系统极低,在XTS等测试中会对其进行拦截,通常我们会定制我们自己的应用签名。如下步骤介绍如何指定厂商自己的应用签名:

步骤一:如何生成APK应用签名文件?

在android根目录/build/target/product/security/有详细说明如何生成秘钥对,其中

在项目开发过程中,我们通常需要更换上面的秘钥对,使用客户提供或者我们自己的秘钥对,生成方式如上。

步骤二:如何集成APK应用签名文件?

我们可以通过宏变量PRODUCT_DEFAULT_DEV_CERTIFICATE来指定如上步骤生成的签名文件的路径。如ChatGPT的回答:

步骤三:如何使用APK应用签名文件?

  • Android编译构建的时候引入KEY
  • 应用集成的时候指定使用的KEY
bash 复制代码
include $(CLEAR_VARS)
LOCAL_MODULE := AOSPLauncherR
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := platform   //指定平台签名
LOCAL_PRIVILEGED_MODULE := true
LOCAL_REQUIRED_MODULES := privapp_permissions_AOSPLauncherR.xml
LOCAL_OVERRIDES_PACKAGES := Home Launcher2 Launcher3 \
    Launcher3QuickStep Launcher3Go Launcher3QuickStepGo \
    MtkLauncher3 MtkLauncher3QuickStep MtkLauncher3Go MtkLauncher3QuickStepGo MtkLauncher3GoIconRecents
include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
LOCAL_MODULE := privapp_permissions_AOSPLauncherR.xml
LOCAL_MODULE_CLASS := ETC
LOCAL_PRODUCT_MODULE := true
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)

这里集成的AOSPLauncherR因为是平台的应用,LOCAL_CERTIFICATE = platform,因此编译构建的时候针对AOSPLancherR应用会使用步骤一中指定的plat签名文件进行签名

bash 复制代码
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := MobileFeliCaSettingApp
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_MODULE_PATH := $(TARGET_OUT_APPS)
# indicate to generate .odex file in special built/core/prebuilt.mk
LOCAL_DEX_PREOPT:=true
include $(BUILD_PREBUILT)

这里集成的MobileXXX应用是三方应用,使用LOCAL_CERTIFICATE := PRESIGNED,因此编译构建的时候使用的是testKey?

4、相关案例

案例一:因为APK应用签名为系统默认,导致XTS问题

CtsSecurityTestCases

如上报错日志表示一堆应用使用了android默认的应用签名,解决方案就是生成新的应用签名文件

GtsAppBlacklistDeviceTestCases

如上报错日志表示一堆应用使用了android默认的应用签名,解决方案就是生成新的应用签名文件

GtsMbaPrivilegedPermissionTestCases

testPackageSignatures和testForBlacklistedApps和testMbaPrivilegedPermission 这样的测试用例是针对APK应用签名的校验,即编译的时候需要对所有应用或者OTA包进行应用签名,使用默认android的签名就会被检查出来,解决方案就是更新自己的应用签名

BTS which has been signed by a certificate that is known to be compromised and should be replaced

是针对系统应用签名的一个检测,即编译的时候需要对所有应用或者OTA包进行应用签名,使用默认android的签名就会被检查出来,解决方案就是更新自己的应用签名

案例二:因为APK应用签名不匹配,导致OTA无法正常升级

相关推荐
独自破碎E15 小时前
【BISHI15】小红的夹吃棋
android·java·开发语言
李堇18 小时前
android滚动列表VerticalRollingTextView
android·java
lxysbly19 小时前
n64模拟器安卓版带金手指2026
android
游戏开发爱好者81 天前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
王码码20351 天前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
黑码哥1 天前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
亓才孓1 天前
[JDBC]元数据
android
独行soc1 天前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能1 天前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
科技块儿1 天前
利用IP查询在智慧城市交通信号系统中的应用探索
android·tcp/ip·智慧城市