Für die gleiche App habe ich:
- eine APK aus einem App Store,
- Was soll der Quellcode für die gleiche Version sein. Mit einem ziemlich üblichen Gradle-Build-Skript und einer Struktur.
Ich möchte überprüfen, ob die APK wirklich aus diesem Quellcode erstellt wurde oder nicht.
Wie überprüfe ich das?
Anmerkungen:
- Die APK ist nicht verschleiert.
- Ich habe keinen Grund, jemandes Unterschrift zu vertrauen. Ich vertraue nur dem Quellcode.
- Ich habe die App bereits für mich selbst erstellt, aber jetzt möchte ich wissen, ob die APK in Ordnung war oder nicht.
- Am besten mit Linux-Befehlszeilentools, aber jedes Tool ist in Ordnung.
.apk
Dateien, dann führen Sie einen Diff für die resultierenden Verzeichnisse aus. Einziger Unterschied sollte dann die Signatur sein (die aus offensichtlichen Gründen nicht übereinstimmen kann). Denken Sie darüber nach: Das einfache Entpacken der.apk
Dateien und das Ausführen eines binären Diff sollten dasselbe tun. Beide würden natürlich erfordern, dass sie beim Kompilieren die gleichen Bibliotheksversionen usw. verwendet haben :)diff
Methode scheint ordentlich zu sein ... aber was ist, wenn die Leute vom App Store die APK beim Kompilieren verschleiert haben?Antworten:
Sie können dies nur mit reproduzierbaren Builds tun :
Der App-Entwickler oder der App Store muss also an Bord sein, damit es funktioniert.
Andernfalls können Sie es nur selbst erstellen.
Ein Beispiel für einen Entwickler, der dies derzeit tut, ist Open Whisper Systems: https://github.com/WhisperSystems/Signal-Android/wiki/Reproducible-Builds
quelle
Eine großartige Sache bei Java und APKs ist, dass Sie die APK vollständig in Java-Quellcode dekompilieren können.
Der resultierende Quellcode ist jedoch nicht garantiert identisch.
Eine gute Möglichkeit, den resultierenden Quellcode mit einer bekannten Revision abzugleichen, besteht darin, zu überprüfen, welche Änderungen direkt vor und nach dem bekannten Commit im Repository vorgenommen wurden, und festzustellen, ob diese Änderungen auch in der dekompilierten Quelle vorhanden sind.
Verwenden Sie zum Dekompilieren dex2jar und JD-Gui .
bearbeiten Ich habe gerade bemerkt, dass Sie Linux-Tools wollten. Meine einzige Erfahrung ist mit Windows, aber ich bin sicher, dass es ähnliche Tools für Linux gibt.
quelle