Was macht mobile-ssl-pinning-bypass?
Mobile SSL-Pinning-Bypass-Playbook. Verwenden Sie dieses Playbook, um HTTPS-Traffic von mobilen Apps zu intercepten, die Zertifikat-Pinning, Public-Key-Pinning oder SPKI-Hash-Pinning auf Android und iOS implementieren, einschließlich React Native, Flutter und Xamarin.
Überblick
Dieses Playbook bietet eine schrittweise Anleitung zur Umgehung von SSL-Pinning in mobilen Android- und iOS-Anwendungen. Es deckt sowohl manuelle als auch automatisierte Methoden mit Tools wie Frida, Objection und Burp Suite ab.
Voraussetzungen
- Android-Gerät oder -Emulator (gerootet) oder iOS-Gerät (jailbroken)
- Installiertes Frida
- Objection (empfohlen für einfache Umgehung)
- Burp Suite oder ein anderer MITM-Proxy
Anleitung zur Umgehung
Schritt 1: Proxy einrichten
- Konfigurieren Sie Ihren MITM-Proxy (z. B. Burp Suite) auf Ihrem Host-Rechner.
- Richten Sie die Proxy-Einstellungen des Geräts so ein, dass der Traffic über Ihren Host geleitet wird.
- Importieren Sie das CA-Zertifikat des Proxys auf dem Gerät (siehe Dokumentation des Proxys).
Schritt 2: Pinning umgehen (Android)
Methode A: Objection (empfohlen)
objection -g <app.package.name> explore
Führen Sie dann innerhalb der Objection-Shell aus:
android sslpinning disable
Methode B: Frida-Skript
frida -U -f <app.package.name> -l ssl_pinning_bypass.js --no-pause
Beispiel für ein Frida-Skript (ssl_pinning_bypass.js):
Java.perform(function() {
var ArrayList = Java.use('java.util.ArrayList');
var TrustManagerImpl = Java.use('com.android.org.conscrypt.TrustManagerImpl');
TrustManagerImpl.verifyChain.implementation = function(untrustedChain, trustAnchorChain, host, clientAuth, ocspData, tlsSctData) {
return untrustedChain;
};
});
Schritt 3: Pinning umgehen (iOS)
Methode A: Objection
objection -g <app.bundle.id> explore
Innerhalb der Objection-Shell:
ios sslpinning disable
Methode B: Frida-Skript
frida -U -f <app.bundle.id> -l ios_ssl_bypass.js --no-pause
Beispiel für ein Frida-Skript (ios_ssl_bypass.js):
if (ObjC.available) {
var SSLPinningTrustEvaluator = ObjC.classes.SSLPinningTrustEvaluator;
if (SSLPinningTrustEvaluator) {
SSLPinningTrustEvaluator['- evaluateTrust:forHost:'].implementation = function(self, trust, host) {
return true;
};
}
}
Bekannte Einschränkungen
- Funktioniert möglicherweise nicht bei Anwendungen, die Zertifikat-Pinning auf nativer Ebene implementieren (z. B. mit NDK- oder C++-Bibliotheken).
- Bei Flutter-Apps mit aktiviertem SSL-Pinning ist möglicherweise ein zusätzlicher manueller Eingriff erforderlich.
- iOS-Apps, die auf
WKWebViewoderNSURLSessionmit Delegatmethoden basieren, erfordern möglicherweise eine benutzerdefinierte Frida-Hook-Implementierung.
Fehlerbehebung
- Problem: Traffic wird nicht im Proxy angezeigt.
- Lösung: Stellen Sie sicher, dass das CA-Zertifikat des Proxys auf dem Gerät als vertrauenswürdiges CA-Zertifikat installiert ist.
- Problem: Objection kann die App nicht finden.
- Lösung: Verwenden Sie
frida-ps -U, um den Paketnamen der App zu überprüfen.
- Lösung: Verwenden Sie