
🤖 Un'applicazione CLI che prepara automaticamente i file APK Android per l'ispezione HTTPS
Un'applicazione CLI che prepara automaticamente i file APK Android per l'ispezione HTTPS
Ispezionare il traffico HTTPS di un'app mobile utilizzando un proxy è probabilmente il modo più semplice per capire come funziona. Tuttavia, con la Network Security Configuration introdotta in Android 7 e gli sviluppatori di app che cercano di prevenire attacchi MITM utilizzando certificate pinning, far funzionare un'app con un proxy HTTPS è diventato piuttosto noioso.
apk-mitm automatizza l'intero processo. Tutto ciò che devi fare è fornire un file APK e apk-mitm farà:
Puoi anche usare apk-mitm per modificare app utilizzando Android App Bundle e non è necessario il root del telefono.
Modificare il comportamento normale di un'app per aggirare funzionalità di sicurezza come il certificate pinning richiede o di modificare il codice sorgente dell'app prima di eseguirla o di "hooking" l'app mentre è in esecuzione per intercettare le chiamate alle funzioni.
apk-mitm sta attualmente adottando il primo approccio, modificando il codice dell'app disassemblando prima l'app con Apktool, apportando modifiche a diversi file, e poi riassemblandola (di nuovo con Apktool).
Questo approccio ha il vantaggio di non richiedere un dispositivo rooted, ma presenta anche diversi svantaggi. Il problema più grande è che le app non sono realmente progettate per essere disassemblate. Apktool cerca di farlo comunque, ma soprattutto con app grandi e complesse, spesso incontra problemi.
Un altro problema di questo approccio è che alcuni metodi di certificate pinning, come i controlli eseguiti all'interno di binari nativi (come nel caso di framework come Flutter), sono molto difficili o impossibili da aggirare. Per questo motivo, può essere utile provare altri approcci per app più complesse.
In particolare, vorrei evidenziare il progetto mitmproxy android-unpinner e gli script frida-interception-and-unpinning sottostanti di HTTP Toolkit. Il loro approccio applica patch a runtime utilizzando Frida, che è molto più potente ma significa anche che non può essere utilizzato o è più difficile da usare senza un dispositivo rooted.
Se hai una versione aggiornata di Node.js (14+) e Java (8+), puoi installare apk-mitm eseguendo:
npm install -g apk-mitm
Una volta installato, puoi eseguire questo comando per modificare un'app:
apk-mitm <path-to-apk>
La modifica di un file APK chiamato example.apk potrebbe assomigliare a questo:
$ apk-mitm example.apk
✔ Decoding APK file
✔ Modifying app manifest
✔ Replacing network security config
✔ Disabling certificate pinning
✔ Encoding patched APK file
✔ Signing patched APK file
Done! Patched APK: ./example-patched.apk
Ora puoi installare il file example-patched.apk sul tuo dispositivo Android e utilizzare un proxy come Charles o mitmproxy per osservare il traffico dell'app.
Puoi anche modificare app utilizzando Android App Bundle con apk-mitm fornendo un file *.xapk (ad esempio da APKPure) o un file *.apks (che puoi esportare tu stesso usando SAI). Se lo fai su Linux, assicurati che sia zip che unzip siano installati.
A volte è necessario apportare modifiche manuali a un'app per farla funzionare. In questi casi, l'opzione --wait è ciò di cui hai bisogno. Abilitandola, apk-mitm attenderà prima di ricodificare l'app, permettendoti di apportare modifiche ai file nella directory temporanea.
Se vuoi sperimentare diverse modifiche a un APK, allora usare --wait probabilmente non è l'opzione più comoda, poiché ti costringe a ricominciare da capo ogni volta. In questo caso potresti dare un'occhiata a APKLab. È un ambiente di reverse engineering per Android costruito su VS Code che viene fornito con il supporto di apk-mitm e dovrebbe permetterti di iterare molto più rapidamente.
Su alcuni dispositivi (come gli Android TV) potresti non essere in grado di aggiungere un nuovo certificato ai certificati radice di sistema. In questi casi puoi comunque aggiungere il certificato del tuo proxy direttamente alla Network Security Config dell'app poiché funzionerà su qualsiasi dispositivo. Puoi farlo eseguendo apk-mitm con l'opzione --certificate impostata sul percorso del certificato (file .pem o .der) utilizzato dal tuo proxy.
Se l'app utilizza Google Maps e la mappa è danneggiata dopo la modifica, probabilmente la chiave API dell'app è limitata al certificato dello sviluppatore. Dovrai creare la tua chiave API senza restrizioni ed eseguire apk-mitm con l'opzione --wait per poter sostituire il valore com.google.android.geo.API_KEY nel file AndroidManifest.xml dell'app.
Se apk-mitm si blocca durante la decodifica o la codifica, il problema è probabilmente legato ad Apktool. Controlla i loro problemi su GitHub per trovare possibili soluzioni alternative. Se trovi una versione di Apktool che non è affetta dal problema, puoi indicare a apk-mitm di usarla specificando il percorso del suo file JAR tramite l'opzione --apktool.
MIT © Niklas Higi