diff --git a/src/Utils/APKSignatureInfo.php b/src/Utils/APKSignatureInfo.php deleted file mode 100644 index 1a25d32..0000000 --- a/src/Utils/APKSignatureInfo.php +++ /dev/null @@ -1,18 +0,0 @@ -open($file) !== true) { + throw new RuntimeException("Failed to open APK"); + } + + $manifest = $zip->getFromName("META-INF/MANIFEST.MF"); + + if ($manifest === false) { + return null; + } + + $found = false; + $entryName = ""; + for ($i = 0; $i < $zip->numFiles; $i++) { + $entryStat = $zip->statIndex($i); + if ($entryStat === false || !isset($entryStat['name'])) { + continue; + } + + $entryName = $entryStat['name']; + + if (!preg_match("~^META-INF/[^\/]+\.SF$~", $entryName)) { + continue; + } + + $found = true; + } + + if (!$found) { + return null; + } + + $signManifest = $zip->getFromName($entryName); + + if ($signManifest === false) { + return false; + } } } diff --git a/src/Utils/ApkSignatureInfo.php b/src/Utils/ApkSignatureInfo.php new file mode 100644 index 0000000..dac7de1 --- /dev/null +++ b/src/Utils/ApkSignatureInfo.php @@ -0,0 +1,34 @@ +expectException(\RuntimeException::class); + $this->expectExceptionMessage("Corrupted ZIP, ZIP64 offset and normal offset don't match up."); + $utils = new ApkSignUtils(); + $utils->findSignature(__DIR__ . '/../../var/testdata/signedapks/zip64corrupted.jar'); + } + function testSha1Signature() { $utils = new ApkSignUtils(); - $utils->findSignature(__DIR__ . '/../../var/testdata/signedapks/apksignv2.apk'); + $apkSignature = $utils->findSignature(__DIR__ . '/../../var/testdata/signedapks/sha1.apk'); + $this->assertNotNull($apkSignature, "Couldn't find APK signature"); } } \ No newline at end of file diff --git a/var/testdata/signedapks/zip64corrupted.jar b/var/testdata/signedapks/zip64corrupted.jar new file mode 100644 index 0000000..81dfa5d Binary files /dev/null and b/var/testdata/signedapks/zip64corrupted.jar differ