diff --git a/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/AndroidUtils.kt b/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/AndroidUtils.kt index a6f0e6f..637832e 100644 --- a/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/AndroidUtils.kt +++ b/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/AndroidUtils.kt @@ -141,14 +141,6 @@ fun String.convertPatchLevel(isLong: Boolean): Int = runCatching { Logger.e("Invalid patch level format: $this", it) }.getOrDefault(202404) -fun IPackageManager.getPackageInfoCompat(name: String, flags: Long, userId: Int) = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - getPackageInfo(name, flags, userId) - } else { - @Suppress("DEPRECATION") - getPackageInfo(name, flags.toInt(), userId) - } - val apexInfos: List> by lazy { runCatching { val packageManager = IPackageManager.Stub.asInterface(ServiceManager.getService("package")) diff --git a/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/CertificateHacker.kt b/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/CertificateHacker.kt index 55a1c57..afe7aa6 100644 --- a/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/CertificateHacker.kt +++ b/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/CertificateHacker.kt @@ -40,6 +40,7 @@ import java.security.spec.RSAKeyGenParameterSpec import java.util.* import java.util.concurrent.ConcurrentHashMap import javax.security.auth.x500.X500Principal +import android.os.Build object CertificateHacker { @@ -774,34 +775,41 @@ object CertificateHacker { private fun createApplicationId(uid: Int): DEROctetString { val pm = Config.getPm() ?: throw IllegalStateException("PackageManager not found!") val packages = pm.getPackagesForUid(uid) ?: throw IllegalStateException("No packages for UID $uid") - - val packageInfoArray = Array(packages.size) { i -> - val packageName = packages[i] - val packageInfo = pm.getPackageInfoCompat(packageName, PackageManager.GET_SIGNING_CERTIFICATES.toLong(), uid / 100000) - - DERSequence(arrayOf( - DEROctetString(packageName.toByteArray(StandardCharsets.UTF_8)), - ASN1Integer(packageInfo.longVersionCode) - )) - } - - val signatures = mutableSetOf() + val messageDigest = MessageDigest.getInstance("SHA-256") - - packages.forEach { packageName -> - val packageInfo = pm.getPackageInfoCompat(packageName, PackageManager.GET_SIGNING_CERTIFICATES.toLong(), uid / 100000) - packageInfo.signingInfo?.apkContentsSigners?.forEach { signature -> + val signatures = mutableSetOf() + + val packageInfos = packages.map { packageName -> + val info = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + pm.getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES.toLong(), uid / 100000) + } else { + pm.getPackageInfo(packageName, PackageManager.GET_SIGNING_CERTIFICATES, uid / 100000) + } + + info.signingInfo?.signingCertificateHistory?.forEach { signature -> signatures.add(Digest(messageDigest.digest(signature.toByteArray()))) } + + info } - + + val packageInfoArray = packageInfos.map { info -> + DERSequence( + arrayOf( + DEROctetString(info.packageName.toByteArray(StandardCharsets.UTF_8)), + ASN1Integer(info.longVersionCode) + ) + ) + }.toTypedArray() + val signaturesArray = signatures.map { DEROctetString(it.digest) }.toTypedArray() - + val applicationIdArray = arrayOf( DERSet(packageInfoArray), DERSet(signaturesArray) ) - + return DEROctetString(DERSequence(applicationIdArray).encoded) } + } \ No newline at end of file