Ce référentiel héberge l'outil d'analyse de flux de données FlowDroid. FlowDroid calcule statiquement les flux de données dans les applications Android et les programmes Java. Son objectif est de fournir aux chercheurs et aux praticiens un outil et une bibliothèque sur lesquels ils peuvent baser leurs propres projets de recherche et implémentations de produits. Nous sommes heureux de voir que FlowDroid est désormais largement utilisé dans le monde universitaire ainsi que dans l'industrie.
Vous pouvez soit créer FlowDroid par vous-même en utilisant Maven, soit télécharger une version à partir d'ici sur GitHub.
FlowDroid peut maintenant être trouvé sur Maven Central. Afin d'utiliser FlowDroid dans votre version Maven, incluez les éléments suivants dans votre fichier pom.xml . Nous vous recommandons d'utiliser la version la plus récente et la plus grande sauf si vous avez un problème spécifique qui vous empêche de le faire. Dans ce cas, veuillez nous le faire savoir (voir le contact ci-dessous).
<dependencies>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow-summaries</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow-android</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
Pour un démarrage rapide avec FlowDroid, consultez "Utilisation du tracker de flux de données" ci-dessous. Si vous souhaitez uniquement utiliser l'outil de ligne de commande, tout ce dont vous avez besoin est le fichier "Soot-Infoflow-Cmd-Jar-With-Dependance.jar".
La page de version contient tous les fichiers JAR pré-construits pour chaque version que nous publions officiellement. Nous vous recommandons d'utiliser la version la plus récente et la plus grande sauf si vous avez un problème spécifique qui vous empêche de le faire. Dans ce cas, veuillez nous le faire savoir (voir le contact ci-dessous).
Pour un démarrage rapide avec FlowDroid, consultez "Utilisation du tracker de flux de données" ci-dessous. Si vous souhaitez uniquement utiliser l'outil de ligne de commande, tout ce dont vous avez besoin est le fichier "Soot-Infoflow-Cmd-Jar-With-Dependance.jar".
Exigences:
À la première fois, FlowDroid doit être construit à partir du module parent, c'est-à-dire le dossier racine du projet. La suite de test complète dure environ 30 minutes, nous vous recommandons donc de désactiver les tests lors de la construction:
mvn install -DskipTestsPour exécuter la construction avec des tests activés, certaines étapes supplémentaires sont nécessaires:
rt.jar doit être à l'emplacement par défaut (alternativement, placez le rt.jar à l'intérieur $JAVA_HOME/lib/ )--recursive )ANDROID_JARS doit être définie sur le répertoire des plateformes Android (généralement $HOME/Android/Sdk/platforms/ )Nous travaillons sur FlowDroid à l'aide de l'IDE Eclipse. Tous les modules sont des projets Eclipse et peuvent être importés dans l'IDE Eclipse. Ils apparaîtront comme des projets Maven là-bas et Eclipse devrait prendre soin de télécharger toutes les dépendances requises pour vous.
Vous pouvez utiliser FlowDroid via son interface de ligne de commande (module Soot-Infoflow-CMD) ou en tant que bibliothèque. En général, si vous souhaitez implémenter quelque chose et avoir besoin d'un tracker de flux de données en tant que composant, vous êtes mieux en intégrant les modules FlowDroid en tant que fichiers JAR. Si vous avez juste besoin des résultats rapidement, exécutez simplement l'interface de ligne de commande.
FlowDroid est pris en charge sur Windows, Mac OS et Linux.
Si vous souhaitez utiliser l'outil de ligne de commande pour exécuter le tracker de flux de données, vous pouvez utiliser la commande suivante:
java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar
-a <APK File>
-p <Android JAR folder>
-s <SourcesSinks file>
Le dossier Android Jar est le répertoire "Platforms" dans votre dossier d'installation Android SDK. Le fichier de définition pour les sources et les puits définit ce qui doit être traité comme une source d'informations sensibles et ce qui doit être traité comme un puits qui peut éventuellement fuir des données sensibles au monde extérieur. Ces définitions sont spécifiques à votre cas d'utilisation. Cependant, si vous recherchez des problèmes de confidentialité, vous pouvez utiliser notre fichier par défaut "Sourcesandsinks.txt" dans le dossier "Soot-Infoflow-Android" comme point de départ.
Pour découvrir les autres options de l'outil de ligne de commande, vous pouvez exécuter l'outil avec l'option "- help" ou jeter un œil à la méthode Mainclass.InitializecommandLineOptions () "dans le code source (module Soot-infoflow-cmd).
Pour certaines applications, FlowDroid prendra très longtemps pour les grandes applications. Il existe différentes options avec lesquelles vous pouvez configurer un compromis entre les performances, la précision et le rappel.
-ns ne suivent pas les gaignements sur les champs statiques et ne tiennent pas compte des initialiseurs statiques.-ne ne suivez pas les flux exceptionnels.Vous pouvez également définir des délais d'attente:
-dt N interdit l'analyse du flux de données après n secondes et renvoie les résultats obtenus jusqu'à présent.-ct N interdit la collection de rappel lors de la construction de callgraph après n secondes et se poursuit avec le callgraph (incomplet) construit jusqu'à présent.-rt N interdit la collection de résultats après n secondes et renvoie les résultats obtenus jusqu'à présent.Notez que les délais d'attente sont additifs. Les trois étapes doivent terminer ou se comporter sur un délai d'expiration pour que l'outil retourne et fournisse des résultats.
Si vous souhaitez inclure FlowDroid en tant que bibliothèque dans votre propre solution, vous pouvez référencer directement les fichiers JAR respectifs. Si vous utilisez Maven, vous pouvez ajouter FlowDroid comme référence et faire résoudre Maven tous les composants requis. Selon ce que vous souhaitez analyser (applications Android ou programmes Java), vos dépendances peuvent varier.
Dans cette section, nous collecterons des extraits de code et de configuration pour les tâches courantes avec FlowDroid.
Pour exécuter une analyse de flux de données simple, vous pouvez utiliser le code suivant. Vous devez remplacer l'espace réservé androidJarFolder par l'emplacement du répertoire platforms dans votre installation Android SDK. L' apkPath du placement fait référence au chemin complet du fichier du fichier APK. Les résultats du flux de données sont accessibles via la classe InfoflowResults .
SetupApplication app = new SetupApplication(androidJarFolder, apkPath);
app.setTaintWrapper(new SummaryTaintWrapper(new LazySummaryProvider("summariesManual")));
InfoflowResults results = app.runInfoflow();
L'analyse du flux de données utilise les résumés de bibliothèque StubDroid par défaut. Dans la configuration par défaut, ces résumés sont stockés dans le dossier summariesManual et il n'est pas nécessaire de changer cela.
Si vous souhaitez lire les détails du fonctionnement de FlowDroid, la thèse de doctorat de Steven Arzt est un bon point de départ.
Les contributions sont toujours les bienvenues. FlowDroid est un projet open source que nous avons publié dans l'espoir qu'il sera utile à la communauté de recherche dans son ensemble. Si vous avez une nouvelle fonctionnalité ou un correctif de bogue que vous aimeriez voir dans le référentiel de code officiel, veuillez ouvrir une demande de fusion ici sur GitHub et contacter-nous (voir ci-dessous) avec une brève description de ce que vous avez fait.
FlowDroid est concédé sous licence LGPL, voir le fichier de licence. Cela signifie essentiellement que vous êtes libre d'utiliser l'outil (même dans les projets commerciaux à source fermée). Cependant, si vous étendez ou modifiez l'outil, vous devez également mettre vos modifications à la disposition du LGPL. Cela garantit que nous pouvons continuer à améliorer l'outil en tant qu'effort communautaire.
Si vous rencontrez des problèmes, vous pouvez demander de l'aide sur la liste de diffusion de suot. Vous pouvez également nous contacter à [email protected].