@@ -4,10 +4,13 @@ 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
78import android.os.Build.VERSION.SDK_INT
89import android.os.Build.VERSION_CODES.P
10+ import android.util.Base64
911import android.util.Log
1012import java.io.File
13+ import java.security.MessageDigest
1114
1215class Util {
1316 companion object {
@@ -38,6 +41,7 @@ class Util {
3841 map[" is_system_app" ] = isSystemApp(packageManager, packageInfo.packageName)
3942 map[" is_launchable_app" ] =
4043 isLaunchableApp(packageManager, packageInfo.packageName)
44+ map[" certificate_hashes" ] = getCertificateHashes(packageManager, packageInfo.packageName)
4145 }
4246 } else {
4347 map[" name" ] = " Unknown"
@@ -75,5 +79,26 @@ class Util {
7579 false
7680 }
7781 }
82+
83+ fun getCertificateHashes (packageManager : PackageManager , packageName : String ): List <String > {
84+ val packageInfo = packageManager.getPackageInfo(packageName, PackageManager .GET_SIGNING_CERTIFICATES )
85+ val signingInfo = packageInfo.signingInfo
86+ val signatures = if (signingInfo.hasMultipleSigners()) {
87+ signingInfo.apkContentsSigners
88+ } else {
89+ signingInfo.signingCertificateHistory
90+ }
91+
92+ val hashes = signatures.map {
93+ signature -> MessageDigest
94+ .getInstance(" SHA-256" )
95+ .digest(signature.toByteArray())
96+ .joinToString(" :" ) {
97+ " %02X" .format(it)
98+ }
99+ }
100+
101+ return hashes
102+ }
78103 }
79- }
104+ }
0 commit comments