このリポジトリには、SOOTを使用したJavaの静的プログラム分析のいくつかの簡単な例が含まれています(含まれます)。
Javaプログラミングを知っており、実際に静的分析を行いたいが、理論ではすすと静的分析について何も知らない人。
静的プログラム分析に関する事前知識がある場合は、ここからすすを学ぶことをお勧めします。
要するに、Java 8を使用して、 ./gradlew buildを実行します。詳細とDockerのセットアップについては、このリンクをフォローしてください。
この章では、Soot Essential Data構造とSootの主要な中間表現であるJimpleに精通するために、非常に簡単なコードの例にアクセスします。
./gradlew run --args="HelloSoot" :Branchステートメントとともにprintfizzbuzzメソッドのジンプル表現。./gradlew run --args="HelloSoot draw" :printfizzbuzzコントロールフローグラフの視覚化。| タイトル | チュートリアル | すすコード | インプットの例 |
|---|---|---|---|
| こんにちはすす | doc | hellosoot.java | fizzbuzz.java |

この章では、Sootの基本的で有用な方法に精通して、Javaコードの読み、分析、さらには更新するのに役立ちます。
./gradlew run --args="BasicAPI" :クラスサークルを分析します。./gradlew run --args="BasicAPI draw" :クラスサークルを分析し、コールグラフを描画します。| タイトル | チュートリアル | すすコード | インプットの例 |
|---|---|---|---|
| 基本的なAPI | doc | basicapi.java | 丸 |

この章では、Sootを使用して(ソースコードを持たない)Androidアプリにコードを挿入する方法を学びます。コードを実行するには、Android SDKが必要です(このリンクを確認してください)。
./gradlew run --args="AndroidLogger" :numix計算機のAPKメソッドの開始時にロギングメソッド呼び出しを挿入します。./gradlew run --args="AndroidClassInjector" :ゼロから新しいクラスを作成し、numix計算機に挿入します。機器の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>"を実行しますadb logcat | grep -e "<SOOT_TUTORIAL>"
| タイトル | チュートリアル | すすコード | 例APK |
|---|---|---|---|
| APKでのログメソッド呼び出し | doc | androidlogger.java | numix計算機(f-droidから) |
| クラスを作成してAPKに注入します | doc | androidclassinjector.java | numix計算機(f-droidから) |

この章では、Androidでのコールグラフとポイントストー分析の簡単な概要を説明し、FlowDroidを使用してコールグラフを作成する方法を学びます。サンプルコードのソースコードはこちらです。コードを実行するには、Android SDKが必要です(このリンクを確認してください)。
./gradlew run --args="AndroidCallGraph <CG_Algorithm> (draw)" : <CG_Algorithm> algorithmを使用して、到達可能な方法やエッジ数などの情報を印刷するSoottutorialデモアプリのコールグラフを作成します。<CG_Algorithm> 、 SPARKまたはCHAにすることができますdraw引数はオプションです。./gradlew run --args="AndroidCallGraph SPARK draw" Sparkアルゴリズムによって生成されたコールグラフを視覚化します。./gradlew run --args="AndroidPTA" :FlowDroidを使用したSoottutorial DemoアプリでPointStoおよびAlias分析を実行します。| タイトル | チュートリアル | すすコード | 例APK |
|---|---|---|---|
| Androidでグラフを呼び出します | doc | androidcallgraph.java | Soottutorialデモアプリ(ソースコード) |
| AndroidのPointSto分析 | doc | AndroidPointStoAnalysis.java | Soottutorialデモアプリ(ソースコード) |

./gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream" :usageexample.javaのすべての方法で、指定されたサブ署名を使用したメソッドの使用法を見つけます。./gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream" :usageexample.javaのすべての方法で、指定されたクラス署名の特定の署名を使用したメソッドの使用法を見つけます。| タイトル | チュートリアル | すすコード | インプットの例 |
|---|---|---|---|
| メソッドの使用法を見つけます | usagefinder.java | usageexample.java | |
| ヌルポインター分析 | nullpointeranalysis | nullpointerexample.java |
| タイトル | チュートリアル | すすコード | インプットの例 |
|---|---|---|---|