SootTutorial
1.0.0
该存储库包含(将包含)使用SOOT在Java中静态程序分析的几个简单示例。
任何了解Java编程并希望在实践中进行一些静态分析但对理论上对烟灰和静态分析一无所知的人。
如果您对静态程序分析有一些先验知识,我建议您从这里学习烟灰。
简而言之,使用Java 8并运行./gradlew build 。有关更多信息和Docker设置,请遵循此链接。
在本章中,您将访问一个非常简单的代码示例,以熟悉烟灰基本数据结构和Jimple (Soot的原理中间表示)。
./gradlew run --args="HelloSoot"./gradlew run --args="HelloSoot draw"| 标题 | 教程 | 烟灰码 | 示例输入 |
|---|---|---|---|
| 你好烟灰 | Doc | Hellosoot.java | fizzbuzz.java |

在本章中,您会熟悉烟灰中的一些基本但有用的方法,以帮助阅读,分析甚至更新Java代码。
./gradlew run --args="BasicAPI" :分析类圆。./gradlew run --args="BasicAPI draw" :分析类圆圈并绘制呼叫图。| 标题 | 教程 | 烟灰码 | 示例输入 |
|---|---|---|---|
| 基本API | Doc | basicapi.java | 圆圈 |

在本章中,您将学习如何使用SOOT插入Android应用程序(无需源代码)。要运行代码,您需要Android SDK(检查此链接)。
./gradlew run --args="AndroidLogger"./gradlew run --args="AndroidClassInjector" :从头开始创建一个新类,并将其注入Numix Calculator。仪器APK位于demo/Android/Instrumented中。您需要签名才能在Android设备上安装:
cd ./demo/Android
# on Windows, replace 'sign.sh' by 'sign.ps1'
./sign.sh Instrumented/calc.apk key " android "
adb install -r -t Instrumented/calc.apk要查看日志,请运行adb logcat | grep -e "<SOOT_TUTORIAL>"
| 标题 | 教程 | 烟灰码 | 示例APK |
|---|---|---|---|
| apk中的日志方法调用 | Doc | androidlogger.java | Numix计算器(来自F-Droid) |
| 创建并将一类注入APK | Doc | androidClassIndector.java | Numix计算器(来自F-Droid) |

本章为您提供了简短的概述o呼叫图和Android中的PointSto分析,您将学习如何使用FlowDroid创建呼叫图。示例代码的源代码在这里。要运行代码,您需要Android SDK(检查此链接)。
./gradlew run --args="AndroidCallGraph <CG_Algorithm> (draw)" <CG_Algorithm><CG_Algorithm>可以是SPARK或CHAdraw参数是可选的,如果提供了呼叫图的可视化。./gradlew run --args="AndroidCallGraph SPARK draw"可视化Spark算法生成的呼叫图。./gradlew run --args="AndroidPTA"| 标题 | 教程 | 烟灰码 | 示例APK |
|---|---|---|---|
| 在Android中调用图形 | Doc | AndroidCallgraph.java | Soottutorial Demo应用程序(源代码) |
| Android中的Pointsto分析 | Doc | androidpointStoanalysis.Java | Soottutorial Demo应用程序(源代码) |

./gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream"./gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream"| 标题 | 教程 | 烟灰码 | 示例输入 |
|---|---|---|---|
| 查找方法的用法 | USAGEFINDER.JAVA | usageExample.java | |
| 空指针分析 | 无零分解 | nullpointerexample.java |
| 标题 | 教程 | 烟灰码 | 示例输入 |
|---|---|---|---|