該存儲庫託管流動數據流分析工具。 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]與我們聯繫。