
Un outil d'obfuscation automatique pour applications Android fonctionnant en mode boîte noire, prenant en charge des fonctionnalités d'obfuscation avancées et doté d'une architecture modulaire facilement extensible avec de nouvelles techniques
[!IMPORTANT] Ce projet est archivé et n'est plus maintenu.
Certaines des questions les plus courantes trouvent leurs réponses dans FAQ et dépannage.

Un outil d'obfuscation boîte noire pour les applications Android.
Obfuscapk est un outil Python modulaire pour obfusquer des applications Android sans avoir besoin de leur code source, car apktool est utilisé pour décompiler le fichier apk original et construire une nouvelle application, après avoir appliqué certaines techniques d'obfuscation sur le code smali décompilé, les ressources et le manifeste. L'application obfusquée conserve les mêmes fonctionnalités que l'originale, mais les différences sous le capot rendent parfois la nouvelle application très différente de l'originale (par exemple, pour les logiciels antivirus basés sur les signatures).
Obfuscapk ajoute la prise en charge des Android App Bundles (fichiers aab) en utilisant BundleDecompiler (voir #121). Pour utiliser cette nouvelle fonctionnalité, téléchargez la dernière version de BundleDecompiler disponible ici, enregistrez-la sous BundleDecompiler.jar dans un répertoire inclus dans PATH (par exemple, sous Ubuntu, /usr/local/bin ou /usr/bin) et assurez-vous que le drapeau exécutable est défini.
[!IMPORTANT] BundleDecompiler ne fonctionne pas encore sous Windows, donc l'obfuscation des App Bundles n'est pas prise en charge par Obfuscapk sur la plateforme Windows. De plus, la prise en charge des App Bundles est encore en développement précoce, donc si vous rencontrez des problèmes ou si vous souhaitez nous aider à améliorer, veuillez consulter contribuer.
Plus de détails sur Obfuscapk peuvent être trouvés dans l'article "Obfuscapk: An open-source black-box obfuscation tool for Android apps". Vous pouvez citer l'article comme suit :```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" }
## ❱ Démo

## ❱ Architecture

Obfuscapk est conçu pour être modulaire et facile à étendre, il est donc construit en utilisant un
[système de plugins](https://github.com/tibonihoo/yapsy). Par conséquent, chaque obfuscateur est
un plugin qui hérite d'une
[classe de base](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscator_category.py)
abstraite et doit implémenter la méthode `obfuscate`. Lorsque l'outil commence à traiter un nouveau
fichier d'application Android, il crée un
[objet d'obfuscation](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscation.py)
pour stocker toutes les informations nécessaires (par exemple, l'emplacement du code `smali` décompilé)
et l'état interne des opérations (par exemple, la liste des obfuscateurs déjà utilisés).
Ensuite, l'objet d'obfuscation est passé, en tant que paramètre à la méthode `obfuscate`, à tous
les plugins/obfuscateurs actifs (en séquence) pour être traités et modifiés. La liste et
l'ordre des plugins actifs sont spécifiés via les [options de ligne de commande](#-usage).
L'outil est facilement extensible avec de nouveaux obfuscateurs : il suffit d'ajouter le code source
implémentant la technique d'obfuscation et les métadonnées du plugin (un
fichier `<obfuscator-name>.obfuscator`) dans le répertoire
[`src/obfuscapk/obfuscators`](https://github.com/ClaudiuGeorgiu/Obfuscapk/tree/master/src/obfuscapk/obfuscators)
(prenez un obfuscateur existant simple comme
[`Nop`](https://github.com/ClaudiuGeorgiu/Obfuscapk/blob/master/src/obfuscapk/obfuscators/nop/nop.py)
comme exemple de départ). L'outil détectera automatiquement le nouveau plugin, donc aucune
configuration supplémentaire n'est nécessaire (le nouveau plugin sera traité comme tous les autres
plugins fournis avec l'outil).
## ❱ Installation
Il existe deux façons d'obtenir une copie fonctionnelle d'Obfuscapk sur votre propre ordinateur : soit
en [utilisant Docker](#docker-image), soit en [utilisant directement le code source](#from-source)
dans un environnement `Python 3`. Dans les deux cas, la première chose à faire est d'obtenir une copie
locale de ce dépôt, alors ouvrez un terminal dans le répertoire où vous souhaitez enregistrer
le projet et clonez le dépôt :```Shell
$ git clone https://github.com/ClaudiuGeorgiu/Obfuscapk.git
C'est la méthode recommandée pour installer Obfuscapk, car la seule condition est d'avoir une version récente de Docker installée :```Shell $ docker --version Docker version 20.10.21, build baeda1f
#### Image officielle Docker Hub
L'[image officielle Docker Obfuscapk](https://hub.docker.com/r/claudiugeorgiu/obfuscapk) est disponible sur Docker Hub (construite automatiquement à partir de ce dépôt) :```Shell
$ # Download the Docker image.
$ docker pull claudiugeorgiu/obfuscapk
$ # Give it a shorter name.
$ docker tag claudiugeorgiu/obfuscapk obfuscapk
Si vous avez téléchargé l'image officielle depuis Docker Hub, vous êtes prêt à utiliser l'outil, alors
consultez les instructions d'utilisation, sinon exécutez la commande
suivante dans le répertoire précédemment créé Obfuscapk/src/ (le dossier contenant le
Dockerfile) pour construire l'image 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 .
Lorsque l'image Docker est prête, effectuez un test rapide pour vérifier que tout a été installé correctement :```Shell
$ docker run --rm -it obfuscapk --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...
Obfuscapk est maintenant prêt à être utilisé, voir les instructions d'utilisation pour plus d'informations.