
Uno strumento di offuscamento automatico per app Android che funziona in modalità black-box, supporta funzionalità avanzate di offuscamento e ha un'architettura modulare facilmente estensibile con nuove tecniche
[!IMPORTANT] Questo progetto è archiviato e non più mantenuto.
Alcune delle domande più comuni trovano risposta in FAQ e troubleshooting.

Uno strumento di offuscamento black-box per app Android.
Obfuscapk è uno strumento Python modulare per offuscare app Android senza bisogno del loro codice sorgente, poiché apktool viene utilizzato per decompilare il file apk originale e per costruire una nuova applicazione, dopo aver applicato alcune tecniche di offuscamento sul codice smali decompilato, sulle risorse e sul manifest. L'app offuscata mantiene la stessa funzionalità dell'originale, ma le differenze sotto il cofano talvolta rendono la nuova applicazione molto diversa dall'originale (ad esempio, per i software antivirus basati su firma).
Obfuscapk sta aggiungendo il supporto per gli Android App Bundle (file aab) utilizzando BundleDecompiler (vedi #121). Per utilizzare questa nuova funzionalità, scarica l'ultima versione di BundleDecompiler disponibile da qui, salvala come BundleDecompiler.jar in una directory inclusa in PATH (ad esempio, in Ubuntu, /usr/local/bin o /usr/bin) e assicurati che abbia il flag eseguibile impostato.
[!IMPORTANT] BundleDecompiler non funziona ancora su Windows, quindi l'offuscamento degli app bundle non è supportato da Obfuscapk sulla piattaforma Windows. Inoltre, il supporto per gli app bundle è ancora in fase di sviluppo iniziale, quindi se incontri problemi o desideri aiutarci a migliorare, consulta contribuire.
Maggiori dettagli su Obfuscapk sono disponibili nell'articolo "Obfuscapk: An open-source black-box obfuscation tool for Android apps". Puoi citare l'articolo come segue:```BibTeX @article{aonzo2020obfuscapk, title = "Obfuscapk: An open-source black-box obfuscation tool for Android apps", journal = "SoftwareX", volume = "11", pages = "100403", year = "2020", issn = "2352-7110", doi = "https://doi.org/10.1016/j.softx.2020.100403", url = "https://www.sciencedirect.com/science/article/pii/S2352711019302791", author = "Simone Aonzo and Gabriel Claudiu Georgiu and Luca Verderame and Alessio Merlo", keywords = "Android, Obfuscation, Program analysis" }
## ❱ Demo

## ❱ Architettura

Obfuscapk è progettato per essere modulare e facile da estendere, quindi è costruito usando un [sistema a plugin](https://github.com/tibonihoo/yapsy). Di conseguenza, ogni offuscatore è un plugin che eredita da una [classe base astratta](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscator_category.py) e deve implementare il metodo `obfuscate`. Quando lo strumento inizia a elaborare un nuovo file di applicazione Android, crea un [oggetto di offuscamento](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscation.py) per memorizzare tutte le informazioni necessarie (ad esempio, la posizione del codice `smali` decompilato) e lo stato interno delle operazioni (ad esempio, l'elenco degli offuscatori già utilizzati). Poi l'oggetto di offuscamento viene passato, come parametro al metodo `obfuscate`, a tutti i plugin/offuscatori attivi (in sequenza) per essere elaborato e modificato. L'elenco e l'ordine dei plugin attivi sono specificati tramite [opzioni da riga di comando](#-usage).
Lo strumento è facilmente estensibile con nuovi offuscatori: è sufficiente aggiungere il codice sorgente che implementa la tecnica di offuscamento e i metadati del plugin (un file `<obfuscator-name>.obfuscator`) nella directory [`src/obfuscapk/obfuscators`](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators) (prendi come esempio iniziale un offuscatore semplice come [`Nop`](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscators/nop/nop.py)). Lo strumento rileverà automaticamente il nuovo plugin, quindi non è necessaria alcuna ulteriore configurazione (il nuovo plugin verrà trattato come tutti gli altri plugin inclusi nello strumento).
## ❱ Installazione
Ci sono due modi per ottenere una copia funzionante di Obfuscapk sul tuo computer: o [usando Docker](#docker-image) o [usando direttamente il codice sorgente](#from-source) in un ambiente `Python 3`. In entrambi i casi, la prima cosa da fare è ottenere una copia locale di questo repository, quindi apri un terminale nella directory dove vuoi salvare il progetto e clona il repository:```Shell
$ git clone https://github.com/ClaudiuGeorgiu/Obfuscapk.git
Questo è il metodo consigliato per installare Obfuscapk, poiché l'unico requisito è avere una versione recente di Docker installata:```Shell $ docker --version Docker version 20.10.21, build baeda1f
#### Immagine ufficiale su Docker Hub
L'[immagine Docker ufficiale di Obfuscapk](https://hub.docker.com/r/claudiugeorgiu/obfuscapk)
è disponibile su Docker Hub (creata automaticamente da questo repository):```Shell
$ # Download the Docker image.
$ docker pull claudiugeorgiu/obfuscapk
$ # Give it a shorter name.
$ docker tag claudiugeorgiu/obfuscapk obfuscapk
Se hai scaricato l'immagine ufficiale da Docker Hub, sei pronto per usare lo strumento, quindi passa alle istruzioni per l'uso, altrimenti esegui il seguente comando nella directory Obfuscapk/src/ creata in precedenza (la cartella che contiene il Dockerfile) per costruire l'immagine Docker:```Shell
$ # Make sure to run the command in Obfuscapk/src/ directory.
$ # It will take some time to download and install all the dependencies.
$ docker build -t obfuscapk .
Quando l'immagine Docker è pronta, esegui un rapido test per verificare che tutto sia stato installato correttamente:```Shell
$ docker run --rm -it obfuscapk --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...
Obfuscapk è ora pronto per essere utilizzato, consulta le istruzioni d'uso per maggiori informazioni.