从adb shell dumpsys中获得的PackageSignatures

问题描述 投票:4回答:1

我想知道,当你用以下方法获得PackageSignatures字段的哈希值时,它到底意味着什么?

adb shell dumpsys package com.myapp

给定安装的应用程序的哈希值。

我看到了两个哈希值.第一个哈希值(abc)在每个安装中都是不同的.第二个哈希值(xyz)在给定的apk中是固定的:

signatures=PackageSignatures{abcabca [xyzxyzxy]}

第一个(abc)在每次安装的时候都不一样.第二个(xyz)对于一个给定的apk是固定的.

此外,我想知道第二个哈希值是否与APK的公共签名有任何关系。我有几个apk的公有签名是一样的,但是第二个哈希值不一样,这正常吗?这正常吗?

android security adb
1个回答
0
投票

最近的Android版本的签名行看起来如下。

signatures=PackageSignatures{9122424 version:2, signatures:[bbb2e2d2], past signatures:[]}

为了理解这一行,我们只需要查看AOSP的源代码。PackageSignatures.java

第一部分

第一部分 abcabca 来自 System.identityHashCode(this). 因此,它生成了当前的Java哈希码。PackageSignatures 实例。由于该类只有一个提交的 PackageParser.SigningDetails mSigningDetails; 哈希码完全取决于类的字段。签约细节:

  • Signature[] 签名。
  • int signatureSchemeVersion;
  • ArraySet publicKeys;

版本部分(较新的Android版本)

你的二手安卓版似乎有点老了,因为现在的第二部分是 signatureSchemeVersion - 目前已知有三种签名方案。V1(jarsigner)、v2和v3。

第三部分(签名

您感兴趣的签名是由以下代码生成的。

Integer.toHexString(mSigningDetails.signatures[i].hashCode())

其中 signatures[i] 是类[]的一个实例。android.content.pm.Signature](https:/github.comaosp-mirrorplatform_frameworks_baseblobmastercorejavaandroidcontentpmSignature.java。).

hashCode() 在该类中定义为由 Arrays.hashCode(mSignature); 哪儿 mSignature 是一个字节数组,似乎包含了使用的X.509签名证书的编码版本。或者是原始的 byte[] 可以提供,因此很难判断具体内容。

但根据我的理解,在你的设备上,这部分应该是直接链接到APK文件的签名。

© www.soinside.com 2019 - 2024. All rights reserved.