Als Android-Entwickler möchte ich den Netzwerkverkehr auf meinem Android-Gerät untersuchen. Für Ihre eigenen Apps gibt es viele Tools, die Ihnen helfen, den HTTP(s)-Verkehr zu debuggen. Aber wie kann man andere verschiedene Apps überwachen, wie z.B.: Youtube, Twitter, usw.?
Dieser Artikel hilft Ihnen dabei, indem er das Tool mitmproxy verwendet.
Kurz gesagt ist mitmproxy ein interaktiver Man-in-the-Middle-Proxy für HTTP und HTTPS mit einer Konsolenschnittstelle, und vor allem ist es kostenlos!
Sie können dieses Dokument lesen, um zu verstehen, wie es funktioniert.
Voraussetzungen
- Mitmproxy-Tool
- Android-Emulator mit Root-Berechtigung
Wichtiger Hinweis: Wenn Sie den Emulator erstellen, müssen Sie „(Google APIs)“ im Ziel (Android-Version) auswählen, wählen Sie nicht „(Google Play)“, sonst können Sie keinen adb-Root-Zugriff erhalten.
Idee
In Wirklichkeit installieren wir das mitmproxy CA-Zertifikat manuell als vom Benutzer hinzugefügte CA und fertig!
Unglücklicherweise ignorieren Apps seit Android 7 vom Benutzer hinzugefügte CAs, es sei denn, sie sind so konfiguriert, dass sie sie verwenden. Und die meisten Anwendungen entscheiden sich nicht explizit für die Verwendung von Benutzerzertifikaten. Daher müssen wir unser mitmproxy-CA-Zertifikat im Systemzertifikatspeicher als vertrauenswürdige CA platzieren.
Jetzt geht’s los!
Mitmproxy-Zertifikat erstellen
- Mitmproxy installieren
brew install mitmproxy
- Zertifikat generieren
mitmproxy
Zertifikat umbenennen
- Zertifikatsordner eingeben
cd ~/.mitmproxy/
- CA-Zertifikate werden in Android nach dem Namen ihres Hashes gespeichert, mit einer ‚0‘ als Erweiterung. Erzeugen Sie nun den Hash Ihres Zertifikats
openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer | head -1
- Zum Beispiel, die Ausgabe ist
hash_value.
Wir können nunmitmproxy-ca-cert.cer
nachhash_value.0
kopieren und unser Systemzertifikat ist bereit zur Verwendung
cp mitmproxy-ca-cert.cer hash_value.0
Zertifikat in den Systemzertifikatspeicher einfügen
- Eingeben Emulator-Ordner im Android SDK
cd .../Android/SDK/emulator/
- Liste der AVDs mit
emulator -list-avds
./emulator -list-avds
- Starten Sie Ihren Android-Emulator mit der Option
-writable-system
zum Schreiben auf/system
./emulator -avd <avd_name_here> -writable-system
- Starten Sie adb als root
adb root
- Hängen Sie die Systempartition als beschreibbar ein
adb shell "mount -o rw,remount /"
- Pushen Sie Ihr Zertifikat in den Systemzertifikatspeicher und setzen Sie die Dateiberechtigungen
adb push ~/.mitmproxy/hash_value.0 /system/etc/security/cacerts
adb shell "chmod 664 /system/etc/security/cacerts/hash_value.0"
- Starten Sie Ihren Emulator neu
adb reboot
Jetzt haben wir das CA-Zertifikat auf dem Emulator installiert.
Proxy auf dem Emulator einrichten
- Emulatoreinstellungen öffnen, manuellen Proxy hinzufügen mit Hostname: 127.0.0.1 und Port 8080
Starten Sie das Tool und sehen Sie den Zauber!
Sie können eines der drei Tools vom Terminal aus starten:
- mitmproxy -> gibt Ihnen eine interaktive TUI
- mitmdump -> gibt Ihnen eine einfache und schlichte Terminalausgabe
- mitmweb -> gibt Ihnen eine browserbasierte GUI
Zum Beispiel öffne ich die Youtube-App und überwache den Datenverkehr wie unten.
- Ausführen
mitmproxy
- Ausführen
mitmweb
um die API-Details zu sehen
Voila!