6.6.2 - Alpha - 增强 APK 文件 V1 签名方案的检测准确性
This commit is contained in:
@@ -24,6 +24,8 @@ import org.autojs.autojs.util.IntentUtils
|
||||
import org.autojs.autojs6.R
|
||||
import org.autojs.autojs6.databinding.ApkFileInfoDialogListItemBinding
|
||||
import java.io.File
|
||||
import java.util.jar.JarEntry
|
||||
import java.util.jar.JarFile
|
||||
|
||||
object ApkInfoDialogManager {
|
||||
|
||||
@@ -207,7 +209,7 @@ object ApkInfoDialogManager {
|
||||
private fun getApkSignatureInfo(apkFile: File): String? = runCatching {
|
||||
ApkVerifier.Builder(apkFile).build().verify().run {
|
||||
listOfNotNull(
|
||||
"V1".takeIf { isVerifiedUsingV1Scheme },
|
||||
"V1".takeIf { isVerifiedUsingV1Scheme || hasV1Signature(apkFile) },
|
||||
"V2".takeIf { isVerifiedUsingV2Scheme },
|
||||
"V3".takeIf { isVerifiedUsingV3Scheme },
|
||||
"V4".takeIf { isVerifiedUsingV4Scheme },
|
||||
@@ -215,6 +217,27 @@ object ApkInfoDialogManager {
|
||||
}
|
||||
}.getOrNull()
|
||||
|
||||
private fun hasV1Signature(apkFile: File): Boolean {
|
||||
if (!apkFile.isFile) return false
|
||||
JarFile(apkFile).use { jar ->
|
||||
var hasManifest = false
|
||||
var hasSF = false
|
||||
var hasRSA = false
|
||||
for (entry: JarEntry in jar.entries()) {
|
||||
val name = entry.name.uppercase()
|
||||
when {
|
||||
name == "META-INF/MANIFEST.MF" -> hasManifest = true
|
||||
name.endsWith(".SF") && name.startsWith("META-INF/") -> hasSF = true
|
||||
name.endsWith(".RSA") && name.startsWith("META-INF/") -> hasRSA = true
|
||||
}
|
||||
if (hasManifest && hasSF && hasRSA) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
private data class ApkInfo(
|
||||
val label: String?,
|
||||
val packageName: String?,
|
||||
|
||||
Reference in New Issue
Block a user