背景
在对移动应用进行安全分析的过程中,常常会需要用到静态分析技术,在不运行程序代码的情况下,通过对程序代码静态扫描的形式,实现对应用程序的分析,分析手段包括词法分析、语法分析、控制流分析等。
由于最近在做的课题需要自动化地对应用中跨组件通信(ICC)进行分析,参考了相关资料后,决定以基于Soot框架的开源ICC分析工具————ICCBot入手,进行自定义的修改与拓充。
本文主要讲述如何对ICCBot的项目依赖进行升级与改进。
项目依赖分析与修改
原版的ICCBot由中国科学院软件研究所的燕季薇博士维护。
原版开源地址:https://github.com/hanada31/ICCBot
简单来说,ICCBot是一个基于Soot框架,利用控制流与数据流分析对应用中ICC进行解析的工具,但其项目依赖中所用的Soot版本,以及用来生成CG的Flowdroid版本都年久失修,导致在实际使用的过程中会出现很多老问题。
因此需要对其项目依赖进行以下改良:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>ICCBot</groupId> <artifactId>ICCBot</artifactId> <version>1.0-SNAPSHOT</version>
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties>
<dependencies> <dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.4</version> </dependency>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
<dependency> <groupId>soot-infoflow-cmd-jar-with-dependencies</groupId> <artifactId>soot-infoflow-cmd-jar-with-dependencies</artifactId> <version>2.11.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/soot-infoflow-cmd-jar-with-dependencies.jar</systemPath> </dependency>
|
此处就出现了一个问题,由于原版ICCBot的Soot依赖是从远程soot-infoflows(即FlowDroid)的Maven仓库中进行获取,然而最新版FlowDroid并未在远程Maven仓库上进行同步。
因此如果按原始方法构建项目依赖的话,会导致所用的Flowdorid与Soot版本不同步(远程的Soot未更新)。需要自己手动地添加新版本Soot依赖,此处采用将其与FlowDroid合并打包的方式添加。
FlowDroid 2.10 :https://github.com/secure-software-engineering/FlowDroid/releases/tag/v2.10
选择soot-infoflow-cmd-jar-with-dependencies.jar,即带Soot依赖的版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
<dependency> <groupId>z3</groupId> <artifactId>z3</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>system</scope> <systemPath>${project.basedir}/lib/com.microsoft.z3_linux.jar</systemPath> </dependency>
<dependency> <groupId>apktool</groupId> <artifactId>apktool</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>system</scope> <systemPath>${project.basedir}/lib/apktool_2.7.0.jar</systemPath> </dependency> <dependency> <groupId>gator</groupId> <artifactId>gator</artifactId> <version>0.0.1-SNAPSHOT</version> <scope>system</scope> <systemPath>${project.basedir}/lib/sootandroid-1.0-SNAPSHOT-all.jar</systemPath> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>test</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.75</version> </dependency>
<dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.3</version> </dependency> </dependencies> <distributionManagement> <snapshotRepository> <id>ossrh</id> <url>https://oss.sonatype.org/content/repositories/snapshots</url> </snapshotRepository> </distributionManagement> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <groupId>com.jolira</groupId> <artifactId>onejar-maven-plugin</artifactId> <version>1.4.4</version> <executions> <execution> <configuration> <mainClass>main.java.MainClass</mainClass> <attachToBuild>true</attachToBuild> <classifier>onejar</classifier> <filename>ICCBot.jar</filename> </configuration> <goals> <goal>one-jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
|
新版本适配
修改后还需要替换原版ICCBot中,调起的FlowDroid分析接口:
src/main/java/client/cg/CgConstructor.java
1 2 3
|
setupApplication.constructCallgraph();
|
修改后运行还是会存在不少报错,依旧是类似的适配思路:
首先参照报错的信息,定位到具体的代码,并对其所调用的新旧Soot/FlowDroid版本API,一一结合Github上的更新记录进行了对比与修改。
以此在保留代码原有功能的基础上进行了接口的升级。主要集中在Manifest、Call Graph等功能模块
具体的修改可参考:https://github.com/Canonize/modified-ICCBot/commit/d5c43afb2f6ffdb56e4ff0abb7cc61d778917fc5
新项目依赖构成
新项目开源地址:https://github.com/Canonize/modified-ICCBot
新版Flowdroid/IccTA :
modified-ICCBot/lib/soot-infoflow-cmd-jar-with-dependencies.jar
ICCBot <- 新版Flowdroid/IccTA 部分 :modified-ICCBot/src/main/java/client/cg/
部分参考资料:
原版ICCBot论文:https://hanada31.github.io/pdf/icse22_iccbot.pdf
远程FlowDroid及Soot依赖版本信息:https://mvnrepository.com/artifact/de.tud.sse/soot-infoflow/2.8
FlowDroid版本更新:https://github.com/Canonize/FlowDroid/commits/develop
Soot版本更新:https://github.com/soot-oss/soot/commits/develop