Android-Apps mittels mitmproxy debuggen

In manchen Fällen ist es ganz interessant zu wissen, welche Requests eine (Android) App denn eigentlich absetzt. Wie genau das funktioniert schauen wir uns in diesem Artikel nun zusammen an. 🙂

In meinem Fall ist es die Natede-App. Das Projekt, ein smarter Blumentopf 🌺, habe ich vor einiger Zeit bei Kickstarter unterstützt und vor kurzem auch – endlich! – erhalten. Leider wird hier aber (noch) keine offizielle/öffentliche API angeboten, hier versuche ich mehr über die App herauszufinden. Dazu aber dann später mehr in einem eigenen Artikel.

Also, los geht’s.

Was wird benötigt?

Am einfachsten ist es, das ganze in einem Emulator zu testen, erstmal laden wir uns also Android Studio herunter und installieren dieses, wenn noch nicht geschehen.
Zudem natürlich einen Proxy, ich nutze hier mitmproxy. Eine Alternative wäre beispielsweise Charles.

mitmproxy lässt sich am Mac beispielsweise ziemlich easy mit Homebrew installieren:

brew install mitmproxy

Schritt 1 – virtuelles Device anlegen

Nachdem die Requirements nun geklärt wären, legen wir los. Zuerst müssen wir uns ein virtuelles Android-Device anlegen. Hierzu öffnen wir nun Android Studio, starten damit den AVD-Manager und legen uns ein Device an.

Wie auf den Bildern zu sehen habe ich mich hier für ein Pixel 3 XL mit Android 9 Pie (API-Version 28) entschieden. Wichtig ist nur, dass ihr hier eine “Google APIs”-Version ohne den Play Store nutzt (sonst klappt später z. B. das adb root-Kommando nicht).

Schritt 2 – Android-Device vorbereiten

Da Apps seit Android 7 vom User hinzugefügte CAs ignorieren (außer, die App wird entsprechend angepasst, was uns ja – da wir nicht der Entwickler sind – nicht möglich ist), müssen wir ein eignes System-CA hinzufügen. Wie das geht ist auf der Seite von mitmproxy recht gut dokumentiert – dieser Anleitung könnt ihr gerne folgen.

Schritt 3 – Proxy starten und am Android-Emulator konfigurieren

Den Proxy könnt ihr nun über’s Terminal anstarten mit mitmproxy -p $port. Da ich aber eine WebGUI bevorzuge, wähle ich mitmweb:

$ mitmweb -p 8082
Web server listening at http://127.0.0.1:8081/
Proxy server listening at http://*:8082

Hier sehen wir nun, die WebGUI ist unter localhost:8081 erreichbar, der Proxy lauscht auf dem Port 8082. Dies konfigurieren wir nun in unserem Emulator, der ja bereits läuft. Hier dürcken wir einfach auf die 3 Punkte, um zu den Einstellungen zu kommen:

Das war’s!

Nachdem wir die Einstellungen gespeichert haben nutzt unser Gerät den Proxy und wir können mitlauschen. Öffnen wir nun beispielsweise unsere App oder surfen eine Webseite an, sehen wir diese Requests auf unserer mitmweb-GUI.

Um die App übrigens auf eurem virtuellem Gerät zu installieren könnt ihr euch die APK herunterladen – dafür gibt es verschiedene “APK Downloader”. Diese dann einfach per Drag & Drop “auf das Smartphone ziehen”, fertig. 🙂

Na dann, viel Spaß – da kann man sich jetzt erstmal ein Weilchen austoben 😀 Und wie gesagt, der Artikel zur Natede-App folgt. 👋

Möchtest Du dazu etwas sagen?