上一篇介紹了flowdroid相關的內容,見http://www.cnblogs.com/zlz099/p/6924879.html,這一篇講一下flowdroid的構建與運行。
其中遇到了很多坑,但參考了http://aaronmoment.cn/run-flowdroid/
和https://traceflight.github.io/tech/build-and-run-flowdroid-in-eclipse.html的博客后終於把它跑起來了。別人的博客都是介紹在
Linux和Mac OS x下的,我是在Windows下構建運行的。
1、JDK一定要選擇jdk1.8以上的版本,1.7的版本會報錯Unsupported major.minor version 52.0
2、首先,flowdroid官方文檔給出了兩種構建運行方式,分別是Obtaining the nightly builds和Building FlowDroid From Source。我選擇從源碼層構建flowdroid。
3、首先,從github上下載所有的項目到本地,解壓在同一個文件夾下。
github介紹:https://github.com/secure-software-engineering/soot-infoflow-android/wiki
heros: https://github.com/Sable/heros.git
jasmin: https://github.com/Sable/jasmin.git
soot: https://github.com/Sable/soot.git
soot-infoflow: https://github.com/secure-software-engineering/soot-infoflow.git
soot-infoflow-android: https://github.com/secure-software-engineering/soot-infoflow-android.git
4、導入eclipse:打開Eclipse選擇 File -> Import -> General -> Existing Projects into Workspace,分別導入5個項目即可。
5、下載依賴文件:兩個,一個是android.jar,在谷歌官方下載,做Android開發的都在AndroidSDK\platform文件夾下。
一個是droidbench,DroidBench是用於評估Android軟件污點分析工具有效性的開源測試集,FlowDroid中的測試代碼部分使用到了DROIDBENCH環境變量,在分析自定義軟件時不需要該變量。因此,該數據集不是運行FlowDroid的必須文件。下載地址是https://github.com/secure-software-engineering/DroidBench。如果是分析自己的軟件,則不需要下載droidbench(個人見解,最好下載)。
配置環境變量:android_jar: E:\AndroidSDK\platforms\android-19\android.jar(自己找)
droidbench:E:\MyJava\flowdroid\soot-infoflow-android\test\soot\jimple\infoflow\android\test\droidBench(在自己本地的soot-infoflow-android目錄下)。
6、其他配置
- SLF4J文件重復問題 在項目
heros
和soot-infoflow
兩個項目中的classpath文件中均有slf4j-simple-1.7.5.jar
。因此在項目編譯時會提示SLF4J文件重復,解決方法是在soot-infoflow
項目的.classpath
文件中刪除對應行<classpathentry kind="lib" path="lib/slf4j-simple-1.7.5.jar"/>
。這個classpath文件在soot-infoflow目錄下。 - 無法找到
EasyTaintWrapperSource.txt
soot-infoflow-anadroid
項目編譯時提示找不到文件EasyTaintWrapperSource.txt
。該文件可在項目soot-infoflow
根目錄下找到,復制到soot-infoflow-anadroid
的根目錄下即可。
7、運行flowdroid:
直接運行soot.jimple.infoflow.android.TestApps下的test文件,得到的結果如下:
找到了一個從source到sink的信息流。
soot-infoflow-anadroid
項目提供了多個測試集,位於項目test
文件夾下,分別為:droidBench數據集測試、insecureBank.apk測試、otherAPKs測試、sourceToSinks測試和xmlParser測試。使用方法為,右擊對應的java文件,選擇Run As -> JUnit Test。
8、分析自定義文件:
分析自定義文件使用soot.jimple.infoflow.android.TestApps
中的Test.java
文件。該文件的輸入包括兩個參數:apk-file和android-jar-directory。配置方法如下:
右擊Test.java文件,選擇Run As -> Run Configurations…
左側選擇Java Application里面的Test(如果打開Configurations后,左側沒有Test,可先執行Run As -> Java Application),右側選擇Arguments標簽,里面寫入兩個參數,點擊Apply、Run,即可得到分析結果。

9、下一步將參考復旦楊珉教授團隊的工作,找接下來要做的方向和內容。優化flowdroid或者利用flowdroid做隱私泄露分析等。
10、問了一個師兄,他在做flowdroid的性能優化,以及結合符號執行去提升精度。開發了更多的模式,能夠更靈活的分析,比如針對特定的組件,特定的source、sink,還有后期結果處理部分策略的。