Tiro est un cadre de déobfuscation itératif hybride pour les applications Android. Son nom représente les quatre étapes: Target , Instrument , Run et Observe . L'approche de Tiro utilise l'idée de l'exécution ciblée (voir notre outil précédent, Intellidroid) pour identifier statiquement les emplacements de l'obscurcissement possible et déterminer les entrées pour déclencher ces emplacements de code. En instrumentant ces emplacements et en les exécutant en utilisant les informations de ciblage, les informations de désobfuscation d'exécution peuvent être recueillies et transmises dans une analyse statique pour désobfusquer l'application et obtenir des résultats d'analyse plus complets.
Pour plus de détails, veuillez consulter notre article, publié dans Usenix Security 2018.
Actuellement, le code de ce référentiel contient le code de base pour l'étape Target et est principalement un port du composant statique d'Intellidroid dans le cadre de suot. Nous prévoyons de publier du code pour les autres étapes Tiro à l'avenir.
L'analyse statique de Tiro est composée des étapes Target et Instrument . Dans l'étape Target , les emplacements d'obscurcissement sont identifiés et les chemins d'appel vers ces emplacements sont extraits. Pour chaque chemin, Tiro rassemble des contraintes qui déterminent les entrées qui doivent être injectées pour déclencher le chemin de dynamiquement. Nous utilisons actuellement le solveur de contraintes Z3 et convertissons les contraintes en formats Z3-Py et Z3-Java.
Le composant d'analyse statique nécessite Java 8 (JDK 1.8).
Ce référentiel contient une dépendance au référentiel android-platforms , qui contient les bibliothèques Android Framework utilisées par les applications. Cette dépendance est un sous-module dans le projet. Pour cloner Tiro avec le sous-module, courez:
git clone --recursive [email protected]:miwong/tiro.git
Alternativement, si vous avez déjà cloné Tiro sans le sous-module, exécutez:
git submodule update --init --recursive
Cela fait plusieurs minutes, car les bibliothèques de framework Android sont grandes.
Ce projet utilise le système Gradle Build. Les fichiers de sortie sont situés dans le répertoire build/ . Le script Gradlew est un wrapper pour les machines qui n'ont pas déjà installé Gradle. Si votre machine de développement contient déjà Gradle, vous pouvez utiliser votre propre installation en remplaçant ./gradlew par gradle dans les commandes ci-dessous. Une connexion réseau est requise lors de la compilation du code pour la première fois afin que Gradle puisse télécharger automatiquement les dépendances.
Pour construire:
./gradlew build
Pour construire et courir:
./TIROStaticAnalysis <APK>
Par défaut, Tiro écrit les résultats de l'analyse statique dans le répertoire tiroOutput . Les options -o permettent de modifier cela. Pour voir d'autres options de ligne de commande, exécutez:
./TIROStaticAnalysis --help
Actuellement, la sortie d'analyse statique de Tiro (c.-à-d. appInfo.json ) n'est pas compatible avec Intellidroid. Au fur et à mesure que nous publions le composant dynamique de Tiro, nous mettrons également à jour le client dynamique utilisé dans Intellidroid afin que l'extraction des contraintes de Tiro puisse être intégrée dans une analyse dynamique.
Tiro est construit sur le cadre d'analyse statique Soot. Plusieurs modifications ont été apportées à la génération de graphe d'appel de Soot pour améliorer le graphique d'appel avec des bords représentant le flux d'exécution spécifique à Android (par exemple, les intentions). Les modifications sont publiées dans un référentiel séparé ici.
Étant donné que les applications Android sont motivées par des événements, les points d'entrée dans une application doivent être calculés pour obtenir une analyse complète. Tiro utilise la découverte de point d'entrée implémentée dans FlowDroid. Des modifications mineures ont été apportées à ce code d'entrée pour extraire les informations requises par l'analyse de Tiro; Ces modifications sont stockées dans static/src/soot/ et static/src/tiro/target/entrypoint/ .
Les éléments suivants ont contribué au code à Tiro:
Tiro a été développé en tant que projet de doctorat par Michelle Wong à l'Université de Toronto. Pour toute demande, veuillez contacter Michelle à [email protected].
TIRO est publié sous la licence publique GNU Unser-General, version 2.1.