上一篇介紹了flowdroid相關的內容,見http://www.cnblogs.com/zlz099/p/6924879.html,這一篇講一下flowdroid的構建與運行。html
其中遇到了不少坑,但參考了http://aaronmoment.cn/run-flowdroid/java
和https://traceflight.github.io/tech/build-and-run-flowdroid-in-eclipse.html的博客後終於把它跑起來了。別人的博客都是介紹在android
Linux和Mac OS x下的,我是在Windows下構建運行的。git
一、JDK必定要選擇jdk1.8以上的版本,1.7的版本會報錯Unsupported major.minor version 52.0github
二、首先,flowdroid官方文檔給出了兩種構建運行方式,分別是Obtaining the nightly builds和Building FlowDroid From Source。我選擇從源碼層構建flowdroid。性能優化
三、首先,從github上下載全部的項目到本地,解壓在同一個文件夾下。app
github介紹:https://github.com/secure-software-engineering/soot-infoflow-android/wikieclipse
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
四、導入eclipse:打開Eclipse選擇 File -> Import -> General -> Existing Projects into Workspace,分別導入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目錄下)。
六、其餘配置
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
的根目錄下便可。七、運行flowdroid:
直接運行soot.jimple.infoflow.android.TestApps下的test文件,獲得的結果以下:
找到了一個從source到sink的信息流。
soot-infoflow-anadroid
項目提供了多個測試集,位於項目test
文件夾下,分別爲:droidBench數據集測試、insecureBank.apk測試、otherAPKs測試、sourceToSinks測試和xmlParser測試。使用方法爲,右擊對應的java文件,選擇Run As -> JUnit Test。
八、分析自定義文件:
分析自定義文件使用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,便可獲得分析結果。
九、下一步將參考復旦楊珉教授團隊的工做,找接下來要作的方向和內容。優化flowdroid或者利用flowdroid作隱私泄露分析等。
十、問了一個師兄,他在作flowdroid的性能優化,以及結合符號執行去提高精度。開發了更多的模式,可以更靈活的分析,好比針對特定的組件,特定的source、sink,還有後期結果處理部分策略的。