
Um framework para extração automatizada de características estáticas e dinâmicas de aplicações Android
Esta é uma ferramenta para extrair características estáticas e dinâmicas de APKs Android. Ela combina diferentes ferramentas conhecidas de análise de aplicativos Android, como DroidBox, FlowDroid, Strace, AndroGuard ou análise do VirusTotal. Dado um diretório de origem contendo arquivos APK, o AndroPyTool aplica todas essas ferramentas para realizar análise pré-estática, estática e dinâmica e gera arquivos de características nos formatos JSON e CSV, além de permitir salvar todos os dados em um banco de dados MongoDB.
Para obter mais informações, você pode ler os dois artigos a seguir:
Martín, A., Lara-Cabrera, R., & Camacho, D. (2018). Detecção de malware Android através da fusão de características híbridas e classificadores ensemble: o framework AndroPyTool e o conjunto de dados OmniDroid. Information Fusion. DOI: 10.1016/j.inffus.2018.12.006
Martín, A., Lara-Cabrera, R., & Camacho, D. (2018). Uma nova ferramenta para análise estática e dinâmica de malware Android. In Data Science and Knowledge Engineering for Sensing Decision Support (pp. 509-516). World Scientific.
Por favor, se você usar esta ferramenta, cite os trabalhos acima em seus artigos.

Existem duas maneiras possíveis de instalar e usar o AndroPyTool.
MODO A - DOCKER: Baixar um contêiner Docker que contém todos os arquivos necessários. Esta é a opção recomendada, você pode ter o AndroPyTool funcionando em apenas dois passos.
MODO B - CÓDIGO FONTE: Instalar e configurar todas as bibliotecas necessárias e executar o código-fonte Python.
Um contêiner Docker foi construído para fornecer uma versão rápida e confiável do AndroPyTool. Para usar o AndroPyTool com Docker, você só precisa:
Instalar o Docker (se ainda não o fez). Siga as instruções aqui. Se você não estiver usando Ubuntu, mude para o Sistema Operacional correto.
Baixar o contêiner do Docker Hub:
$ docker pull alexmyg/andropytool
Executar o AndroPyTool lançando o contêiner:
$ docker run --volume=</CAMINHO/PASTA/COM/APKS/>:/apks alexmyg/andropytool -s /apks/ <ARGUMENTOS>
Você precisa substituir </CAMINHO/PASTA/COM/APKS/> por um caminho do seu host que contenha os APKs a serem analisados. O argumento "-s" deve ser fornecido como mostrado na linha acima, apontando para /apks/
NOTA 2: O AndroPyTool move seus arquivos APK para subpastas diferentes para gerar um diretório de trabalho organizado. Veja o esquema de estrutura de pastas.
Existem diferentes argumentos que podem ser fornecidos ao AndroPyTool:
-h: Mostra a mensagem de ajuda e sai.-all, --allsteps: Executa todas as etapas do AndroPyTool (Recomendado). Para obter um relatório do VirusTotal, o argumento -vt também deve ser fornecido, seguido por uma chave de API do VirusTotal. Se a opção -all não for fornecida, apenas a última etapa será executada, além dos argumentos fornecidos.-s PASTA_ORIGEM, --source PASTA_ORIGEM: Pasta contendo APKs a serem analisados. Todas as amostras devem incluir a extensão .apk. Se uma execução anterior do AndroPyTool foi interrompida, o diretório de trabalho anterior deve ser fornecido.-S, --single: Salvar análises individuais separadamente. Padrão: False.-f, --filter: Filtrar APKs válidos e inválidos (Recomendado).-vt CHAVE_API_VIRUSTOTAL, --virustotal CHAVE_API_VIRUSTOTAL: Analisar aplicativos com o serviço VirusTotal. Deve ser seguido por uma chave de API do VirusTotal.NOTA: Este procedimento foi testado apenas no 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. Você precisa instalar o Android SDK (vá para o próximo passo se já tiver) Os próximos passos permitirão instalar o Android SDK no modo Não-GUI:
Baixar e descompactar o Android SDK:
$ cd
$ wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz
$ tar -xvf android-sdk_r24.2-linux.tgz
Adicionar o Android SDK ao PATH (se você não usa Bash, por exemplo, prefere Zsh, lembre-se de modificar o arquivo correto). Para isso, adicione estas duas linhas ao seu arquivo ~/.bashrc:
export ANDROID_HOME=$HOME/android-sdk-linux/
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
Carregar as bibliotecas na sessão atual com:
$ source ~/.bashrc
2. Temos que instalar o pacote Android 16
Vamos instalar o Android 16, que é a versão suportada pelo DroidBox (a plataforma e a imagem do 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. Vamos baixar os repositórios
$ 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. Vamos preparar o DroidBox
$ chmod 744 AndroPyTool/DroidBox_AndroPyTool/*.sh
$ echo "no" | AndroPyTool/DroidBox_AndroPyTool/createDroidBoxDevice.sh
4. Vamos instalar as bibliotecas Python necessárias
virtualenv:
$ sudo pip install virtualenv
$ virtualenv droidbox_env
$ source droidbox_env/bin/activate
$ pip install -r AndroPyTool/requirements.txt
5. Agora podemos executar o AndroPyTool
$ cd AndroPyTool/
$ python androPyTool.py -s </CAMINHO/PASTA/COM/APKS/>
ENTRADA: Uma pasta contendo arquivos com extensão ".apk". SAÍDA: Uma estrutura de pastas seguindo este esquema:
/ --> pasta raiz
/samples/ --> amostras, originalmente na pasta raiz
/samples/BW/ --> amostras de benignware
/samples/MW/ --> amostras de malware
/invalid_apks/ --> APKs inválidos encontrados
/VT_analysis/ --> relatórios de análise do VirusTotal
/FlowDroid_outputs/ --> resultados do FlowDroid
/FlowDroid_processed/ --> resultados do FlowDroid processados
/DroidBox_outputs/ --> saídas brutas do DroidBox
/Dynamic/Droidbox/ --> análise do DroidBox em JSON
/Dynamic/Strace/ --> análise do Strace em CSV
/Features_files/ --> arquivos de características gerados com o AndroPyTool
-cl, --classify: Classificar aplicativos entre malware ou benignware com base nos relatórios do VirusTotal. O argumento --virustotal deve estar definido.-fw, --flowdroid: Executar o FlowDroid.-dr, --droidbox: Executar o DroidBox.-c, --cleanup: Realizar limpeza excluindo arquivos de trabalho temporários. Padrão: True-P INDICE_PACOTES, --packgeIndex INDICE_PACOTES: Arquivo TXT com todos os pacotes da API Android. Padrão: info/package_index.txt-C INDICE_CLASSES, --classIndex INDICE_CLASSES: Arquivo TXT com todas as classes da API Android. Padrão: info/class_index.txt-C INDICE_CLASSES, --classIndex INDICE_CLASSES: Arquivo TXT com todas as classes da API Android. Padrão: info/class_index.txt-SC INDICE_COMANDOS_SISTEMA, --systemCommandsIndex INDICE_COMANDOS_SISTEMA: Arquivo TXT com todos os Comandos do Sistema. Padrão: info/system_commands.txt-C INDICE_CLASSES, --classIndex INDICE_CLASSES: Arquivo TXT com todas as classes da API Android. Padrão: info/class_index.txt-mg URI_MONGODB, --mongodbURI URI_MONGODB: Exporta o relatório gerado para um banco de dados MongoDB. Requer endereço de conexão seguindo o esquema: localhost:27017-csv EXPORTCSV, --cexportCSV EXPORTCSV: Exporta o relatório gerado para um arquivo CSV. Apenas características estáticas são incluídas.--color: Permitir cores ao imprimir mensagens.--no-color: Não usar cores para imprimir mensagens.