Dieses Repository enthält (wird) mehrere einfache Beispiele für die statische Programmanalyse in Java unter Verwendung von Soot.
Jeder, der die Java -Programmierung kennt und in der Praxis eine statische Analyse durchführen möchte, aber in der Theorie nichts über Ruß und statische Analyse weiß.
Wenn Sie Vorkenntnisse über die statische Programmanalyse haben, schlage ich vor, dass Sie von hier aus Ruß lernen.
Kurz gesagt, verwenden Sie Java 8 und rennen Sie./Gradlew ./gradlew build . Für weitere Informationen und Docker -Setup folgen diesem Link.
In diesem Kapitel besuchen Sie ein sehr einfaches Codebeispiel, um mit den Essentialdatenstrukturen und Jimple , der prinzipiellen Intermediate -Darstellung von Soot, vertraut zu sein.
./gradlew run --args="HelloSoot" : Die Jimple -Darstellung der Printfizzbuzz -Methode neben der Zweig -Anweisung../gradlew run --args="HelloSoot draw" : Die Visualisierung des Printfizzbuzz-Kontroll-Flow-Diagramms.| Titel | Tutorial | Rußcode | Beispieleingabe |
|---|---|---|---|
| Hallo Ruß | Dokument | Hellosoot.java | Fizzbuzz.java |

In diesem Kapitel kennen Sie einige grundlegende, aber nützliche Methoden in Soot, um den Java -Code zu lesen, zu analysieren und sogar zu aktualisieren.
./gradlew run --args="BasicAPI" : Analysieren Sie den Klassenkreis../gradlew run --args="BasicAPI draw" : Analysieren Sie den Klassenkreis und zeichnen Sie die Anrufdiagramme.| Titel | Tutorial | Rußcode | Beispieleingabe |
|---|---|---|---|
| Grundlegende API | Dokument | Basicapi.java | Kreis |

In diesem Kapitel lernen Sie, wie Sie Code in Android -Apps (ohne ihren Quellcode) mit Ruß einfügen. Um den Code auszuführen, benötigen Sie Android SDK (überprüfen Sie diesen Link).
./gradlew run --args="AndroidLogger" : Einfügen von Protokollierungsmethodenaufrufe zu Beginn der APK -Methoden des Numix -Rechners../gradlew run --args="AndroidClassInjector" Das instrumentierte APK befindet sich in demo/Android/Instrumented . Sie müssen es unterschreiben, um auf einem Android -Gerät zu installieren:
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 Um die Protokolle anzuzeigen, führen Sie adb logcat | grep -e "<SOOT_TUTORIAL>" aus adb logcat | grep -e "<SOOT_TUTORIAL>"
| Titel | Tutorial | Rußcode | Beispiel apk |
|---|---|---|---|
| Log -Methodenaufrufe in einer APK | Dokument | Androidlogger.java | Numix-Rechner (von f-droid) |
| Erstellen und injizieren Sie eine Klasse in eine APK | Dokument | Androidclassinjector.java | Numix-Rechner (von f-droid) |

In diesem Kapitel erhalten Sie einen kurzen Überblick O Rufdiagramme und Pointso -Analyse in Android und Sie lernen, wie Sie Aufrufdiagramme mit FlowDroid erstellen. Der Quellcode des Beispielcode ist hier. Um den Code auszuführen, benötigen Sie Android SDK (überprüfen Sie diesen Link).
./gradlew run --args="AndroidCallGraph <CG_Algorithm> (draw)" : Erstellen Sie den Anrufdiagramm der Soottutorial -Demo -App mit <CG_Algorithm> Algorithmus und Druckinformationen wie erreichbare Methoden oder die Anzahl der Kanten.<CG_Algorithm> kann SPARK oder CHA seindraw ist optional, wenn eine Visualisierung des Anrufdiagramms angezeigt wird../gradlew run --args="AndroidCallGraph SPARK draw" visualisiert den von Spark Algorithmus generierten Aufrufdiagramm../gradlew run --args="AndroidPTA" : Pointsto und Alias -Analyse zur Soottutorial -Demo -App mit FlowDroid durchführen.| Titel | Tutorial | Rußcode | Beispiel apk |
|---|---|---|---|
| Rufen Sie Diagramme in Android auf | Dokument | Androidcallgraph.java | Soottutorial Demo App (Quellcode) |
| Punktsto -Analyse in Android | Dokument | Androidpointstoanalyse.java | Soottutorial Demo App (Quellcode) |

./gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream" : Finden Sie Gebrauch der Methode mit der angegebenen Abonnements in allen Methoden von useageExample.java../gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream" : Finden Sie Gebrauch der Methode mit der angegebenen Abonnement der angegebenen Klassensignatur in allen Methoden von useageExample.java.| Titel | Tutorial | Rußcode | Beispieleingabe |
|---|---|---|---|
| Finden Sie Gebrauch einer Methode | Useagefinder.java | UsageExample.java | |
| Nullzeigeranalyse | NULLPOINTERANALYSE | Nullpointerexample.java |
| Titel | Tutorial | Rußcode | Beispieleingabe |
|---|---|---|---|