【问题标题】:How to read Android platform key signature programmatically如何以编程方式读取 Android 平台密钥签名
【发布时间】:2022-11-07 22:27:15
【问题描述】:

我需要阅读平台密钥的签名,它签署了设备上的整个构建。 目前,我可以读取任意包的签名,如com.android.systemui 等。但是,由于某些自定义ROM,不能保证将包安装为系统的一部分。

所以,我的问题是:有没有办法以编程方式在 Android 设备上读取系统的签名签名?


注意:我不是想读取密钥本身。签名,或者它的哈希对我来说就足够了。

【问题讨论】:

    标签: android


    【解决方案1】:

    这可能会有所帮助:https://github.com/android/uamp/blob/47da058112cee0b70442bcd0370c1e46e830c66b/media/src/main/java/com/example/android/uamp/media/PackageValidator.kt

    使用“android”作为包名。

    private val packageManager: PackageManager = ...
    
    fun getSystemSignature(): ByteArray? {
        return getSignature(ANDROID_SYSTEM_PACKAGE_NAME)
    }
    
    @Suppress("Deprecation")
    private fun getPackageInfo(clientPackageName: String): PackageInfo? {
        return when {
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU -> {
                val flags = PackageManager.GET_SIGNING_CERTIFICATES or PackageManager.GET_PERMISSIONS
                packageManager.getPackageInfo(
                    clientPackageName,
                    PackageManager.PackageInfoFlags.of(flags.toLong()),
                )
            }
    
            else -> {
                val flags = PackageManager.GET_SIGNATURES or PackageManager.GET_PERMISSIONS
                packageManager.getPackageInfo(
                    clientPackageName,
                    flags,
                )
            }
        }
    }
    
    @Suppress("Deprecation")
    private fun getSignature(packageName: String): ByteArray? {
        return when {
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.P -> {
                getPackageInfo(packageName)
                    ?.signingInfo?.signingCertificateHistory?.get(0)?.toByteArray()
            }
    
            else -> {
                getPackageInfo(packageName)?.signatures?.get(0)?.toByteArray()
            }
        }
    }
    

    【讨论】:

    • 虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。请edit回答所有相关信息。
    猜你喜欢
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    相关资源
    最近更新 更多