feat: Add (WIP) Signature Checker

This commit is contained in:
Lucaskyy 2022-04-14 19:19:43 +02:00
parent 80276c7e5b
commit ae4c7b29f2
No known key found for this signature in database
GPG Key ID: 1530BFF96D1EEB89
2 changed files with 43 additions and 1 deletions

3
.gitignore vendored
View File

@ -112,3 +112,6 @@ gradle-app.setting
# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
# gradle/wrapper/gradle-wrapper.properties
# Potentially copyrighted test APK
stock.apk

View File

@ -0,0 +1,39 @@
package app.revanced.patches
import app.revanced.patcher.Patcher
import app.revanced.patcher.signature.MethodSignature
import app.revanced.patcher.signature.PatternScanMethod
import org.junit.Test
import java.io.File
internal class SignatureChecker {
@Test
fun checkSignatures() {
val file = File("stock.apk")
if (!file.exists()) {
throw IllegalStateException("Missing stock.apk! To run this test, please place stock.apk here: ${file.absolutePath}")
}
val patcher = Patcher(file)
patcher.addPatches(Index.patches.map { it() })
val unresolved = mutableListOf<MethodSignature>()
for (signature in patcher.resolveSignatures()) {
if (!signature.resolved) unresolved.add(signature)
val patternScanMethod = signature.metadata.patternScanMethod
if (patternScanMethod is PatternScanMethod.Fuzzy) {
val warnings = patternScanMethod.warnings
println("Signature ${signature.metadata.name} had ${warnings.size} warnings!")
for (warning in warnings) {
println(warning.toString())
}
}
}
if (unresolved.isNotEmpty()) {
val base = Exception("${unresolved.size} signatures were not resolved.")
for (signature in unresolved) {
base.addSuppressed(Exception("Signature ${signature.metadata.name} was not resolved!"))
}
throw base
}
}
}