intellij + maven 配置FlowDroid
FlowDroid是一款使用Java實現的針對Android的靜態污點分析框架,發表於PLDI'2014。
源碼分為兩部分:
- soot-infoflow:通用的污點分析
- soot-infoflow-android:建模安卓組件生命周期等
依賴Soot和Heros:
- Soot:起初是Java優化框架,現常被用於Java和安卓應用的分析、插樁、優化、可視化等(Call-graph construction, Def/use chain…)
- Heros- IFDS框架:將函數間的數據流分析問題轉化為圖可達問題
環境
Intellij 2021.2.2 community
jdk 1.8 。注意配置JAVA_HOME等環境變量
android-studio-2021.1.1.22-windows,android sdk。注意android_home、%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools等環境變量配置。
本地maven 3.8.5(非必須) 。注意配置相關環境變量MAVEN_HOME、本地倉庫設置、修改settings。
FlowDroid 2.9
releases見 https://github.com/secure-software-engineering/FlowDroid/releases
源碼是 Feb 28,2022版本 d8c80ac ;或見雲盤
環境變量設置
可以每次執行時在terminal
linux: EXPORT ANDROID_JARS=<Android JAR folder> the "platforms" directory inside your Android SDK installation folder EXPORT DROIDBENCH=<DroidBench folder> the location of DroidBench, our micro-benchmark suite windows: SET ANDROID_JARS=C:\Users\Erio\AppData\Local\Android\Sdk\platforms ECHO %ANDROID_JARS% SET DROIDBENCH=C:\Program1\DroidBench-master\DroidBench-master ECHO %DROIDBENCH%
或直接增加兩個環境變量。
ANDROID_JARS=C:\Users\Erio\AppData\Local\Android\Sdk\platforms
DROIDBENCH=C:\Program1\DroidBench-master\DroidBench-master
使用FlowDroid Releases
releases即提前編譯、配置好的工具,可以直接使用。
獲取release有兩種方式:
1.使用maven將release添加到項目
<dependencies> <dependency> <groupId>de.fraunhofer.sit.sse.flowdroid</groupId> <artifactId>soot-infoflow</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>de.fraunhofer.sit.sse.flowdroid</groupId> <artifactId>soot-infoflow-summaries</artifactId> <version>2.10.0</version> </dependency> <dependency> <groupId>de.fraunhofer.sit.sse.flowdroid</groupId> <artifactId>soot-infoflow-android</artifactId> <version>2.10.0</version> </dependency> </dependencies>
2.從github下載
https://github.com/secure-software-engineering/FlowDroid/releases
若只想使用命令行工具,直接下載soot-infoflow-cmd-2.9.0-jar-with-dependencies.jar 即可
使用例:
java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar \ -a <APK File> \ -p <Android JAR folder> \ -s <SourcesSinks file>
使用源碼編譯構建 FlowDroid
https://github.com/secure-software-engineering/FlowDroid 下載zip。
使用intellij open為項目
mvn -DskipTests install (關於maven相關指令 clean、compile、package、install、rf等等,可以百度下)。
直接mvni nstall會報錯,因為部分測試用的的apk,不在DroidBench中
如果有問題可以 mvn clean,mvn -DskipTests install。
build success
PS:
1.可以在module setting中設置整個文件夾為sources,或者只把想編譯的module設置為sources。
2.要使用ide自帶的mvn,可以在右上角添加mvn configuration。只需要加參數 -DskipTests install
測試
單個apk測試
參考 https://anemone.top/pl-FlowDroid%E5%B7%A5%E5%85%B7%E4%BB%8B%E7%BB%8D%E5%92%8C%E8%AF%95%E7%94%A8/
linux $表示之前設置的環境變量;這里Droidbench也可以用環境變量,或者直接復制相關apk到項目目錄下
EXPORT ANDROID_JARS=<Android JAR folder> the "platforms" directory inside your Android SDK installation folder EXPORT DROIDBENCH=<DroidBench folder> the location of DroidBench, our micro-benchmark suite
java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar -a DroidBench/apk/GeneralJava/Clone1.apk -p $ANDROID_JARS -s soot-infoflow-android/SourcesAndSinks.txt
windows:
注意兩個環境變量使用% %。
java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar -a %DroidBench%/apk/GeneralJava/Clone1.apk -p %ANDROID_JARS% -s soot-infoflow-android/SourcesAndSinks.txt
在windows intellij,可以cmd,再引用環境變量地址% %;
也可以直接用寫死的地址比如 C:\Program1\DroidBench-master\DroidBench-master/apk/GeneralJava/Clone1.apk
分析結果
...............................
[main] INFO soot.jimple.infoflow.android.SetupApplication$InPlaceInfoflow - Memory consumption after path building: 45 MB [main] INFO soot.jimple.infoflow.android.SetupApplication$InPlaceInfoflow - Path reconstruction took 0 seconds [main] WARN soot.jimple.infoflow.android.SetupApplication$InPlaceInfoflow - No results found. [main] INFO soot.jimple.infoflow.android.SetupApplication$InPlaceInfoflow - Data flow solver took 0 seconds. Maximum memory consumption: 120 MB [main] INFO soot.jimple.infoflow.android.SetupApplication - Found 0 leaks
多個apk
可以用DROIDBENCH 所有的apk測試,需要修改項目的test部分
javadoc api文檔
用winrar解壓編譯得到的 xxx-javadoc.jar即可得到相關文檔。也可以下載release中的javadoc.jar。
Javadoc是根據代碼里的注釋規范生成的
可以從index.html開始閱讀
過程中遇到的問題
使用mvn install,build failure
test時報錯 java.lang.RuntimeException: file 'C:\Program1\DroidBench-master\DroidBench-master\Aliasing/SimpleAliasing1.apk' does not exist!
一開始以為是環境變量錯誤,修改%DROIDBENCH%后 mvn clean mvn install。還是相同的問題。
環境變量沒有刷新。重啟項目刷新。還是相同的問題。
最后發現是Test使用的DROIDBENCH中的一部分apk不存在。就mvn -DskipTests install跳過test,后續用自己的apk測試
關於使用本地maven 或intellij自帶的maven
如果為了操作簡便,直接使用intellij自帶的即可。
如果考慮到和eclipse共享庫和配置、避免maven和ide升級導致的問題等等,可以選擇修改為本地的maven。
這里我使用的是本地maven
參考:
官方文檔:
https://github.com/secure-software-engineering/FlowDroid
https://blogs.uni-paderborn.de/sse/tools/flowdroid/
簡介:
https://zhuanlan.zhihu.com/p/79802252?from_voters_page=true
https://anemone.top/pl-FlowDroid%E5%B7%A5%E5%85%B7%E4%BB%8B%E7%BB%8D%E5%92%8C%E8%AF%95%E7%94%A8/
https://e0hyl.github.io/BLOG-OF-E0/FlowDroid/
https://segmentfault.com/a/1190000019977434