
Script Frida per riscrivere le applicazioni mobili in fase di esecuzione per intercettare direttamente (MitM) tutto il traffico HTTPS
Parte di HTTP Toolkit: strumenti potenti per creare, testare e fare debug di HTTP(S)
Questa repository contiene script Frida progettati per fare tutto il necessario per l'intercettazione HTTPS MitM completamente automatizzata su dispositivi mobili.
Questo set di script può essere usato tutto insieme, per gestire l'intercettazione, gestire la fiducia dei certificati e disabilitare il certificate pinning e i controlli di trasparenza, per l'intercettazione MitM del traffico HTTP(S) su Android e iOS, oppure possono essere usati e modificati indipendentemente per hookare solo funzionalità specifiche.
Gli script possono gestire automaticamente:
-----BEGIN CERTIFICATE-----. Puoi aprirlo con un editor di testo per vedere ed estrarre questo contenuto.config.js e aggiungi questi dettagli:
CERT_PEM: il tuo certificato CA in formato PEM.PROXY_PORT: la porta del proxyPROXY_HOST: l'indirizzo del tuo proxy, dalla prospettiva del tuo dispositivo (oppure usa adb reverse tcp:$PORT tcp:$PORT per inoltrare la porta tramite ADB e usa 127.0.0.1 come host)frida-server pertinente da github.com/frida/frida, estrailo, esegui adb push sul tuo dispositivo e poi eseguilo con i seguenti 4 comandi: , , , .-----BEGIN CERTIFICATE-----. Puoi aprirlo con un editor di testo per vedere ed estrarre questo contenuto.config.js e aggiungi questi dettagli:
CERT_PEM: il tuo certificato CA in formato PEM.PROXY_PORT: la porta del proxyPROXY_HOST: l'indirizzo del tuo proxy, dalla prospettiva del tuo dispositivohttps://build.frida.re come fonte del pacchetto.frida-ps -Uai sul tuo computer per confermare che tutto funzioni correttamente.frida-ps -Uai (per un test rapido, prova a usare github.com/httptoolkit/ios-ssl-pinning-demo - l'id è )I comandi sopra usano tutti gli script pertinenti, ma in generale puoi usare qualsiasi sottoinsieme desideri, anche se in quasi tutti i casi vorrai includere config.js come primo script (questo definisce alcune variabili usate dagli altri script).
Ad esempio, per fare solo l'unpinning su Android, gestendo altrove la configurazione di proxy e certificati e senza fallback per l'offuscamento, potresti semplicemente eseguire:
frida -U \
-l ./config.js \
-l ./android/android-certificate-unpinning.js
-f $PACKAGE_ID
Ogni script include una documentazione dettagliata su cosa fa e come funziona in una grande sezione di commenti all'inizio. Gli script sono:
config.js
Questo definisce le variabili usate dagli altri script:
CERT_PEM - il certificato CA aggiuntivo da considerare attendibile, in formato PEMPROXY_HOST - l'indirizzo IP (IPv4) del server proxy da usare (non richiesto se stai solo facendo unpinning)PROXY_PORT - la porta del server proxy da usare (non richiesto se stai solo facendo unpinning)DEBUG_MODE - il valore predefinito è false, ma impostarlo a true abiliterà un sacco di output aggiuntivo che può essere utile per il debug e il reverse engineering di eventuali problemi.BLOCK_HTTP3 - il valore predefinito è true, che blocca HTTP/3 eliminando tutte le connessioni UDP verso la porta 443.Questo dovrebbe essere elencato nella riga di comando prima di qualsiasi altro script.
native-connect-hook.js
Cattura direttamente tutto il traffico di rete, instradando tutte le connessioni verso l'host e la porta del proxy configurati.
Questo è un hook di basso livello che si applica a le connessioni di rete. Ciò garantisce che tutte le connessioni vengano forzatamente reindirizzate al server proxy di destinazione, anche quelle che ignorano le impostazioni del proxy o effettuano altre connessioni socket grezze, e blocca anche le connessioni HTTP/3 se abilitato.
Questi script fanno parte di un progetto HTTP Toolkit più ampio, finanziati tramite il NGI Zero Entrust Fund, istituito da NLnet con il supporto finanziario del programma Next Generation Internet della Commissione Europea. Scopri di più sulla pagina del progetto NLnet.
adb shellsuchmod +x /.../frida-server/.../frida-serveradb devices) prima di eseguire i comandi. Nota che Frida verrà eseguito sul dispositivo solo come root, che è ciò che su fornisce nell'esempio precedente, quando eseguito su un dispositivo rooted. Per verificare di essere root dopo aver eseguito su o simili, controlla che l'esecuzione di whoami nella shell stampi root.tech.httptoolkit.pinning_demo)config.js). Quali script usare dipende da te, ma per Android un buon comando con cui iniziare è:
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). Quali script usare dipende da te, ma per iOS un buon comando con cui iniziare è:
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
Questo hook si applica a libc e funziona per Android, Linux, iOS e molti altri ambienti correlati.
native-tls-hook.js
Modifica tutta la validazione TLS per le librerie basate su BoringSSL affinché considerino attendibile il tuo certificato CA configurato.
In particolare, questo hooka le API BoringSSL integrate su iOS, che è il modo normale con cui iOS gestisce la validazione dei certificati TLS (quindi questo è sufficiente per quasi tutta l'intercettazione HTTPS su iOS), ma è usato anche in alcuni altri casi sia su iOS che su Android.
Questo di fatto considera attendibile la tua CA per tutti i certificati e disabilita tutto il certificate pinning, la certificate transparency e altre restrizioni per la tua CA. Nota che, a differenza di molti altri hook Frida altrove, questo non disabilita completamente la validazione TLS (che è molto insicura). Invece, sovrascrive la validazione per garantire che tutte le connessioni che usano il tuo specifico certificato CA siano considerate attendibili, senza allentare la validazione per consentire l'intercettazione da parte di terzi.
android/
android-proxy-override.js
Sovrascrive le impostazioni del proxy Android per l'app di destinazione, garantendo che tutto il traffico conforme venga reindirizzato tramite il server proxy e intercettato.
android-system-certificate-injection.js
Modifica le API native di Android per garantire che tutti i trust store considerino attendibile di default il tuo certificato CA aggiuntivo, consentendo di catturare il traffico TLS cifrato.
android-certificate-unpinning.js
Modifica o disabilita molte comuni tecniche note per ulteriori restrizioni sui certificati, inclusi il certificate pinning (accettare solo un piccolo insieme di certificati riconosciuti, piuttosto che tutti i certificati considerati attendibili dal sistema) e la certificate transparency (validare che tutti i certificati usati siano stati registrati nei log pubblici dei certificati).
android-certificate-unpinning-fallback.js
Rileva i fallimenti di validazione dei certificati non gestiti e tenta di gestire casi sconosciuti non riconosciuti con patch di fallback generate automaticamente. Questo è più sperimentale e potrebbe essere leggermente imprevedibile, ma è molto utile per i casi offuscati e, in generale, risolverà i problemi di pinning (dopo un primo fallimento) o almeno evidenzierà il codice per ulteriore reverse engineering nell'output di log di Frida. Questo script condivide parte della logica con android-certificate-unpinning.js e non può essere usato da solo - se vuoi usare questo script, dovrai includere anche lo script di unpinning non-fallback.
android-disable-root-detection.js
Disabilita i comuni controlli di rilevamento root attraverso i layer nativi e Java per prevenire il rilevamento di dispositivi Android rooted.
Questo script intercetta l'accesso al file system, i comandi shell e le ricerche di pacchetti per indicatori di root noti (come su, Magisk e app correlate), e falsifica proprietà di sistema chiave (ro.secure, ro.debuggable, ecc.) per simulare un ambiente di produzione.
Blocca comportamenti sospetti come i controlli di esistenza dei file e l'esecuzione di comandi shell, aiutando a eludere il rilevamento nelle app che utilizzano sia controlli root standard che avanzati.
android-disable-flutter-certificate-pinning.js
Garantisce che le applicazioni basate su Flutter (che generalmente ignorano la configurazione dei certificati di sistema) considerino attendibile il tuo certificato CA, anche nella maggior parte dei casi di certificate pinning esplicito. Questo script rimane sperimentale per ora.
ios/
ios-connect-hook.js
Cattura direttamente tutto il traffico di rete iOS, instradando tutte le connessioni verso l'host e la porta del proxy configurati.
Questo è un hook di basso livello che si applica a tutte le connessioni di rete. Ciò garantisce che tutte le connessioni vengano forzatamente reindirizzate al server proxy di destinazione, anche quelle che ignorano le impostazioni del proxy o effettuano altre connessioni socket grezze.
ios-disable-detection.js
Disabilita il rilevamento del jailbreak di JailMonkey.
utilities/test-ip-connectivity.js
Probabilmente non vorrai usarlo normalmente come parte dell'intercettazione stessa, ma può essere molto utile come parte della configurazione.
Questo script ti permette di configurare un elenco di possibili indirizzi IP e una porta di destinazione, far testare al processo ogni indirizzo e inviare un messaggio al client Frida per il primo indirizzo raggiungibile fornito. Questo può essere utile per processi di configurazione automatizzati, se non sai quale indirizzo IP sia meglio usare per raggiungere il server proxy (il tuo computer) dal dispositivo di destinazione (il tuo telefono).