@@ -4,10 +4,14 @@ import android.content.Context
44import android.content.pm.ApplicationInfo
55import android.content.pm.PackageInfo
66import android.content.pm.PackageManager
7+ import android.content.pm.PackageManager.GET_SIGNING_CERTIFICATES
8+ import android.os.Build
79import android.os.Build.VERSION.SDK_INT
810import android.os.Build.VERSION_CODES.P
11+ import android.util.Base64
912import android.util.Log
1013import java.io.File
14+ import java.security.MessageDigest
1115
1216class Util {
1317 companion object {
@@ -38,6 +42,7 @@ class Util {
3842 map[" is_system_app" ] = isSystemApp(packageManager, packageInfo.packageName)
3943 map[" is_launchable_app" ] =
4044 isLaunchableApp(packageManager, packageInfo.packageName)
45+ map[" certificate_hashes" ] = getCertificateHashes(packageManager, packageInfo.packageName)
4146 }
4247 } else {
4348 map[" name" ] = " Unknown"
@@ -75,5 +80,26 @@ class Util {
7580 false
7681 }
7782 }
83+
84+ fun getCertificateHashes (packageManager : PackageManager , packageName : String ): List <String > {
85+ val packageInfo = packageManager.getPackageInfo(packageName, PackageManager .GET_SIGNING_CERTIFICATES )
86+ val signingInfo = packageInfo.signingInfo
87+ val signatures = if (signingInfo.hasMultipleSigners()) {
88+ signingInfo.apkContentsSigners
89+ } else {
90+ signingInfo.signingCertificateHistory
91+ }
92+
93+ val hashes = signatures.map {
94+ signature -> MessageDigest
95+ .getInstance(" SHA-256" )
96+ .digest(signature.toByteArray())
97+ .joinToString(" :" ) {
98+ " %02X" .format(it)
99+ }
100+ }
101+
102+ return hashes
103+ }
78104 }
79105}
0 commit comments