上一篇介绍了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,还有后期结果处理部分策略的。