
Automatisiertes Voranalyse-Tool für Android-Apps, das Samples disassembliert, Eigenschaften über konfigurierbare Mustererkennung extrahiert und die Ausgabe für beschleunigte Reverse-Engineering- und Malware-Analyse organisiert.
DroidLysis ist ein Voranalyse-Tool für Android-Apps: es führt repetitive und langweilige Aufgaben aus, die wir typischerweise zu Beginn einer Reverse Engineering durchführen. Es disassembliert die Android-Probe, organisiert die Ausgabe in Verzeichnissen und sucht nach verdächtigen Stellen im Code, die es zu untersuchen gilt. Die Ausgabe hilft dem Reverse Engineer, die ersten Schritte der Analyse zu beschleunigen.
DroidLysis kann für Android-Pakete (apk), Dalvik-Ausführbare (dex), Zip-Dateien (zip), Rar-Dateien (rar) oder Dateiverzeichnisse verwendet werden.
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
Installieren Sie aus Git in einer Python-Virtual-Umgebung (python3 -m venv, oder pyenv virtual environments etc.).
$ python3 -m venv venv
$ source ./venv/bin/activate
(venv) $ pip3 install git+https://github.com/cryptax/droidlysis
Alternativ können Sie DroidLysis direkt von PyPi installieren (pip3 install droidlysis).
conf/general.conf. Stellen Sie insbesondere sicher, dass Sie /home/axelle durch Ihre entsprechenden Verzeichnisse ersetzen.[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
Die Konfigurationsdatei ist ./conf/general.conf (Sie können mit der Option --config zu einer anderen Datei wechseln). Hier konfigurieren Sie den Speicherort verschiedener externer Werkzeuge (z.B. Apktool), die Namen der Mustereinstellungen (standardmäßig ./conf/smali.conf, ./conf/wide.conf, ./conf/arm.conf, ./conf/kit.conf) und den Namen der Datenbankdatei (nur verwendet, wenn Sie --enable-sql angeben). Achten Sie darauf, die korrekten Pfade für die Disassemblierungswerkzeuge anzugeben, sonst findet DroidLysis sie nicht.
DroidLysis verwendet Python 3. Um es zu starten und Optionen zu erhalten:
droidlysis --help
Testen Sie es zum Beispiel auf der Signal-APK:
droidlysis --input Signal-website-universal-release-6.26.3.apk --output /tmp --config /PFAD/ZU/DROIDLYSIS/conf/general.conf

DroidLysis gibt aus:
--output /tmp setzen, wird die Analyse nach /tmp/Signalwebsiteuniversalrelease4.52.4.apk-f3c7d5e38df23925dd0b2fe1f44bfa12bac935a6bc8fe3a485a4436d4487a290 geschrieben.droidlysis.db), die die erkannten Eigenschaften enthält.Erhalten Sie die Verwendung mit droidlysis --help
Die Eingabe kann eine Datei oder ein Verzeichnis von Dateien sein, das rekursiv durchsucht wird. DroidLysis kann Android-Pakete, DEX-, ODEX- und ARM-Ausführbare, ZIP, RAR verarbeiten. DroidLysis wird bei anderen Dateitypen nicht fehlschlagen (es sei denn, es gibt einen Fehler...), aber den Inhalt nicht verstehen können.
Bei der Verarbeitung von Dateiverzeichnissen ist es typischerweise sehr hilfreich, verarbeitete Proben an einen anderen Ort zu verschieben, um zu wissen, was verarbeitet wurde. Dies wird durch die Option --movein geregelt. Wenn Sie nur an Statistiken interessiert sind, sollten Sie wahrscheinlich das Ausgabeverzeichnis leeren, das detaillierte Informationen zu jeder Probe enthält: dies ist die Option --clearoutput. Wenn Sie alle Statistiken in einer SQL-Datenbank speichern möchten, verwenden Sie --enable-sql (siehe hier)
DroidLysis' Analyse überprüft standardmäßig keine bekannten SDKs von Drittanbietern, d.h. sie wird z.B. keine verdächtigen Aktivitäten von diesen melden. Wenn Sie möchten, dass diese überprüft werden, verwenden Sie die Option --no-kit-exception. Dies erzeugt in der Regel viel mehr erkannte Eigenschaften für die Probe, da SDKs (z.B. Werbung) viele markierte APIs verwenden (GPS-Standort abrufen, IMEI abrufen, IMSI abrufen, HTTP POST...).
--output DIR)Dieses Verzeichnis enthält (sofern zutreffend):
AndroidManifest.xmlreslib, Anlagen assetssmali (und andere)META-INF./unzippedclasses.dex (und andere), und nach jar konvertiert: classes-dex2jar.jar, und entpackt in ./unjarredDie folgenden Dateien werden von DroidLysis erstellt:
autoanalysis.md: listet jedes von DroidLysis erkannte Muster und dessen Fundort auf.report.md: entspricht dem, was auf der Konsole ausgegeben wurdeWenn Sie nicht benötigen, dass das Beispiel-Ausgabeverzeichnis erstellt wird, verwenden Sie die Option --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
Tracker von Exodus, die nicht in Ihrer ursprünglichen kit.conf vorhanden sind, werden an ~/.cache/droidlysis/kit.conf angehängt. Vergleichen Sie die 2 Dateien und prüfen Sie, welche Tracker Sie hinzufügen möchten.
Wenn Sie ein Verzeichnis mit Proben verarbeiten möchten, werden Sie wahrscheinlich die von DroidLysis gefundenen Eigenschaften in einer Datenbank speichern wollen, um die Ergebnisse leicht parsen und abfragen zu können. Verwenden Sie in diesem Fall die Option --enable-sql. Dadurch werden alle Ergebnisse automatisch in eine Datenbank namens droidlysis.db, in einer Tabelle namens samples, abgelegt. Jeder Eintrag in der Tabelle bezieht sich auf eine bestimmte Probe. Jede Spalte entspricht einer von DroidLysis verfolgten Eigenschaft.
Beispiel: Um alle Dateinamen, SHA256-Summen und Smali-Eigenschaften der Datenbank abzurufen:
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,
...
Was DroidLysis erkennt, kann in den Dateien des Verzeichnisses ./conf konfiguriert und erweitert werden.
Ein Muster besteht aus:
send_sms. Dient zur Benennung der Eigenschaft. Muss innerhalb der .conf-Datei eindeutig sein.;->sendTextMessage|;->sendMultipartTextMessage|SmsManager;->sendDataMessage. In der smali.conf-Datei wird dieser reguläre Ausdruck auf Smali-Code angewendet. In diesem speziellen Fall gibt es 3 verschiedene Möglichkeiten, SMS-Nachrichten aus dem Code zu senden: sendTextMessage, sendMultipartTextMessage und sendDataMessage.[send_sms]
pattern=;->sendTextMessage|;->sendMultipartTextMessage|SmsManager;->sendDataMessage
description=Senden von SMS-Nachrichten
Exodus Privacy pflegt eine Liste verschiedener SDKs, die es interessant ist, in unserer Analyse über conf/kit.conf auszuschließen.
Fügen Sie die Option --import_exodus zur droidlysis-Befehlszeile hinzu: Dies wird vorhandene Tracker, die Exodus Privacy kennt und die noch nicht in Ihrer kit.conf enthalten sind, parsen. Schließlich werden alle neuen Tracker an ~/.cache/droidlysis/kit.conf angehängt.
Danach möchten Sie vielleicht Ihre kit.conf-Datei sortieren:
import configparser
import collections
import os
config = configparser.ConfigParser({}, collections.OrderedDict)
config.read(os.path.expanduser('~/.cache/droidlysis/kit.conf'))
# Order all sections alphabetically
config._sections = collections.OrderedDict(sorted(config._sections.items(), key=lambda t: t[0] ))
with open('sorted.conf','w') as f:
config.write(f)
Dieses Skript hilft Ihnen, auf der JEB-Oberfläche nach Methoden zu suchen, die Code enthalten, der dem Smali-Muster entspricht, und einfach zu diesen Funktionen zu navigieren. Wenn Sie das Skript laden und die Datei details.md unter den Droidlysis-Analysedateien auswählen, erscheint ein Suchfeld. Nach dem Verschieben können Sie das Suchfenster einfach wieder aufrufen, indem Sie die Verknüpfung für die letzte Skriptausführung verwenden.
script/DroidlysisSearch.py