该存储库托管流动数据流分析工具。 FlowDroid静态计算Android应用程序和Java程序中的数据流。它的目标是为研究人员和从业者提供一个工具和库,他们可以在其中基于自己的研究项目和产品实施。我们很高兴看到FlowDroid现在在学术界和行业中广泛使用。
您可以使用Maven自行构建FlowDroid,也可以从Github上下载版本。
现在可以在Maven Central上找到FlowDroid。为了在Maven构建中使用FlowDroid,将以下内容包括在pom.xml文件中。我们建议使用最新和最出色的版本,除非您有一个特定的问题来阻止您这样做。在这种情况下,请告诉我们(请参阅下面的联系人)。
<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>
对于FlowDroid快速启动,请查看下面的“使用数据流跟踪器”。如果您只想使用命令行工具,那么您所需要的只是“ soot-infoflow-cmd-jar-with-with-with dependencies.jar”文件。
发布页面包含我们正式发布的每个发行版的所有预制JAR文件。我们建议使用最新和最出色的版本,除非您有一个特定的问题来阻止您这样做。在这种情况下,请告诉我们(请参阅下面的联系人)。
对于FlowDroid快速启动,请查看下面的“使用数据流跟踪器”。如果您只想使用命令行工具,那么您所需要的只是“ soot-infoflow-cmd-jar-with-with-with dependencies.jar”文件。
要求:
首次需要从父模块中构建FlowDroid,即项目的根文件夹。完整的测试套件大约需要30分钟,因此我们建议在构建时禁用测试:
mvn install -DskipTests为了启用测试,运行构建,需要一些其他步骤:
rt.jar必须在默认位置(或者将rt.jar放入$JAVA_HOME/lib/ )--recursive克隆)ANDROID_JARS环境变量必须设置为Android平台目录(通常为$HOME/Android/Sdk/platforms/ )我们使用Eclipse IDE处理流动型。所有模块都是日食项目,可以进口到Eclipse IDE。他们将出现在那里的Maven项目,Eclipse应该照顾为您下载所有必需的依赖项。
您可以通过其命令行接口(模块烟灰-Infoflow-cmd)或库使用FlowDroid。通常,如果您想实现某些内容并需要数据流跟踪器作为组件,则最好将FlowDroid模块作为JAR文件集成。如果您只需要快速结果,只需运行命令行界面即可。
Windows,Mac OS和Linux支持FlowDroid。
如果要使用命令行工具运行数据流跟踪器,则可以使用以下命令:
java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar
-a <APK File>
-p <Android JAR folder>
-s <SourcesSinks file>
Android Jar文件夹是您的Android SDK安装文件夹中的“平台”目录。来源和下沉源的定义文件定义了将被视为敏感信息来源的内容,以及将被视为可能泄漏到外界数据的水槽。这些定义特定于您的用例。但是,如果您正在寻找隐私问题,则可以在“ Soot-Infoflow Android”文件夹中使用我们的默认文件“ sourceandsinksinks.txt”作为起点。
要查找命令行工具的其他选项,您可以使用“ - 螺旋”选项运行该工具,也可以在源代码(模块soot-infoflow-cmd)中查看mainclass.initializecommandlineOptions()”方法。
对于某些应用程序,FlowDroid对于大型应用程序需要很长时间。您可以通过各种选项来配置性能,精度和召回之间的权衡。
-ns不会在静态字段上跟踪污点,而无视静态初始化器。-ne不要跟踪出色的流。您还可以定义超时:
-dt N在n秒后逐步中止数据流量分析,并返回到目前为止获得的结果。-ct N在n秒后呼叫构造期间取消了回调集合,并继续进行(不完整的)呼叫仪。-rt N在n秒后逐步中止结果集合,并返回到目前为止获得的结果。请注意,超时是加性的。所有三个阶段都必须完成或跑到超时以供工具返回和交付结果。
如果要将FlowDroid作为库中的解决方案包括在您自己的解决方案中,则可以直接引用相应的JAR文件。如果使用Maven,则可以添加FlowDroid作为参考,并使Maven解析所有必需的组件。根据您要分析的内容(Android应用程序或Java程序),您的依赖项可能会有所不同。
在本节中,我们将收集使用FlowDroid的常见任务的代码和配置段。
要运行简单的数据流分析,您可以使用以下代码。您需要用Android SDK安装中platforms目录的位置替换占位符androidJarFolder 。占位符apkPath是指APK文件的完整文件路径。数据流结果可通过InfoflowResults类访问。
SetupApplication app = new SetupApplication(androidJarFolder, apkPath);
app.setTaintWrapper(new SummaryTaintWrapper(new LazySummaryProvider("summariesManual")));
InfoflowResults results = app.runInfoflow();
数据流分析使用默认的固定图库摘要。在默认配置中,这些摘要存储在summariesManual文件夹中,无需更改。
如果您想阅读有关FlowDroid的工作原理的详细信息,则史蒂文·艾尔茨(Steven Arzt)的博士学位论文是一个不错的起点。
总是欢迎捐款。 FlowDroid是一个开源项目,我们希望它对整个研究社区有用。如果您有一个新功能或一个错误修复程序,您想在官方代码存储库中看到,请在Github上打开合并请求,并与我们联系(请参见下文),并简要说明您所做的工作。
FlowDroid已获得LGPL许可证的许可,请参阅许可证文件。这基本上意味着您可以自由使用该工具(即使在商业,封闭式项目中)。但是,如果您扩展或修改工具,则必须在LGPL下进行更改。这样可以确保我们可以继续改善该工具作为社区努力。
如果您遇到任何问题,则可以在烟灰邮件列表中寻求帮助。您也可以通过[email protected]与我们联系。