Vergleichen von Signaturen von APKs

Ich habe zwei .apk-Dateien, die verschiedene Versionen derselben App sein sollen. Wie kann ich am besten überprüfen, ob beide mit demselben Schlüssel signiert wurden?

Ich möchte sicherstellen, dass keine Fehler gemacht wurden und die neuere Version als Update derselben App behandelt wird.

Der Schlüssel ist nur ein Teil dessen, was es als Update betrachten würde. Sie können denselben Schlüssel verwenden, um mehrere Anwendungen zu signieren. Der andere wichtige Teil, um sicherzustellen, dass eine App ein Update ist, sind die Pakete mit demselben Paketnamen.
Ja. Ich bin mir dessen bewusst, aber soweit ich weiß, bin ich mit den Paketnamen einverstanden. Wo in der apk würde der Paketname aufgeführt werden (nur damit ich sicher gehen kann?)
Wenn Sie die AndroidManifest.xmlDatei öffnen, finden Sie den Paketnamen auch ohne die App zu dekompilieren. Es sollte am Anfang der Datei zwischen einigen Symbolen stehen.

Antworten (2)

Zum Aktualisieren einer APK-Datei müssen zwei Eigenschaften übereinstimmen:

  1. Der Name des App-Pakets (kann AndroidManifest.xmlnach dem Dekompilieren angezeigt werden)
  2. Die App-Signatur muss übereinstimmen (das verwendete Signaturzertifikat muss identisch sein).

Der beste Weg, um eine Signatur einer APK-Datei zu überprüfen und das verwendete Signaturzertifikat und den öffentlichen Schlüssel anzuzeigen, die apksigner.jarfür das Android SDK (Build-Tools) verwendet werden sollen:

Das folgende Beispiel führt die Überprüfung von zwei Versionen der Samsung E-Mail-App mit aus apksigner:

java -jar <path to apksigner>\apksigner.jar verify -verbose --print-certs "Samsung Email_v4.2.74.1_apkpure.com.apk"
java -jar <path to apksigner>\apksigner.jar verify -verbose --print-certs "Samsung Email_v4.1.43-5_apkpure.com.apk"

Jedes Mal erhalten Sie eine Ausgabe wie diese:

Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Number of signers: 1
Signer #1 certificate DN: EMAILADDRESS=android.os@samsung.com, CN=Samsung Cert, OU=DMC, O=Samsung Corporation, L=Suwon City, ST=South Korea, C=KR
Signer #1 certificate SHA-256 digest: 34df0e7a9f1cf1892e45c056b4973cd81ccf148a4050d11aea4ac5a65f900a42
Signer #1 certificate SHA-1 digest: 9ca5170f381919dfe0446fcdab18b19a143b3163
Signer #1 certificate MD5 digest: d087e72912fba064cafa78dc34aea839
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 2048
Signer #1 public key SHA-256 digest: 0470be656b9375d253fbb94c3a87dc7040e2f2760c19c4292eb62cc68e02de4a
Signer #1 public key SHA-1 digest: df1e4fd4fc2ebfc187f79309dfc6a4c662bda4d0
Signer #1 public key MD5 digest: 7c6371f33db3b4361504cb13beb6e818

Sie müssen nur den sha256-Digest des Zertifikats und/oder des öffentlichen Schlüssels vergleichen . Wenn sie für beide APKs gleich sind, können Sie sicher sein, dass sie von derselben Person oder Firma veröffentlicht wurden (solange der App-Eigentümer die App nicht an jemand anderen verkauft hat oder der private Schlüssel gestohlen wurde).

Sie müssten zwei Dinge überprüfen:

  1. ob die Paketnamen identisch sind,
    siehe: Lesen Sie den Paketnamen einer Android-APK auf unserer Schwesterseite. Kurz gesagt: Laufen aapt dump badging file.apkund aufpassen package:. Wenn die Paketnamen identisch sind, müsste es sich um dieselbe App handeln – allerdings ist noch unklar, ob sie vom selben Entwickler stammen und damit ob das „Neue“ als „gültiges Update“ gelten würde – oder die „Signaturprüfung“ fehlschlagen würde in diesem Prozess.
  2. ob die Signaturen übereinstimmen
    Das bedeutet, ob sie mit demselben Schlüssel signiert sind – was garantieren sollte, dass sie von demselben Entwickler erstellt (erstellt und signiert) wurden, der seinen/ihren Signaturschlüssel hätte geheim halten sollen. Siehe auch hier auf unserer Schwesterseite: Wie kann ich die Identität der Person anzeigen, die die APK auf einem Android-Gerät signiert hat? // Abrufen von Zertifikatsdetails von einer apk .

Beachten Sie, dass für die beschriebenen Aufgaben mindestens eine Basisinstallation der Android-Entwicklertools erforderlich ist. aaptist sogar Teil einer minimalen ADB- Installation – jarsignerund keytoolwürde ein vollständigeres Paket benötigen (wenn Sie unter Linux arbeiten, opensslbietet es jedoch einen anderen Ansatz – Details finden Sie in den verlinkten Beiträgen von Stack Overflow.