So fangen Sie HTTPS-Traffic auf Android ohne Zertifikate und manuelle Proxy-Konfiguration ab
Jeder Android-Entwickler hat irgendwann mindestens einen halben Arbeitstag damit verbracht, einen Netzwerk-Debugger einzurichten. Das Szenario ist immer dasselbe: Sie müssen sehen, was die App an das Backend sendet, und stattdessen erhalten Sie SSLHandshakeException.
Dann beginnt das Ritual. Zuerst generieren Sie ein selbstsigniertes CA-Zertifikat. Dann versuchen Sie, es im vertrauenswürdigen Zertifikatspeicher Ihres Testgeräts zu installieren. Ab Android 7.0 (API 24) ignoriert das System standardmäßig Benutzerzertifikate, daher müssen Sie network_security_config.xml ändern, trust-anchors für Debug-Builds konfigurieren und das APK neu erstellen. Wenn Ihr Projekt SSL-Pinning konfiguriert hat oder Sie auf Android 14 testen, wo die Systemzertifikatsbehandlung noch weiter eingeschränkt wurde, wird eine einfache Antwort-Header-Prüfung zu einer separaten Entwicklungsaufgabe.
Die atlantis-android-Bibliothek vom Proxyman-Team löst dieses Problem radikal: Sie macht die Proxy-Konfiguration und das Bearbeiten der Systemzertifikate des Geräts überflüssig.
Was steckt hinter Atlantis
Traditionelle Tools wie Charles, Fiddler oder Proxyman selbst arbeiten typischerweise mit einem Man-in-the-Middle (MitM)-Schema. Das Gerät leitet den gesamten Datenverkehr an die IP-Adresse des Computers weiter, und die Desktop-Anwendung fängt die Anfragen ab, entschlüsselt sie mit ihrem eigenen Zertifikat und leitet sie weiter. Genau deshalb werden Zertifikats-Vertrauensprobleme und Wi-Fi-Proxy-Konfiguration problematisch.
Atlantis funktioniert anders. Es ist eine kompakte Kotlin-Bibliothek, die direkt als Netzwerk-Client-Interceptor in den Debug-Build der App eingebettet wird. Der Interceptor liest Request- und Response-Parameter genau in dem Moment, in dem die App sie bereits erstellt oder entschlüsselt hat. Die Bibliothek serialisiert diese Daten dann, komprimiert sie über GZIP und überträgt sie direkt an die Proxyman-App auf macOS über einen separaten lokalen Socket.
Das Ergebnis ist ein detailliertes Protokoll der Netzwerkaktivität ohne jegliche Eingriffe in die Android-Einstellungen, ohne Manifest-Änderungen und ohne Zertifikats-Manipulation.
Was die Bibliothek kann
Atlantis deckt die meisten alltäglichen Netzwerk-Debugging-Aufgaben ab:
- Abfangen regulärer HTTP- und HTTPS-Anfragen direkt von OkHttp.
- Protokollierung von WebSocket-Events: Verbindungsaufbau, Nachrichten senden, eingehende Pakete und Sitzungsende.
- Vollständige Kompatibilität mit beliebten Netzwerk-Clients, einschließlich Retrofit 2.9+ und Apollo Kotlin 3.x/4.x.
- Automatische Erkennung einer laufenden Proxyman-Instanz im lokalen Netzwerk über Network Service Discovery (mDNS).
Wenn Sie das Projekt auf dem offiziellen Android-Emulator ausführen, kann die Bibliothek eine direkte Verbindung zum Host-Computer herstellen und die Netzwerkerkennung umgehen.
Integration in Ihr Projekt
Die Bibliothek erfordert Android mit API 26 (Android 8.0) oder höher, OkHttp Version 4.x oder 5.x und Kotlin Version 1.9 oder höher.
Fügen Sie zunächst das JitPack-Repository zu Ihrer settings.gradle.kts-Datei hinzu:
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven { url = uri("https://jitpack.io") }
}
}
Anschließend fügen Sie die Abhängigkeit zur build.gradle.kts Ihrer App hinzu. Am besten fügen Sie sie strikt über debugImplementation hinzu, um sicherzustellen, dass Debug-Code nicht in Release-Builds landet:
dependencies {
debugImplementation("com.github.ProxymanApp:atlantis-android:v1.0.0")
}
Die Bibliothek ist auch in Maven Central unter dem Artifact com.proxyman:atlantis-android:1.0.0 verfügbar.
Schnellstart
Die Integration dauert nur wenige Codezeilen. Initialisieren Sie zunächst Atlantis in Ihrer Application-Klasse:
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Atlantis.start(this)
}
}
}
Fügen Sie dann den Interceptor zu Ihrer OkHttpClient-Konfiguration hinzu:
val okHttpClient = OkHttpClient.Builder()
.addInterceptor(Atlantis.getInterceptor())
.build()
Wenn Sie Retrofit verwenden, übergeben Sie diese okHttpClient-Instanz an Retrofit.Builder(), und alle Anfragen erscheinen automatisch im Proxyman-Fenster.
Arbeit mit WebSocket
Wenn Ihre App WebSockets verwendet, reicht der Standard-OkHttp-Interceptor nicht aus, da Nachrichten innerhalb einer bereits geöffneten Verbindung übertragen werden. Für solche Fälle bietet die Bibliothek einen speziellen Wrapper für den Listener:
val originalListener = object : WebSocketListener() {
override fun onOpen(webSocket: WebSocket, response: Response) {
// обработка открытия
}
override fun onMessage(webSocket: WebSocket, text: String) {
// входящее сообщение
}
}
val wrappedListener = Atlantis.wrapWebSocketListener(originalListener)
okHttpClient.newWebSocket(request, wrappedListener)
Jetzt können Sie eingehende und ausgehende Frames in Echtzeit im Desktop-Client beobachten.
Was steckt drin
Der Quellcode der Bibliothek ist minimalistisch und unter der Apache 2.0-Lizenz open Source. Das Repository hat so gut wie keine schweren Drittanbieter-Abhängigkeiten.
Die Architektur besteht aus mehreren klaren Modulen:
AtlantisInterceptorundAtlantisWebSocketListenerfangen Daten auf der Ebene des Netzwerk-Stacks ab.GzipCompressionundBase64Utilsverpacken Request-Bodies und binäre Payloads und reduzieren so die Last auf dem Kommunikationskanal zwischen Telefon und Computer.NsdServiceDiscoveryist für die Erkennung des_proxyman._tcp-Dienstes im lokalen Netzwerk über die Android NSD API verantwortlich.Transporteröffnet eine TCP-Verbindung zur Desktop-Anwendung und leitet strukturierte Pakete weiter.
Dank der Datenverkehrskomprimierung hat das Debugging praktisch keine Auswirkungen auf die Leistung der App.
Einschränkungen, die Sie kennen sollten
Bevor Sie die Bibliothek integrieren, sollten Sie zwei Dinge berücksichtigen.
Erstens ist Atlantis an den Proxyman-Desktop-Client gebunden. Wenn Ihr Team daran gewöhnt ist, ausschließlich Wireshark oder Charles zu verwenden, können Sie die Daten nicht über diesen Interceptor dorthin weiterleiten.
Zweitens fängt die Bibliothek nur Datenverkehr von Clients ab, in denen Sie den Interceptor explizit hinzugefügt haben. Wenn ein Drittanbieter-SDK in Ihrer App Netzwerkaufrufe über seinen eigenen HttpURLConnection oder Cronet tätigt, sieht Atlantis diese Anfragen nicht. Für eine vollständige Analyse von Drittanbieter-Binärdateien müssen Sie weiterhin einen klassischen MitM-Proxy verwenden.
Lohnt es sich?
Wenn Ihre Hauptentwicklungsmaschine macOS verwendet und Sie bereits Proxyman zum Debuggen von iOS oder Backend einsetzen, spart atlantis-android viel Zeit. Sie vergessen für immer das Einrichten des Wi-Fi-Proxys auf Testtelefonen, das Zurücksetzen von Zertifikaten und das Ändern von network_security_config. Bauen Sie einfach ein Debug-APK, öffnen Sie die App auf Ihrem Telefon, und der gesamte Netzwerkaustausch erscheint sofort auf Ihrem Bildschirm.
Ähnliche Projekte
