使用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

posted @ 2022-03-18 14:48  Erio  阅读(1244)  评论(9编辑  收藏  举报