Eine CLI-Anwendung, die Android-APK-Dateien automatisch für die HTTPS-Überprüfung vorbereitet
Die Überprüfung des HTTPS-Verkehrs einer mobilen App mithilfe eines Proxys ist wahrscheinlich der einfachste Weg, um herauszufinden, wie es funktioniert. Allerdings ist es mit der in Android 7 eingeführten Netzwerksicherheitskonfiguration und dem Versuch von App-Entwicklern, MITM-Angriffe durch Zertifikat-Pinning zu verhindern, ziemlich mühsam geworden, eine App mit einem HTTPS-Proxy zum Laufen zu bringen.
apk-mitm
automatisiert den gesamten Prozess. Alles was Sie tun müssen, ist ihm eine APK-Datei zu geben und apk-mitm
wird:
Sie können apk-mitm
auch verwenden, um Apps mit dem Android App Bundle zu patchen, und ein Rooten Ihres Telefons ist nicht erforderlich.
Um das reguläre Verhalten einer App zu ändern, um Sicherheitsfunktionen wie das Anheften von Zertifikaten zu umgehen, muss entweder der Quellcode der App vor der Ausführung geändert werden oder die App während der Ausführung „eingehängt“ werden, um Funktionsaufrufe abzufangen.
apk-mitm
verfolgt derzeit den früheren Ansatz, den Code der App zu ändern, indem es die App zunächst mit Apktool „zerlegt“, Änderungen an mehreren Dateien vornimmt und sie dann wieder zusammensetzt (ebenfalls mit Apktool).
Dieser Ansatz hat den Vorteil, dass kein gerootetes Gerät erforderlich ist, hat aber auch mehrere Nachteile. Das größte Problem besteht darin, dass Apps nicht wirklich zum Zerlegen gedacht sind. Apktool versucht das ohnehin zu erreichen, stößt aber gerade bei großen und komplexen Apps oft auf Probleme.
Ein weiteres Problem bei diesem Ansatz besteht darin, dass einige Methoden zum Anheften von Zertifikaten, wie z. B. Prüfungen, die in nativen Binärdateien durchgeführt werden (wie es bei Frameworks wie Flutter der Fall ist), entweder sehr schwer oder gar nicht umgangen werden können. Aus diesem Grund kann es sinnvoll sein, bei kniffligeren Apps andere Ansätze auszuprobieren.
Insbesondere möchte ich android-unpinner
Projekt von mitmproxy und die zugrunde liegenden frida-interception-and-unpinning
Skripte von HTTP Toolkit hervorheben. Ihr Ansatz wendet Patches zur Laufzeit mit Frida an, was viel leistungsfähiger ist, aber auch bedeutet, dass es ohne ein gerootetes Gerät entweder nicht verwendet werden kann oder schwieriger zu verwenden ist.
Wenn Sie eine aktuelle Version von Node.js (14+) und Java (8+) haben, können Sie apk-mitm
installieren, indem Sie Folgendes ausführen:
npm install -g apk-mitm
Nach der Installation können Sie diesen Befehl ausführen, um eine App zu patchen:
apk-mitm < path-to-apk >
Das Patchen einer APK-Datei namens example.apk
könnte folgendermaßen aussehen:
$ apk-mitm example.apk
✔ Decoding APK file
✔ Modifying app manifest
✔ Replacing network security config
✔ Disabling certificate pinning
✔ Encoding patched APK file
✔ Signing patched APK file
Done ! Patched APK: ./example-patched.apk
Sie können jetzt die Datei example-patched.apk
auf Ihrem Android-Gerät installieren und einen Proxy wie Charles oder mitmproxy verwenden, um den Datenverkehr der App anzuzeigen.
Sie können Apps auch über das Android App Bundle mit apk-mitm
patchen, indem Sie es mit einer *.xapk
Datei (zum Beispiel von APKPure) oder einer *.apks
Datei (die Sie selbst mit SAI exportieren können) bereitstellen. Wenn Sie dies unter Linux tun, stellen Sie sicher, dass sowohl zip
als auch unzip
installiert sind.
Manchmal müssen Sie manuelle Änderungen an einer App vornehmen, damit sie funktioniert. In diesen Fällen ist die Option --wait
genau das Richtige für Sie. Wenn Sie es aktivieren, wartet apk-mitm
bevor es die App erneut kodiert, sodass Sie Änderungen an den Dateien im temporären Verzeichnis vornehmen können.
Wenn Sie mit verschiedenen Änderungen an einem APK experimentieren möchten, ist die Verwendung --wait
wahrscheinlich nicht die bequemste Option, da Sie dadurch gezwungen werden, jedes Mal von vorne anzufangen, wenn Sie es verwenden. In diesem Fall sollten Sie einen Blick auf APKLab werfen. Es handelt sich um eine Android-Reverse-Engineering-Workbench, die auf VS-Code aufbaut, apk-mitm
-Unterstützung bietet und es Ihnen ermöglichen sollte, viel schneller zu iterieren.
Auf einigen Geräten (z. B. Android TVs) können Sie möglicherweise kein neues Zertifikat zu den Stammzertifikaten des Systems hinzufügen. In diesen Fällen können Sie das Zertifikat Ihres Proxys trotzdem direkt zur Netzwerksicherheitskonfiguration der App hinzufügen, da dies auf jedem Gerät funktioniert. Sie können dies erreichen, indem Sie apk-mitm
ausführen und dabei das Flag --certificate
auf den Pfad des von Ihrem Proxy verwendeten Zertifikats ( .pem
oder .der
Datei) setzen.
Wenn die App Google Maps verwendet und die Karte nach dem Patchen nicht mehr funktioniert, ist der API-Schlüssel der App wahrscheinlich auf das Zertifikat des Entwicklers beschränkt. Sie müssen Ihren eigenen API-Schlüssel ohne Einschränkungen erstellen und apk-mitm
mit der Option --wait
ausführen, um den Wert com.google.android.geo.API_KEY
in der Datei AndroidManifest.xml
der App ersetzen zu können.
Wenn apk-mitm
beim Dekodieren oder Kodieren abstürzt, hängt das Problem wahrscheinlich mit Apktool zusammen. Überprüfen Sie ihre Probleme auf GitHub, um mögliche Problemumgehungen zu finden. Wenn Sie zufällig eine Apktool-Version finden, die von dem Problem nicht betroffen ist, können Sie apk-mitm
anweisen, diese zu verwenden, indem Sie den Pfad seiner JAR-Datei über die Option --apktool
angeben.
MIT © Niklas Higi