Android系统的安全策略之一,是使用签名来区分APK安装时被赋予的用户权限,常规开发者使用自定义的签名,则开发出的APK被安装到系统中只属于普通用户,只具有有限的权限。
如果厂商开发的APK使用了操作系统的platform签名,再额外指定如android.uid.system的属性,则厂商开发的APK则会具有system或其他高级用户权限,system用户的权限很高,可以访问很多APK访问不了的资源。
而platform签名(.pk8)与常规开发者使用自定义的签名的格式(.jks)是不一样的。
需要将pk8格式的文件转成jks,才能够在Android Studio中方便的开发高权限App,否则只能使用命令方式对apk做签名(signapk.jar),然后push到系统中,通过观察log来判断程序运行是否正常。
工具准备
platform签名:
$ ls build/target/product/security/platform.*
build/target/product/security/platform.pk8
build/target/product/security/platform.x509.pem
keytool-importkeypair
https://github.com/getfatday/keytool-importkeypair
AS生成jks格式的签名
Build->Generate Signed Bundle/APK->APK->Create New:
选择Key store path
设置Password、Key Alias、Password等信息:
image-20210727163134611.png
格式转换
将platform.x509.pem、platform.pk8拷贝到platform.jks同级目录下。
将keytool-importkeypair脚本也下载到这个目录下,并赋予可执行权限。
执行命令:
$ ./keytool-importkeypair -k platform.jks -p 111111 -pk8 platform.pk8 -cert platform.x509.pem -alias platform
Importing "platform" with SHA1 Fingerprint=27:19:6E:38:6B:87:5E:76:AD:F7:00:E7:EA:84:E4:C6:EE:E3:3D:FA
Importing keystore /tmp/keytool-importkeypair.tOWV/p12 to platform.jks...
Existing entry alias platform exists, overwrite? [no]: yes
Entry for alias platform successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled
Warning:
<platform> uses the MD5withRSA signature algorithm which is considered a security risk and is disabled.
配置AS
在build.gradle文件中添加下面的内容:
android {
...
defaultConfig {
...
}
signingConfigs {
release {
storeFile file("../platformjks/platform.jks")
storePassword '111111'
keyAlias 'platform'
keyPassword '111111'
}
debug {
storeFile file("../platformjks/platform.jks")
storePassword '111111'
keyAlias 'platform'
keyPassword '111111'
}
}
...
}
在manifest中添加android.uid.system:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.abc.factoryapp.myapplication" android:sharedUserId="android.uid.system">
<application
....
</application>
</manifest>
运行apk,查看uid
35wsfd:/ # ps -ef | grep abc
u0_a141 5485 5477 0 19:29:05 136:0 00:00:00 install_server-141cf06d com.abc.factoryapp.myapplication
system 5822 623 6 20:13:20 ? 00:00:00 com.abc.factoryapp.myapplication
由ps命令结果可知,我们的apk被安装到系统中后,被赋予了system用户。
网友评论