上一篇介绍了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开发的都在AndroidSDKplatform文件夹下。
一个是droidbench,DroidBench是用于评估Android软件污点分析工具有效性的开源测试集,FlowDroid中的测试代码部分使用到了DROIDBENCH环境变量,在分析自定义软件时不需要该变量。因此,该数据集不是运行FlowDroid的必须文件。下载地址是https://github.com/secure-software-engineering/DroidBench。如果是分析自己的软件,则不需要下载droidbench(个人见解,最好下载)。
配置环境变量:android_jar: E:AndroidSDKplatformsandroid-19android.jar(自己找)
droidbench:E:MyJavaflowdroidsoot-infoflow-android estsootjimpleinfoflowandroid estdroidBench(在自己本地的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,还有后期结果处理部分策略的。