Tiro ist ein hybrides iterativer Deobfuskationsrahmen für Android -Anwendungen. Sein Name steht für die vier Schritte: Target , Instrument , Run und Observe . Der Ansatz von Tiro verwendet die Idee der gezielten Ausführung (siehe unser vorheriges Tool, Intellidroid), um Standorte einer möglichen Verschleierung statisch zu identifizieren und die Eingaben zu bestimmen, um diese Codepositionen auszulösen. Durch die Instrumentierung dieser Standorte und die Ausführung der Zielinformationen können die Laufzeit-Deobfuskationsinformationen gesammelt und wieder in eine statische Analyse übergeben werden, um die Anwendung zu deobfuscieren und vollständigere Analyseergebnisse zu erzielen.
Weitere Informationen finden Sie in unserem Artikel, das in Usenix Security 2018 veröffentlicht wurde.
Derzeit enthält der Code in diesem Repository den Basiscode für den Target und ist hauptsächlich ein Port der statischen Komponente von Intellidroid für das Soot -Framework. Wir planen, Code für die anderen Tiro -Schritte in der Zukunft zu veröffentlichen.
Die statische Analyse von Tiro besteht aus den Target und Instrument . Im Target werden Standorte der Verschleierung identifiziert und die Wege zu diesen Stellen extrahiert. Für jeden Pfad sammelt Tiro Einschränkungen, die die Eingänge bestimmen, die injiziert werden müssen, um den Pfad dynamisch auszulösen. Derzeit verwenden wir den Z3 Constraint Solver und konvertieren Einschränkungen in die Z3-Py- und Z3-Java-Formate.
Die statische Analysekomponente erfordert Java 8 (JDK 1.8).
Dieses Repository enthält eine Abhängigkeit vom android-platforms -Repository, das die von Anwendungen verwendeten Android-Framework-Bibliotheken enthält. Diese Abhängigkeit ist ein Submodul innerhalb des Projekts. Tiro mit der Submodule klonen, rennen Sie:
git clone --recursive [email protected]:miwong/tiro.git
Alternativ, wenn Sie Tiro ohne das Submodul bereits geklont haben, rennen Sie:
git submodule update --init --recursive
Dies dauert einige Minuten, da die Android -Framework -Bibliotheken groß sind.
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.
Zu bauen:
./gradlew build
Zu bauen und zu rennen:
./TIROStaticAnalysis <APK>
Standardmäßig schreibt Tiro die statischen Analyseergebnisse in das tiroOutput -Verzeichnis. Mit den Optionen -o können dies geändert werden. Um andere Befehlszeilenoptionen zu sehen, führen Sie aus:
./TIROStaticAnalysis --help
Derzeit ist die statische Analyseausgabe von Tiro (dh appInfo.json ) nicht mit Intellidroid kompatibel. Während wir die dynamische Komponente von TIRO veröffentlichen, werden wir auch den intellidroid verwendeten dynamischen Kunden aktualisieren, damit die Einschränkung von Tiro in die dynamische Analyse integriert werden kann.
TIRO basiert auf dem Ruß -Rahmen für statische Analyse. Es wurden mehrere Änderungen an Soots Call-Graph-Erzeugung vorgenommen, um den Call-Graph mit Kanten zu verbessern, die einen Android-spezifischen Ausführungsfluss darstellen (z. B. Absichten). Die Modifikationen werden hier in einem separaten Repository veröffentlicht.
Da Android-Anwendungen ereignisgesteuert sind, müssen die Einstiegspunkte in eine Anwendung berechnet werden, um eine vollständige Analyse zu erzielen. Tiro verwendet die in FlowDroid implementierte Einstiegspunkt-Erkennung. An diesem Einstiegscode wurden geringfügige Änderungen vorgenommen, um Informationen zu extrahieren, die durch die Analyse von TIRO erforderlich sind. Diese Änderungen werden in static/src/soot/ und static/src/tiro/target/entrypoint/ gespeichert.
Das Folgende hat Code zu TIRO beigetragen:
Tiro wurde von Michelle Wong an der Universität von Toronto als Doktorarbeitsprojekt entwickelt. Für Anfragen wenden Sie sich bitte an Michelle unter [email protected].
Tiro wird unter der GNU Lesser General Public Lizenz, Version 2.1, veröffentlicht.