
Un framework pour l'extraction automatisée de caractéristiques statiques et dynamiques d'applications Android.
Cet outil permet d'extraire des caractéristiques statiques et dynamiques des APK Android. Il combine différents outils d'analyse d'applications Android bien connus tels que DroidBox, FlowDroid, Strace, AndroGuard ou l'analyse VirusTotal. À partir d'un répertoire source contenant des fichiers APK, AndroPyTool applique tous ces outils pour effectuer une analyse pré-statique, statique et dynamique, et génère des fichiers de caractéristiques aux formats JSON et CSV, et permet également de sauvegarder toutes les données dans une base de données MongoDB.
Pour obtenir plus d'informations, vous pouvez lire les deux articles suivants :
Martín, A., Lara-Cabrera, R., & Camacho, D. (2018). Android malware detection through hybrid features fusion and ensemble classifiers: the AndroPyTool framework and the OmniDroid dataset. Information Fusion. DOI: 10.1016/j.inffus.2018.12.006
Martín, A., Lara-Cabrera, R., & Camacho, D. (2018). A new tool for static and dynamic Android malware analysis. In Data Science and Knowledge Engineering for Sensing Decision Support (pp. 509-516). World Scientific.
Veuillez, si vous utilisez cet outil, citer les travaux ci-dessus dans vos articles.

Il y a deux façons possibles d'installer et d'utiliser AndroPyTool.
MODE A - DOCKER : Téléchargement d'un conteneur Docker qui contient tous les fichiers nécessaires. C'est l'option recommandée, vous pouvez avoir AndroPyTool opérationnel en seulement deux étapes.
MODE B - CODE SOURCE : Installation et configuration de toutes les bibliothèques nécessaires et exécution du code source Python.
Un conteneur Docker a été construit afin de fournir une version rapide et fiable d'AndroPyTool. Pour utiliser AndroPyTool avec Docker, vous avez simplement besoin de :
Installer Docker (si ce n'est pas déjà fait). Suivez les instructions ici. Si vous n'utilisez pas Ubuntu, adaptez à votre système d'exploitation.
Télécharger le conteneur depuis Docker Hub :
$ docker pull alexmyg/andropytool
Exécuter AndroPyTool en lançant le conteneur :
$ docker run --volume=</PATH/TO/FOLDER/WITH/APKS/>:/apks alexmyg/andropytool -s /apks/ <ARGUMENTS>
Vous devez remplacer </PATH/TO/FOLDER/WITH/APKS/> par un chemin de votre hôte contenant les APK à analyser. L'argument "-s" doit être fourni comme indiqué dans la ligne ci-dessus, pointant vers /apks/
REMARQUE 2 : AndroPyTool déplace vos fichiers APK vers différents sous-dossiers afin de générer un répertoire de travail organisé. Voir le schéma de structure des dossiers.
Il y a différents arguments qui peuvent être fournis à AndroPyTool :
-h : Affiche le message d'aide et quitte.-all, --allsteps : Exécute toutes les étapes d'AndroPyTool (Recommandé). Pour obtenir un rapport VirusTotal, l'argument -vt doit également être fourni suivi d'une clé API VirusTotal. Si l'option -all n'est pas fournie, seule la dernière étape est exécutée en plus des arguments fournis.-s SOURCE_FOLDER, --source SOURCE_FOLDER : Dossier contenant les APK à analyser. Tous les échantillons doivent avoir l'extension .apk. Si une exécution précédente d'AndroPyTool a été interrompue, le répertoire de travail précédent doit être fourni.-S, --single : Sauvegarder chaque analyse séparément. Par défaut : False.-f, --filter : Filtrer les APK valides et invalides (Recommandé).-vt VIRUSTOTAL_API_KEY, --virustotal VIRUSTOTAL_API_KEY : Analyser les applications avec le service VirusTotal. Doit être suivi d'une clé API VirusTotal.NOTE : Cette procédure n'a été testée que sous Ubuntu
0. Prérequis
$ sudo apt-get update
$ sudo apt-get install -y --no-install-recommends software-properties-common wget git lib32gcc1 lib32ncurses5 lib32stdc++6 lib32z1 libc6-i386 libgl1-mesa-dev python-pip python-dev gcc python-tk curl
$ sudo add-apt-repository ppa:webupd8team/java -y
$ sudo apt-get update
$ sudo echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
$ sudo apt-get install -y oracle-java8-installer
$ sudo apt-get install -y python-setuptools
$ sudo apt-get clean
1. Vous devez installer le SDK Android (passez à l'étape suivante si vous l'avez déjà) Les étapes suivantes vous permettront d'installer le SDK Android en mode non graphique :
Télécharger et décompresser le SDK Android :
$ cd
$ wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz
$ tar -xvf android-sdk_r24.2-linux.tgz
Ajouter le SDK Android au PATH (si vous n'utilisez pas Bash, par exemple vous préférez Zsh, pensez à modifier le fichier correct). Pour ce faire, ajoutez ces deux lignes à votre fichier ~/.bashrc :
export ANDROID_HOME=$HOME/android-sdk-linux/
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
Chargez les bibliothèques dans la session courante avec :
$ source ~/.bashrc
2. Nous devons installer le package Android 16
$ echo y | android update sdk --filter platform-tools --no-ui --force -a
$ echo y | android update sdk --filter tools --no-ui --force -a
$ echo y | android update sdk --filter android-16 --no-ui --force -a
$ echo y | android update sdk --filter sys-img-armeabi-v7a-android-16 --no-ui -a
3. Téléchargeons les dépôts
$ git clone --recursive https://github.com/alexMyG/AndroPyTool.git
$ wget https://github.com/alexMyG/AndroPyTool/releases/download/droidbox_images_patched/images_droidbox.zip
$ unzip -o images_droidbox.zip -d AndroPyTool/DroidBox_AndroPyTool/images
$ touch AndroPyTool/avclass/__init__.py
3. Préparons DroidBox
$ chmod 744 AndroPyTool/DroidBox_AndroPyTool/*.sh
$ echo "no" | AndroPyTool/DroidBox_AndroPyTool/createDroidBoxDevice.sh
4. Installons les bibliothèques Python requises
virtualenv :
$ sudo pip install virtualenv
$ virtualenv droidbox_env
$ source droidbox_env/bin/activate
$ pip install -r AndroPyTool/requirements.txt
5. Maintenant nous pouvons exécuter AndroPyTool
$ cd AndroPyTool/
$ python androPyTool.py -s </PATH/TO/FOLDER/WITH/APKS/>
ENTRÉE : Un dossier contenant des fichiers avec l'extension ".apk". SORTIE : Une structure de dossiers suivant ce schéma :
/ --> dossier racine
/samples/ --> échantillons, initialement dans le dossier racine
/samples/BW/ --> échantillons de logiciels bénins
/samples/MW/ --> échantillons de logiciels malveillants
/invalid_apks/ --> APK invalides trouvés
/VT_analysis/ --> rapports d'analyse VirusTotal
/FlowDroid_outputs/ --> résultats FlowDroid
/FlowDroid_processed/ --> résultats FlowDroid traités
/DroidBox_outputs/ --> sorties DroidBox brutes
/Dynamic/Droidbox/ --> analyse Droidbox en JSON
/Dynamic/Strace/ --> analyse Strace en CSV
/Features_files/ --> fichiers de caractéristiques générés avec AndroPyTool
-cl, --classify : Classifier les applications entre malware et logiciel bénin sur la base des rapports VirusTotal. L'argument --virustotal doit être défini.-fw, --flowdroid : Exécuter FlowDroid.-dr, --droidbox : Exécuter DroidBox.-c, --cleanup : Effectuer un nettoyage en supprimant les fichiers de travail temporaires. Par défaut : True.-P PACKAGEINDEX, --packgeIndex PACKAGEINDEX : Fichier TXT avec tous les packages de l'API Android. Par défaut : info/package_index.txt-C CLASSINDEX, --classIndex CLASSINDEX : Fichier TXT avec toutes les classes de l'API Android. Par défaut : info/class_index.txt-C CLASSINDEX, --classIndex CLASSINDEX : Fichier TXT avec toutes les classes de l'API Android. Par défaut : info/class_index.txt-SC SYSTEMCOMMANDSINDEX, --systemCommandsIndex SYSTEMCOMMANDSINDEX : Fichier TXT avec toutes les commandes système. Par défaut : info/system_commands.txt-C CLASSINDEX, --classIndex CLASSINDEX : Fichier TXT avec toutes les classes de l'API Android. Par défaut : info/class_index.txt-mg MONGODBURI, --mongodbURI MONGODBURI : Exporte le rapport généré vers une base de données MongoDB. Nécessite une adresse de connexion suivant le schéma : localhost:27017-csv EXPORTCSV, --cexportCSV EXPORTCSV : Exporte le rapport généré vers un fichier CSV. Seules les caractéristiques statiques sont incluses.--color : Autoriser les couleurs lors de l'affichage des messages.--no-color : Ne pas utiliser de couleurs pour afficher les messages.