Este repositorio aloja la herramienta de análisis de flujo de datos FlowDroid. FlowDroid calcula estáticamente flujos de datos en aplicaciones de Android y programas Java. Su objetivo es proporcionar a los investigadores y profesionales una herramienta y biblioteca en la que puedan basar sus propios proyectos de investigación e implementaciones de productos. Nos complace ver que FlowDroid ahora se usa ampliamente en la academia e en la industria.
Puede construir FlowDroid por su cuenta usando Maven, o puede descargar una versión desde aquí en GitHub.
FlowDroid ahora se puede encontrar en Maven Central. Para usar FlowDroid en su compilación Maven, incluya lo siguiente en su archivo pom.xml . Recomendamos usar la última y mejor versión a menos que tenga un problema específico que le impida hacerlo. En ese caso, háganoslo saber (consulte el contacto a continuación).
<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>
Para un inicio rápido con FlowDroid, mire "Usando el rastreador de flujo de datos" a continuación. Si solo desea usar la herramienta de línea de comandos, todo lo que necesita es el archivo "Soot-Infoflow-CMD-JAR-With-Dependencies.jar".
La página de lanzamiento contiene todos los archivos JAR previos a cada lanzamiento que publicamos oficialmente. Recomendamos usar la última y mejor versión a menos que tenga un problema específico que le impida hacerlo. En ese caso, háganoslo saber (consulte el contacto a continuación).
Para un inicio rápido con FlowDroid, mire "Usando el rastreador de flujo de datos" a continuación. Si solo desea usar la herramienta de línea de comandos, todo lo que necesita es el archivo "Soot-Infoflow-CMD-JAR-With-Dependencies.jar".
Requisitos:
En la primera vez, FlowDroid debe construirse a partir del módulo principal, es decir, la carpeta raíz del proyecto. La suite de prueba completa toma alrededor de 30 minutos, por lo que recomendamos deshabilitar las pruebas al construir:
mvn install -DskipTestsPara ejecutar la compilación con las pruebas habilitadas, se necesitan algunos pasos adicionales:
rt.jar debe estar en la ubicación predeterminada (alternativamente, coloque el rt.jar dentro de $JAVA_HOME/lib/ )--recursive )ANDROID_JARS debe establecerse en el directorio de plataformas Android (típicamente $HOME/Android/Sdk/platforms/ )Trabajamos en FlowDroid usando el Eclipse IDE. Todos los módulos son proyectos de eclipse y se pueden importar al ECLIPSE IDE. Aparecerán como proyectos Maven allí y Eclipse debe encargarse de descargar todas las dependencias requeridas para usted.
Puede usar FlowDroid a través de su interfaz de línea de comandos (módulo Soot-Infoflow-CMD) o como una biblioteca. En general, si desea implementar algo y necesita un rastreador de flujo de datos como componente, está mejor al integrar los módulos FlowDroid como archivos JAR. Si solo necesita los resultados rápidamente, simplemente ejecute la interfaz de línea de comandos.
FlowDroid es compatible con Windows, Mac OS y Linux.
Si desea usar la herramienta de línea de comandos para ejecutar el rastreador de flujo de datos, puede usar el siguiente comando:
java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar
-a <APK File>
-p <Android JAR folder>
-s <SourcesSinks file>
La carpeta Android JAR es el directorio "Plataformas" dentro de su carpeta de instalación de Android SDK. El archivo de definición para fuentes y sumideros define lo que se tratará como una fuente de información confidencial y qué se tratará como un fregadero que posiblemente pueda filtrar datos confidenciales al mundo exterior. Estas definiciones son específicas para su caso de uso. Sin embargo, si está buscando problemas de privacidad, puede usar nuestro archivo predeterminado "Sources ySinks.txt" en la carpeta "Soot-Infoflow-Android" como punto de partida.
Para conocer las otras opciones de la herramienta de línea de comandos, puede ejecutar la herramienta con la opción "--help" o echar un vistazo al método mainclass.initializeCommandlineOptions () "en el código fuente (módulo Soot-Infoflow-CMD).
Para algunas aplicaciones, FlowDroid tardará mucho en grandes aplicaciones. Hay varias opciones con las que puede configurar una compensación entre rendimiento, precisión y retiro.
-ns no rastrean manchas en los campos estáticos y ignora los inicializadores estáticos.-ne no rastree flujos excepcionales.También puede definir tiempos de espera:
-dt N aborta el análisis del flujo de datos después de n segundos y devuelve los resultados obtenidos hasta ahora.-ct N aborta la colección de devolución de llamada durante la construcción de callgraph después de n segundos y continúa con el callgraph (incompleto) construido hasta ahora.-rt N aborta la recopilación de resultados después de N segundos y devuelve los resultados obtenidos hasta ahora.Tenga en cuenta que los tiempos de espera son aditivos. Las tres etapas deben completarse o cumplir con un tiempo de espera para que la herramienta devuelva y entregue resultados.
Si desea incluir FlowDroid como biblioteca en su propia solución, puede hacer referencia directamente a los archivos JAR respectivos. Si usa Maven, puede agregar FlowDroid como referencia y hacer que Maven resuelva todos los componentes requeridos. Dependiendo de lo que desee analizar (aplicaciones de Android o programas Java), sus dependencias pueden variar.
En esta sección, recopilaremos fragmentos de código y configuración para tareas comunes con FlowDroid.
Para ejecutar un análisis de flujo de datos simple, puede usar el siguiente código. Debe reemplazar el marcador de posición androidJarFolder con la ubicación del directorio platforms en su instalación de Android SDK. El marcador de posición apkPath se refiere a la ruta del archivo completo del archivo APK. Los resultados del flujo de datos son accesibles a través de la clase InfoflowResults .
SetupApplication app = new SetupApplication(androidJarFolder, apkPath);
app.setTaintWrapper(new SummaryTaintWrapper(new LazySummaryProvider("summariesManual")));
InfoflowResults results = app.runInfoflow();
El análisis de flujo de datos utiliza los resúmenes de biblioteca stubdroid predeterminados. En la configuración predeterminada, estos resúmenes se almacenan en la carpeta summariesManual y no hay necesidad de cambiar eso.
Si desea leer los detalles sobre cómo funciona FlowDroid, la tesis doctoral de Steven Arzt es un buen lugar para comenzar.
Las contribuciones siempre son bienvenidas. FlowDroid es un proyecto de código abierto que publicamos con la esperanza de que sea útil para la comunidad de investigación en su conjunto. Si tiene una nueva función o una solución de errores que le gustaría ver en el repositorio de código oficial, abra una solicitud de fusión aquí en GitHub y contáctenos (ver más abajo) con una breve descripción de lo que ha hecho.
FlowDroid tiene licencia bajo la licencia LGPL, consulte el archivo de licencia. Básicamente, esto significa que puede usar la herramienta (incluso en proyectos comerciales de código cerrado). Sin embargo, si extiende o modifica la herramienta, también debe hacer que sus cambios estén disponibles bajo LGPL. Esto asegura que podamos continuar mejorando la herramienta como un esfuerzo comunitario.
Si experimenta algún problema, puede solicitar ayuda en la lista de correo de hollín. También puede contactarnos en [email protected].