参考教程
https://github.com/noidsirius/SootTutorial
1. Windows Soot 环境配置
下载代码
git 拷贝仓库
git init
git clone https://github.com/noidsirius/SootTutorial.git
./gradlew.bat build
报错:Unsupported class file major version 57
./gradlew.bat build时,报错如下:
* What went wrong:
Could not compile settings file 'E:\AcademicWorkplace\Soot\Soot1\SootTutorial\settings.gradle'.
> startup failed:
General error during semantic analysis: Unsupported class file major version 57
原因:
这是因为Gradle 5 is incompatible with Java 13
需要:
或者update Gradle (the wrapped version in your project) to Gradle 6 or later
或者use a lower version of the JRE
解决方法:
需要进入\SootTutorial\gradle\wrapper
修改gradle-wrapper.properties
改为:distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
参考:https://stackoverflow.com/a/63548566
报错:\Library\Android\sdk\platforms does not exist!
./gradlew.bat build时,报错如下:
例如
dev.navids.soottutorial.android.CGPTATest > testPointsToAnalysis FAILED
soot.AndroidPlatformException: Android platform directory 'C:\Users\juruo\Library\Android\sdk\platforms' does not exist!
原因:
Soot代码中使用了Android-SDK,但是系统环境变量中没有"ANDROID_HOME"
例如AndroidCallgraph.java中:
解决方法:
添加系统环境变量:
build成功
./gradlew.bat build
2. Linux Soot 环境配置
build报错:-bash: ./gradlew: Permission denied
$ ./gradlew build
-bash: ./gradlew: Permission denied
解决:
chmod +x gradlew
3. 生成Android app的call graph
命令格式:
./gradlew.bat run --args="AndroidCallGraph <CG_Algorithm> (draw)"
例如:
./gradlew.bat run --args="AndroidCallGraph SPARK draw"
首先会进入Main.java
位于\SootTutorial\src\main\java\dev\navids\soottutorial\Main.java
会根据"AndroidCallGraph"
调用到AndroidCallgraph.main方法。
AndroidCallgraph.main方法的参数为--args
中除了"AndroidCallGraph"
以外的其余部分。
AndroidCallgraph.main方法在AndroidCallgraph.java
Example APK在/SootTutorial/demo/Android/st_demo.apk
结果:
每次修改代码后,要重新运行一次./gradlew.bat build
添加功能
创建
\SootTutorial\src\main\java\dev\navids\soottutorial\android\AndroidReachMethod.java
写AndroidReachMethod.main方法:
// ./gradlew.bat run --args="AndroidReachMethod <CG_Algorithm> <apkPath> <apkMainActivityName> <targetMethodCls> <targetMethodRet> <targetMethodName>"
此处省略具体代码
改Main.java:
测试
./gradlew.bat build
./gradlew.bat run --args="AndroidReachMethod SPARK E:\AcademicWorkplace\DeviceIntegrity\LargeScalScan\testCase\st_demo.apk dev.navids.multicomp1.MainActivity dev.navids.multicomp1.ClassParent void unreachableMethod()"