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