
Strumento di pre-analisi automatizzato per app Android che disassembla campioni, estrae proprietà tramite pattern matching configurabile e organizza l'output per accelerare l'analisi della reverse engineering e del malware.
DroidLysis è uno strumento di pre-analisi per app Android: esegue attività ripetitive e noiose che tipicamente faremmo all'inizio di qualsiasi reverse engineering. Disassembla il campione Android, organizza l'output in directory e cerca punti sospetti nel codice da esaminare. L'output aiuta il reverse engineer ad accelerare i primi passi dell'analisi.
DroidLysis può essere utilizzato su pacchetti Android (apk), eseguibili Dalvik (dex), file Zip (zip), file Rar (rar) o directory di file.
sudo apt-get install default-jre git python3 python3-pip unzip wget libmagic-dev libxml2-dev libxslt-dev
$ mkdir -p ~/softs
$ cd ~/softs
$ wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.9.3.jar
$ wget https://bitbucket.org/JesusFreke/smali/downloads/baksmali-2.5.2.jar
$ wget https://github.com/pxb1988/dex2jar/releases/download/v2.4/dex-tools-v2.4.zip
$ unzip dex-tools-v2.4.zip
$ rm -f dex-tools-v2.4.zip
Installare da Git in un ambiente virtuale Python (python3 -m venv, o ambienti virtuali pyenv ecc.).
$ python3 -m venv venv
$ source ./venv/bin/activate
(venv) $ pip3 install git+https://github.com/cryptax/droidlysis
In alternativa, puoi installare DroidLysis direttamente da PyPi (pip3 install droidlysis).
conf/general.conf. In particolare assicurati di modificare /home/axelle con le tue directory appropriate.[tools]
apktool = /home/axelle/softs/apktool_2.9.3.jar
baksmali = /home/axelle/softs/baksmali-2.5.2.jar
dex2jar = /home/axelle/softs/dex-tools-v2.4/d2j-dex2jar.sh
keytool = /usr/bin/keytool
...
python3 ./droidlysis3.py --help
Il file di configurazione è ./conf/general.conf (puoi passare a un altro file con l'opzione --config).
Qui si configura la posizione dei vari strumenti esterni (es. Apktool), il nome dei file di pattern
(per impostazione predefinita ./conf/smali.conf, ./conf/wide.conf, ./conf/arm.conf, ./conf/kit.conf) e il nome del
file di database (usato solo se si specifica --enable-sql)
Assicurati di specificare i percorsi corretti per gli strumenti di disassemblaggio, altrimenti DroidLysis non li troverà.
DroidLysis utilizza Python 3. Per avviarlo e ottenere le opzioni:
droidlysis --help
Ad esempio, testalo sull'APK di Signal:
droidlysis --input Signal-website-universal-release-6.26.3.apk --output /tmp --config /PERCORSO/DI/DROIDLYSIS/conf/general.conf

DroidLysis produce:
--output /tmp, l'analisi verrà scritta in /tmp/Signalwebsiteuniversalrelease4.52.4.apk-f3c7d5e38df23925dd0b2fe1f44bfa12bac935a6bc8fe3a485a4436d4487a290.droidlysis.db) contenente le proprietà rilevate.Ottieni l'uso con droidlysis --help
L'input può essere un file o una directory di file da esaminare ricorsivamente. DroidLysis sa come elaborare pacchetti Android, eseguibili DEX, ODEX e ARM, ZIP, RAR. DroidLysis non fallirà su altri tipi di file (a meno che non ci sia un bug...) ma non sarà in grado di comprendere il contenuto.
Quando si elaborano directory di file, è tipicamente molto utile spostare i campioni elaborati in un'altra posizione per sapere cosa è stato elaborato. Questo è gestito dall'opzione --movein. Inoltre, se sei interessato solo alle statistiche, dovresti probabilmente pulire la directory di output che contiene informazioni dettagliate per ogni campione: questa è l'opzione --clearoutput. Se desideri memorizzare tutte le statistiche in un database SQL, usa --enable-sql (vedi qui)
L'analisi di DroidLysis non ispeziona gli SDK di terze parti noti per impostazione predefinita, cioè per esempio non segnalerà alcuna attività sospetta da questi. Se vuoi che vengano ispezionati, usa l'opzione --no-kit-exception. Questo di solito crea molte più proprietà rilevate per il campione, poiché gli SDK (ad es. pubblicitari) utilizzano molte API segnalate (ottenere posizione GPS, ottenere IMEI, ottenere IMSI, HTTP POST...).
--output DIR)Questa directory contiene (quando applicabile):
AndroidManifest.xml leggibilereslib, risorse assetssmali (e altri)META-INF./unzippedclasses.dex (e altri), e convertito in jar: classes-dex2jar.jar, e decompresso in ./unjarredI seguenti file sono generati da DroidLysis:
autoanalysis.md: elenca ogni pattern rilevato da DroidLysis e dove.report.md: lo stesso di quanto stampato sulla consoleSe non hai bisogno che la directory di output del campione venga generata, usa l'opzione --clearoutput.
--import-exodus)$ python3 ./droidlysis3.py --import-exodus --verbose
Processing file: ./droidurl.pyc ...
DEBUG:droidconfig.py:Reading configuration file: './conf/./smali.conf'
DEBUG:droidconfig.py:Reading configuration file: './conf/./wide.conf'
DEBUG:droidconfig.py:Reading configuration file: './conf/./arm.conf'
DEBUG:droidconfig.py:Reading configuration file: '/home/axelle/.cache/droidlysis/./kit.conf'
DEBUG:droidproperties.py:Importing ETIP Exodus trackers from https://etip.exodus-privacy.eu.org/api/trackers/?format=json
DEBUG:connectionpool.py:Starting new HTTPS connection (1): etip.exodus-privacy.eu.org:443
DEBUG:connectionpool.py:https://etip.exodus-privacy.eu.org:443 "GET /api/trackers/?format=json HTTP/1.1" 200 None
DEBUG:droidproperties.py:Appending imported trackers to /home/axelle/.cache/droidlysis/./kit.conf
I tracker da Exodus che non sono presenti nel tuo kit.conf iniziale vengono aggiunti a ~/.cache/droidlysis/kit.conf. Confronta i 2 file e controlla quali tracker desideri aggiungere.
Se desideri elaborare una directory di campioni, probabilmente ti piacerà memorizzare le proprietà trovate da DroidLysis in un database, per analizzare e interrogare facilmente i risultati. In tal caso, usa l'opzione --enable-sql. Questo scaricherà automaticamente tutti i risultati in un database denominato droidlysis.db, in una tabella chiamata samples. Ogni voce nella tabella è relativa a un dato campione. Ogni colonna è una proprietà tracciata da DroidLysis.
Ad esempio, per recuperare tutti i nomi file, la somma SHA256 e le proprietà smali del database:
sqlite> select sha256, sanitized_basename, smali_properties from samples;
f3c7d5e38df23925dd0b2fe1f44bfa12bac935a6bc8fe3a485a4436d4487a290|Signalwebsiteuniversalrelease4.52.4.apk|{"send_sms": true, "receive_sms": true, "abort_broadcast": true, "call": false, "email": false, "answer_call": false, "end_call": true, "phone_number": false, "intent_chooser": true, "get_accounts": true, "contacts": false, "get_imei": true, "get_external_storage_stage": false, "get_imsi": false, "get_network_operator": false, "get_active_network_info": false, "get_line_number": true, "get_sim_country_iso": true,
...
Cosa rileva DroidLysis può essere configurato ed esteso nei file della directory ./conf.
Un pattern è composto da:
send_sms. Questo per nominare la proprietà. Deve essere univoco nel file .conf.;->sendTextMessage|;->sendMultipartTextMessage|SmsManager;->sendDataMessage. Nel file smali.conf, questa regexp viene abbinata al codice Smali. In questo caso particolare, ci sono 3 modi diversi per inviare messaggi SMS dal codice: sendTextMessage, sendMultipartTextMessage e sendDataMessage.[send_sms]
pattern=;->sendTextMessage|;->sendMultipartTextMessage|SmsManager;->sendDataMessage
description=Invio di messaggi SMS
Exodus Privacy mantiene un elenco di vari SDK che è interessante escludere nella nostra analisi tramite conf/kit.conf.
Aggiungi l'opzione --import_exodus alla riga di comando di droidlysis: questo analizzerà i tracker esistenti che Exodus Privacy conosce e che non sono ancora nel tuo kit.conf. Infine, aggiungerà tutti i nuovi tracker a ~/.cache/droidlysis/kit.conf.
Successivamente, potresti voler ordinare il tuo file kit.conf:
import configparser
import collections
import os
config = configparser.ConfigParser({}, collections.OrderedDict)
config.read(os.path.expanduser('~/.cache/droidlysis/kit.conf'))
# Ordina tutte le sezioni alfabeticamente
config._sections = collections.OrderedDict(sorted(config._sections.items(), key=lambda t: t[0] ))
with open('sorted.conf','w') as f:
config.write(f)
Questo script ti aiuta a cercare metodi nell'interfaccia JEB che contengono codice corrispondente al pattern smali e navigare facilmente a quelle funzioni. Quando carichi lo script e selezioni il file details.md tra i file di analisi di droidlysis, apparirà una casella di ricerca. Una volta spostata, puoi richiamare facilmente la finestra di ricerca usando la scorciatoia per l'esecuzione recente dello script.
script/DroidlysisSearch.py