CertUtil: Fix & improve fdroid app check

* Check for fdroid basic as install source as well
* Check for fdroid.org as organization name in signing certificate attribute

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2024-02-15 19:43:54 +05:30
parent 42c182bdb7
commit 2e19eac1c4
2 changed files with 23 additions and 16 deletions

View File

@@ -25,22 +25,18 @@ import android.content.pm.PackageManager
import android.util.Base64
import android.util.Log
import com.aurora.extensions.generateX509Certificate
import com.aurora.extensions.getInstallerPackageNameCompat
import com.aurora.extensions.isPAndAbove
import com.aurora.store.util.PackageUtil.getPackageInfo
import java.security.MessageDigest
import java.security.cert.X509Certificate
import java.util.Locale
object CertUtil {
private val TAG = "CertUtil"
private val fdroidSubjects = listOf("FDROID", "GUARDIANPROJECT.INFO")
fun isFDroidApp(context: Context, packageName: String): Boolean {
return getX509Certificates(
context,
packageName
).any { it.subjectDN.name.uppercase(Locale.getDefault()) in fdroidSubjects }
return isInstalledByFDroid(context, packageName) || isSignedByFDroid(context, packageName)
}
fun getEncodedCertificateHashes(context: Context, packageName: String): List<String> {
@@ -60,6 +56,24 @@ object CertUtil {
}
}
private fun isSignedByFDroid(context: Context, packageName: String): Boolean {
return getX509Certificates(context, packageName).any { cert ->
cert.subjectDN.name.split(",").associate {
val (left, right) = it.split("=")
left to right
}["O"] == "fdroid.org"
}
}
private fun isInstalledByFDroid(context: Context, packageName: String): Boolean {
val fdroidPackages = listOf(
"org.fdroid.basic", "org.fdroid.fdroid", "org.fdroid.fdroid.privileged"
)
return fdroidPackages.contains(
context.packageManager.getInstallerPackageNameCompat(packageName)
)
}
private fun getX509Certificates(context: Context, packageName: String): List<X509Certificate> {
return try {
val packageInfo = getPackageInfoWithSignature(context, packageName)

View File

@@ -199,16 +199,9 @@ object PackageUtil {
/*Filter F-Droid apps*/
if (isFDroidFilterEnabled) {
packageInfoList = packageInfoList
.filter {
val packageInstaller = packageManager.getInstallerPackageNameCompat(it.packageName)
!listOf(
"org.fdroid.fdroid",
"org.fdroid.fdroid.privileged"
).contains(packageInstaller)
}.filter {
!CertUtil.isFDroidApp(context, it.packageName)
}
packageInfoList = packageInfoList.filter {
!CertUtil.isFDroidApp(context, it.packageName)
}
}
packageInfoList.forEach {