使用Intellij IDEA的 FlowDroid 安裝&測試


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM