
Un marco para la extracción automatizada de características estáticas y dinámicas de aplicaciones Android
Esta es una herramienta para extraer características estáticas y dinámicas de APKs de Android. Combina diferentes herramientas de análisis de aplicaciones Android conocidas como DroidBox, FlowDroid, Strace, AndroGuard o el análisis de VirusTotal. Dado un directorio fuente que contiene archivos APK, AndroPyTool aplica todas estas herramientas para realizar análisis preestáticos, estáticos y dinámicos y genera archivos de características en formatos JSON y CSV, y también permite guardar todos los datos en una base de datos MongoDB.
Para obtener más información, puedes leer los siguientes dos artículos:
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.
Por favor, si usas esta herramienta, cita los trabajos anteriores en tus artículos.

Hay dos formas posibles de instalar y usar AndroPyTool.
MODO A - DOCKER: Descargar un contenedor Docker que contiene todos los archivos necesarios. Esta es la opción recomendada, puedes tener AndroPyTool funcionando en solo dos pasos.
MODO B - CÓDIGO FUENTE: Instalar y configurar todas las bibliotecas necesarias y ejecutar el código fuente de Python.
Se ha construido un contenedor Docker para proporcionar una versión rápida y confiable de AndroPyTool. Para usar AndroPyTool con Docker solo necesitas:
Instalar Docker (si aún no lo has hecho). Sigue las instrucciones aquí. Si no estás usando Ubuntu, cambia al Sistema Operativo correcto.
Obtener el contenedor de Docker hub:
$ docker pull alexmyg/andropytool
Ejecutar AndroPyTool lanzando el contenedor:
$ docker run --volume=</PATH/TO/FOLDER/WITH/APKS/>:/apks alexmyg/andropytool -s /apks/ <ARGUMENTS>
Necesitas reemplazar </PATH/TO/FOLDER/WITH/APKS/> con una ruta de tu host que contenga los apks a analizar. El argumento "-s" debe proporcionarse como se muestra en la línea anterior, apuntando a /apks/
NOTA 2: AndroPyTool mueve tus archivos APK a diferentes subcarpetas para generar un directorio de trabajo organizado. Consulta el esquema de estructura de carpetas.
Hay diferentes argumentos que se pueden proporcionar a androPyTool:
-h: Muestra el mensaje de ayuda y sale.-all, --allsteps: Ejecuta todos los pasos de AndroPyTool (Recomendado). Para obtener un informe de VirusTotal, también se debe proporcionar el argumento -vt seguido de una clave API de VirusTotal. Si no se proporciona la opción -all, entonces solo se ejecuta el último paso más los argumentos proporcionados.-s SOURCE_FOLDER, --source SOURCE_FOLDER: Carpeta que contiene los APK a analizar. Todas las muestras deben incluir la extensión .apk. Si una ejecución anterior de AndroPyTool fue interrumpida, se debe proporcionar el directorio de trabajo anterior.-S, --single: Guardar análisis individuales por separado. Por defecto: Falso.-f, --filter: Filtrar APK válidos e inválidos (Recomendado).-vt VIRUSTOTAL_API_KEY, --virustotal VIRUSTOTAL_API_KEY: Analizar aplicaciones con el servicio VirusTotal. Debe ir seguido de una clave API de VirusTotal.NOTA: Este procedimiento solo ha sido probado en Ubuntu
0. Requisitos
$ 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. Necesitas instalar Android SDK (ve al siguiente paso si ya lo tienes) Los siguientes pasos te permitirán instalar Android SDK en modo No-GUI:
Descargar y descomprimir Android SDK:
$ cd
$ wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz
$ tar -xvf android-sdk_r24.2-linux.tgz
Agregar Android SDK al PATH (si no usas Bash, por ejemplo si prefieres Zsh, recuerda modificar el archivo correcto). Para ello, agrega estas dos líneas a tu archivo ~/.bashrc:
export ANDROID_HOME=$HOME/android-sdk-linux/
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
Cargar las bibliotecas en la sesión actual con:
$ source ~/.bashrc
2. Tenemos que instalar el paquete Android 16
Instalemos Android 16, que es la versión compatible con DroidBox (la plataforma y la imagen del sistema):
$ 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. Descarguemos los repositorios
$ 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. Preparemos DroidBox
$ chmod 744 AndroPyTool/DroidBox_AndroPyTool/*.sh
$ echo "no" | AndroPyTool/DroidBox_AndroPyTool/createDroidBoxDevice.sh
4. Instalemos las bibliotecas de Python requeridas
virtualenv:
$ sudo pip install virtualenv
$ virtualenv droidbox_env
$ source droidbox_env/bin/activate
$ pip install -r AndroPyTool/requirements.txt
5. Ahora podemos ejecutar AndroPyTool
$ cd AndroPyTool/
$ python androPyTool.py -s </PATH/TO/FOLDER/WITH/APKS/>
ENTRADA: Una carpeta que contiene archivos con extensión ".apk". SALIDA: Una estructura de carpetas que sigue este esquema:
/ --> carpeta raíz
/samples/ --> muestras, originalmente en la carpeta raíz
/samples/BW/ --> muestras de benignware
/samples/MW/ --> muestras de malware
/invalid_apks/ --> apks inválidos encontrados
/VT_analysis/ --> informes de análisis de VirusTotal
/FlowDroid_outputs/ --> resultados de flowdroid
/FlowDroid_processed/ --> resultados de flowdroid procesados
/DroidBox_outputs/ --> salidas sin procesar de DroidBox
/Dynamic/Droidbox/ --> análisis de Droidbox en JSON
/Dynamic/Strace/ --> análisis de Strace en CSV
/Features_files/ --> archivos de características generados con AndroPyTool
-cl, --classify: Clasificar aplicaciones entre malware o benignware basándose en los informes de VirusTotal. El argumento --virustotal debe estar configurado.-fw, --flowdroid: Ejecutar flowdroid.-dr, --droidbox: Ejecutar droidbox.-c, --cleanup: Realizar limpieza eliminando archivos temporales de trabajo. Por defecto: Verdadero.-P PACKAGEINDEX, --packgeIndex PACKAGEINDEX: Archivo TXT con todos los paquetes de la API de Android. Por defecto: info/package_index.txt-C CLASSINDEX, --classIndex CLASSINDEX: Archivo TXT con todas las clases de la API de Android. Por defecto: info/class_index.txt-C CLASSINDEX, --classIndex CLASSINDEX: Archivo TXT con todas las clases de la API de Android. Por defecto: info/class_index.txt-SC SYSTEMCOMMANDSINDEX, --systemCommandsIndex SYSTEMCOMMANDSINDEX: Archivo TXT con todos los comandos del sistema. Por defecto: info/system_commands.txt-C CLASSINDEX, --classIndex CLASSINDEX: Archivo TXT con todas las clases de la API de Android. Por defecto: info/class_index.txt-mg MONGODBURI, --mongodbURI MONGODBURI: Exporta el informe generado a una base de datos MongoDB. Requiere dirección de conexión siguiendo el esquema: localhost:27017-csv EXPORTCSV, --cexportCSV EXPORTCSV: Exporta el informe generado a un archivo CSV. Solo se incluyen características estáticas.--color: Permitir colores al imprimir mensajes.--no-color: No usar colores para imprimir mensajes.