
Frida-Skripte, um mobile Anwendungen zur Laufzeit umzuschreiben und den gesamten HTTPS-Verkehr direkt per Man-in-the-Middle (MitM) abzufangen.
Teil von HTTP Toolkit: leistungsstarke Werkzeuge zum Erstellen, Testen & Debuggen von HTTP(S)
Dieses Repository enthält Frida-Skripte, die alles Notwendige für die vollautomatische HTTPS-MitM-Interception auf mobilen Geräten erledigen.
Diese Skriptsammlung kann komplett zusammen verwendet werden, um die Interception zu übernehmen, das Zertifikatsvertrauen zu verwalten und Zertifikats-Pinning- und Transparenzprüfungen zu deaktivieren – für die MitM-Interception von HTTP(S)-Verkehr auf Android und iOS. Alternativ können die Skripte unabhängig voneinander verwendet und angepasst werden, um nur bestimmte Funktionen zu hooken.
Die Skripte können automatisch Folgendes übernehmen:
-----BEGIN CERTIFICATE----- beginnen. Sie können es mit einem Texteditor öffnen, um diesen Inhalt zu sehen und zu extrahieren.config.js und fügen Sie diese Angaben hinzu:
CERT_PEM: Ihr CA-Zertifikat im PEM-Format.PROXY_PORT: der Port des ProxysPROXY_HOST: die Adresse Ihres Proxys aus Sicht Ihres Geräts (oder verwenden Sie adb reverse tcp:$PORT tcp:$PORT, um den Port über ADB weiterzuleiten, und verwenden Sie 127.0.0.1 als Host)frida-server von github.com/frida/frida herunter, entpacken Sie ihn, übertragen Sie ihn per adb push auf Ihr Gerät und führen Sie ihn dann mit den folgenden 4 Befehlen aus: , , , .-----BEGIN CERTIFICATE----- beginnen. Sie können es mit einem Texteditor öffnen, um diesen Inhalt zu sehen und zu extrahieren.config.js und fügen Sie diese Angaben hinzu:
CERT_PEM: Ihr CA-Zertifikat im PEM-Format.PROXY_PORT: der Port des ProxysPROXY_HOST: die Adresse Ihres Proxys aus Sicht Ihres Gerätshttps://build.frida.re als Paketquelle dient.frida-ps -Uai auf Ihrem Computer ausführen können, um zu bestätigen, dass dies korrekt funktioniert.frida-ps -Uai (für einen schnellen Test versuchen Sie github.com/httptoolkit/ios-ssl-pinning-demo – die ID lautet )Die obigen Befehle verwenden alle relevanten Skripte, aber Sie können grundsätzlich jede beliebige Teilmenge verwenden. In fast allen Fällen sollten Sie jedoch config.js als erstes Skript einbinden (dieses definiert einige Variablen, die von anderen Skripten verwendet werden).
Wenn Sie beispielsweise auf Android nur das Unpinning durchführen möchten, die Proxy- und Zertifikatskonfiguration anderweitig übernehmen und keine Verschleierungs-Fallbacks benötigen, können Sie einfach Folgendes ausführen:
frida -U \
-l ./config.js \
-l ./android/android-certificate-unpinning.js
-f $PACKAGE_ID
Jedes Skript enthält eine detaillierte Dokumentation darüber, was es tut und wie es funktioniert, in einem großen Kommentarbereich am Anfang. Die Skripte sind:
config.js
Dieses definiert Variablen, die von anderen Skripten verwendet werden:
CERT_PEM – das zusätzlich zu vertrauende CA-Zertifikat im PEM-FormatPROXY_HOST – die IP-Adresse (IPv4) des zu verwendenden Proxy-Servers (nicht erforderlich, wenn Sie nur Unpinning durchführen)PROXY_PORT – der Port des zu verwendenden Proxy-Servers (nicht erforderlich, wenn Sie nur Unpinning durchführen)DEBUG_MODE – standardmäßig false, aber wenn Sie dies auf true setzen, wird eine Menge zusätzlicher Output aktiviert, der beim Debuggen und Reverse-Engineering von Problemen nützlich sein kann.BLOCK_HTTP3 – standardmäßig true, wodurch HTTP/3 blockiert wird, indem alle UDP-Verbindungen zu Port 443 verworfen werden.Dieses sollte in der Befehlszeile vor allen anderen Skripten aufgeführt werden.
native-connect-hook.js
Erfasst den gesamten Netzwerkverkehr direkt und leitet alle Verbindungen zum konfigurierten Proxy-Host und -Port um.
Dies ist ein Low-Level-Hook, der auf Netzwerkverbindungen angewendet wird. Dadurch wird sichergestellt, dass alle Verbindungen zwangsweise zum Ziel-Proxy-Server umgeleitet werden, auch solche, die Proxy-Einstellungen ignorieren oder andere Raw-Socket-Verbindungen aufbauen, und blockiert außerdem HTTP/3-Verbindungen, sofern aktiviert.
Diese Skripte sind Teil eines umfassenderen HTTP-Toolkit-Projekts, das über den NGI Zero Entrust Fund finanziert wird. Dieser wurde von NLnet mit finanzieller Unterstützung des Programms Next Generation Internet der Europäischen Kommission eingerichtet. Weitere Informationen finden Sie auf der NLnet-Projektseite.
adb shellsuchmod +x /.../frida-server/.../frida-serveradb devices). Beachten Sie, dass Frida auf dem Gerät nur als Root läuft, was su im obigen Beispiel auf einem gerooteten Gerät ermöglicht. Um zu prüfen, ob Sie nach der Ausführung von su oder Ähnlichem Root sind, führen Sie whoami in der Shell aus – es sollte root ausgeben.tech.httptoolkit.pinning_demo)config.js). Welche Skripte Sie verwenden, liegt bei Ihnen, aber für Android ist dies ein guter Befehl für den Anfang:
frida -U \
-l ./config.js \
-l ./native-connect-hook.js \
-l ./native-tls-hook.js \
-l ./android/android-proxy-override.js \
-l ./android/android-system-certificate-injection.js \
-l ./android/android-certificate-unpinning.js \
-l ./android/android-certificate-unpinning-fallback.js \
-l ./android/android-disable-root-detection.js \
-f $PACKAGE_ID
com.httptoolkit.ios-pinning-democonfig.js). Welche Skripte Sie verwenden, liegt bei Ihnen, aber für iOS ist dies ein guter Befehl für den Anfang:
frida -U \
-l ./config.js \
-l ./ios/ios-connect-hook.js \
-l ./ios/ios-disable-detection.js \
-l ./native-tls-hook.js \
-l ./native-connect-hook.js \
-f $APP_ID
Dieser Hook greift auf libc zu und funktioniert unter Android, Linux, iOS und vielen anderen verwandten Umgebungen.
native-tls-hook.js
Modifiziert die gesamte TLS-Validierung für BoringSSL-basierte Bibliotheken, sodass Ihr konfiguriertes CA-Zertifikat als vertrauenswürdig eingestuft wird.
Bemerkenswerterweise hookt dieses Skript die integrierten BoringSSL-APIs unter iOS, was der normale Weg ist, wie iOS die TLS-Zertifikatsvalidierung durchführt (daher reicht dies für fast die gesamte iOS-HTTPS-Interception aus). Es wird jedoch auch in einigen anderen Fällen sowohl unter iOS als auch unter Android verwendet.
Dadurch wird Ihr CA-Zertifikat effektiv für alle Zertifikate als vertrauenswürdig eingestuft und sämtliches Zertifikats-Pinning, Certificate Transparency und andere Einschränkungen für Ihre CA werden deaktiviert. Beachten Sie, dass dies – anders als viele andere Frida-Hooks – die TLS-Validierung nicht vollständig deaktiviert (was sehr unsicher wäre). Stattdessen überschreibt es die Validierung, um sicherzustellen, dass alle Verbindungen, die Ihr spezifisches CA-Zertifikat verwenden, als vertrauenswürdig gelten, ohne die Validierung so weit zu lockern, dass Dritte abfangen können.
android/
android-proxy-override.js
Überschreibt die Android-Proxy-Einstellungen für die Ziel-App und stellt sicher, dass der gesamte wohlverhaltene Verkehr über den Proxy-Server umgeleitet und abgefangen wird.
android-system-certificate-injection.js
Modifiziert die nativen Android-APIs, um sicherzustellen, dass alle Vertrauensspeicher Ihrem zusätzlichen CA-Zertifikat standardmäßig vertrauen, sodass verschlüsselter TLS-Verkehr erfasst werden kann.
android-certificate-unpinning.js
Modifiziert oder deaktiviert viele gängige bekannte Techniken für zusätzliche Zertifikatseinschränkungen, einschließlich Zertifikats-Pinning (bei dem nur eine kleine Menge erkannter Zertifikate akzeptiert wird, statt aller auf dem System vertrauenswürdigen Zertifikate) und Certificate Transparency (bei dem validiert wird, dass alle verwendeten Zertifikate in öffentlichen Zertifikatsprotokollen registriert wurden).
android-certificate-unpinning-fallback.js
Erkennt nicht behandelte Zertifikatsvalidierungsfehler und versucht, unbekannte, nicht erkannte Fälle mit automatisch generierten Fallback-Patches zu behandeln. Dies ist eher experimentell und kann leicht unvorhersehbar sein, ist aber bei verschleierten Fällen sehr hilfreich und wird im Allgemeinen entweder Pinning-Probleme beheben (nach einem anfänglichen Fehlschlag) oder zumindest Code für weiteres Reverse-Engineering in der Frida-Logausgabe hervorheben. Dieses Skript teilt einen Teil seiner Logik mit android-certificate-unpinning.js und kann nicht eigenständig verwendet werden – wenn Sie dieses Skript verwenden möchten, müssen Sie auch das Nicht-Fallback-Unpinning-Skript einbinden.
android-disable-root-detection.js
Deaktiviert gängige Root-Erkennungsprüfungen über native und Java-Ebenen hinweg, um die Erkennung gerooteter Android-Geräte zu verhindern.
Dieses Skript fängt Dateisystemzugriffe, Shell-Befehle und Paketabfragen auf bekannte Root-Indikatoren (wie su, Magisk und verwandte Apps) ab und täuscht wichtige Systemeigenschaften (ro.secure, ro.debuggable usw.) vor, um eine Produktionsumgebung zu simulieren.
Es blockiert verdächtiges Verhalten wie Dateiexistenzprüfungen und die Ausführung von Shell-Befehlen und hilft so, der Erkennung in Apps zu entgehen, die sowohl standardmäßige als auch erweiterte Root-Prüfungen verwenden.
android-disable-flutter-certificate-pinning.js
Stellt sicher, dass Flutter-basierte Anwendungen (die die Systemzertifikatskonfiguration im Allgemeinen ignorieren) Ihrem CA-Zertifikat vertrauen, selbst in den meisten Fällen von explizitem Zertifikats-Pinning. Dieses Skript bleibt vorerst experimentell.
ios/
ios-connect-hook.js
Erfasst den gesamten iOS-Netzwerkverkehr direkt und leitet alle Verbindungen zum konfigurierten Proxy-Host und -Port um.
Dies ist ein Low-Level-Hook, der auf alle Netzwerkverbindungen angewendet wird. Dadurch wird sichergestellt, dass alle Verbindungen zwangsweise zum Ziel-Proxy-Server umgeleitet werden, auch solche, die Proxy-Einstellungen ignorieren oder andere Raw-Socket-Verbindungen aufbauen.
ios-disable-detection.js
Deaktiviert die JailMonkey-Jailbreak-Erkennung.
utilities/test-ip-connectivity.js
Normalerweise möchten Sie dies wahrscheinlich nicht als Teil der Interception selbst verwenden, aber es kann bei der Einrichtung Ihrer Konfiguration sehr nützlich sein.
Mit diesem Skript können Sie eine Liste möglicher IP-Adressen und einen Zielport konfigurieren. Der Prozess testet dann jede Adresse und sendet für die erste erreichbare angegebene Adresse eine Nachricht an den Frida-Client. Dies kann für automatisierte Konfigurationsprozesse nützlich sein, wenn Sie nicht wissen, welche IP-Adresse am besten geeignet ist, um vom Zielgerät (Ihrem Telefon) aus den Proxy-Server (Ihren Computer) zu erreichen.