Intellidroid ist ein Analyse -Tool für Android -Anwendungen, das Call -Pfade extrahiert, die zu spezifischem Verhalten führen und diese Pfade genau während der Laufzeit ausführen. Bei einer Reihe von gezielten Verhaltensweisen durchquert die statische Analysekomponente den Aufrufdiagramm der Anwendung, um Pfade zu diesen Verhaltensweisen zu finden. Es extrahiert auch Pfadbeschränkungen, die verwendet werden, um die Eingabewerte zu bestimmen, die diese Pfade auslösen können. Die dynamische Komponente nimmt die extrahierten Pfade/Einschränkungen ein und injiziert die Eingangswerte in das Android -Gerät, wodurch das gezielte Verhalten ausgelöst wird.
Weitere Informationen finden Sie in unserem Papier und in Folien (NDSS 2016).
Die 'Frameworkanalysis' führt eine statische Analyse durch, um Einschränkungen für das Android -Framework zu generieren. Derzeit stellen wir die Einschränkungen für das Ausgabemittel ein, damit sie zu den von der "Appanalyse" -Komponente erzeugten Anwendungsbeschränkungen hinzugefügt werden können.
Das Verzeichnis "Appanalyse" enthält den Code, der Einschränkungen für Android -Anwendungen generiert.
| Verzeichnis | Beschreibung |
|---|---|
| Vorverarbeitung | Skripte zum Extrahieren und Vorab -APK -Datei, bevor Sie sie an das Tool weitergeben. |
| src | Quellcodedateien. |
| libs | Abhängigkeiten, einschließlich der notwendigen Wala -Bibliotheken. 1 |
| Android | Kompilierte Android -Framework -Dateien (zu analysierte) aus AOSP Version 4.4.2_R2. |
1 Wir haben geringfügige Änderungen an Walas Call Graph Generation vorgenommen, um die Leistung von Intellidroid zu verbessern. Der geänderte Quellcode finden Sie hier.
Dieses Projekt verwendet das Gradle Build -System. Ausgabedateien befinden sich im build/ Verzeichnis. Das Gradlew -Skript ist ein Wrapper für Maschinen, bei denen Gradle nicht bereits installiert ist. Wenn Ihre Entwicklungsmaschine bereits Gradle enthält, können Sie Ihre eigene Installation verwenden, indem gradle ./gradlew werden. Eine Netzwerkverbindung ist erforderlich, wenn der Code zum ersten Mal kompiliert wird, damit Gradle die Abhängigkeiten automatisch herunterladen kann.
Die enthaltenen Android -Framework -Dateien im android -Verzeichnis wurden mit JDK 1.6 kompiliert, aber für die in den Vorverarbeitungsskripten verwendete apktool sind JDK 1.7 erforderlich. Wir empfehlen, JDK 1.7 zu verwenden, da dies am besten zu funktionieren scheint. Bei Bedarf können Sie die Dateien im android -Verzeichnis ersetzen, um verschiedene Versionen von AOSP oder JDK auszuprobieren.
Die zu analysierende Ziel -APK -Datei sollte zunächst mit den Skripten im preprocess vorverarbeitet werden. Das resultierende Verzeichnis (das die APK -Datei und die extrahierten Ressourcen enthält) kann dann an die statische Analyse übergeben werden.
Die Vorverarbeitungsskripte verwenden apktool und wagen es, das APK -Paket zu extrahieren. Sie können Ihre eigenen Extraktionstools verwenden. Möglicherweise müssen Sie jedoch den App -Analyse -Code ändern, damit Intellidroid die Bytecode- und Manifestdateien für eine bestimmte Anwendung finden kann.
./preprocess/PreprocessAPK.sh <APK file>
./preprocess/PreprocessDataset.sh <directory of APK files>
./gradlew build
./IntelliDroidAppAnalysis -o <output directory> <preprocessed app directory>
Um andere Befehlszeilenoptionen zu sehen, führen Sie aus:
./IntelliDroidAppAnalysis --help
Mit dem Ausgabesverzeichnis wird die App -Info -JSON -Datei und die Z3 Constraint -Dateien gespeichert. Wenn nicht angegeben, werden diese Dateien in ./pathOutput gespeichert. Die Ausgabedateien werden vom IntelliDroidDynamicClient -Tool verwendet, um die Call -Pfade zu identifizieren und die Eingabedaten zu generieren, um diese Pfade auszulösen.
Die im Ausgabeverzeichnis erstellten appInfo.json und constraintX_X.py -Dateien sind für den dynamischen Client erforderlich, sind jedoch nicht sehr lesbar. Das Flag -y kann verwendet werden, um eine lesbarere (aber ausgegebene) Version des Pfad-/Einschränkungsergebnisses (in STDOut gedruckt) zu erhalten.
Das Verzeichnis "DynamicClient" enthält das Python -Programm, das mit dem Android -Gerät kommuniziert und die Eingänge sendet, die die gewünschten Ereignisse auslösen.
Das Programm erwartet, dass ein Android -Gerät oder ein Emulator mit dem System verbunden ist. Dieses Gerät muss das benutzerdefinierte Android -Betriebssystem ausführen, das Intellidroidservice enthält (das die Befehle, die dieses Programm sendet, interpretiert und den tatsächlichen Ereignisaufruf durchführt). Das DynamicClient -Programm stellt automatisch über einen Socket auf Port TCP her, das: 12348. Das adb -Tool wird verwendet PATH um die Verbindung einzurichten und bestimmte Befehle auszuführen. Es sollte vom PATH erreichbar sein.
Darüber hinaus verwendet der DynamicClient den Z3-Einschränkungslöser über seine Python-API (Z3-PY). Die Anweisungen zum Erstellen und Installieren von Z3 mit Python -Bindungen finden Sie hier.
Das von Intellidroid verwendete benutzerdefinierte Android -Betriebssystem wird als eine Reihe von Diff -Dateien bereitgestellt, die auf den Basis -AOSP -Quellbaum angewendet werden können. Intellidroid ist derzeit für Android 4.3 (AOSP-Zweig android-4.3_r1 ) implementiert. In der AOSP -Dokumentation finden Sie Anweisungen zum Herunterladen und Erstellen von Android.
Sobald Sie die richtige AOSP -Version heruntergeladen und zusammengestellt haben, können Sie die Intellidroid -Patches anwenden, die sich im Verzeichnis androidPatches befinden. Die Dateien patch.sh und unpatch.sh werden bereitgestellt, um diesen Vorgang zu automatisieren. Nach dem Patching bauen Sie AOSP wieder auf (wir haben festgestellt, dass Sie möglicherweise zweimal make müssen. Andernfalls werden bestimmte Dateien auf dem Emulator inkonsistent). make müssen Sie auch make update-api ausführen. Nach der Erstellung können Sie logcat verwenden, um zu überprüfen, ob die IntelliDroidService -Klasse als Systemdienst gestartet wird, wenn das Gerät startet.
cd androidPatches
./patch.sh <path to AOSP directory>
./IntelliDroidDynamicClient.py
HELP (Beschreibung der Befehle erhalten)
INSTALL <APK file>
START <directory to app information, generated by IntelliDroidAppAnalysis>
TRIGGER <call path ID to trigger, as specified in appInfo.json>
Führen Sie <Befehl aus, um an IntellidroidService> 1 EXECUTE <command to send to IntelliDroidService>
INFO <info requested from IntelliDroidService> 1
CLOSE
KILL
1 Diese Befehle dienen nur zu Debugging -Zwecken. Sie sollten diese nur verwenden, wenn Sie die genauen Parameter kennen, die intellidroidservice erwartet.
Die Integration mit Taintdroid ist ziemlich einfach. Für die Komponente "Appanalysis" verwenden Sie das Flag -t , um eine andere Liste der gezielten Methoden anzugeben (dh die bereitgestellte Datei taintdroidTargets.txt ).
./IntelliDroidAppAnalysis -t taintdroidTargets.txt <preprocessed app directory>
Befolgen Sie auf der dynamischen Seite die Anweisungen hier, um Taintdroid für Android 4.3 herunterzuladen und zu erstellen. Sobald Sie überprüft haben, ob Ihr Aufbau von Taintdroid funktioniert, wenden Sie die Patches in DynamicClient/androidPatches auf die gleiche Weise wie für nicht modifizierte AOSP an.
Intellidroid wurde ursprünglich von Michelle Wong an der Universität von Toronto als Masterarbeitsprojekt entwickelt, die von Dr. David Lie beaufsichtigt wurde.
Für Anfragen wenden Sie sich bitte an:
Das Folgende hat Code zu Intellidroid beigetragen:
Intellidroid wird unter der MIT -Lizenz veröffentlicht.