Ce référentiel contient (contiendra) plusieurs exemples simples d'analyse de programme statique en Java en utilisant Soot.
Quiconque connaît Java programmer et veut faire une analyse statique dans la pratique mais ne sait rien de la suie et de l'analyse statique en théorie.
Si vous avez des connaissances antérieures sur l'analyse de programme statique, je vous suggère d'apprendre de la suie à partir d'ici.
En bref, utilisez Java 8 et exécutez ./gradlew build . Pour plus d'informations et la configuration de Docker, suivez ce lien.
Dans ce chapitre, vous visiterez un exemple de code très simple pour vous familiariser avec Soot Essential Data Structures et Jimple , la représentation intermédiaire principale de Soot.
./gradlew run --args="HelloSoot" : la représentation jimple de la méthode printfizzbuzz à côté de l'instruction de branche../gradlew run --args="HelloSoot draw" : la visualisation du graphique de contrôle de contrôle printfizzzbuzz.| Titre | Tutoriel | Code de suie | Exemple d'entrée |
|---|---|---|---|
| Bonjour suie | Doc | Hellosoot.java | Fizzbuzz.java |

Dans ce chapitre, vous vous familiarisez avec certaines méthodes de base mais utiles dans Soot pour aider à lire, analyser et même mettre à jour le code Java.
./gradlew run --args="BasicAPI" : analyser le cercle de classe../gradlew run --args="BasicAPI draw" : analysez le cercle de classe et dessine le graphique d'appel.| Titre | Tutoriel | Code de suie | Exemple d'entrée |
|---|---|---|---|
| API de base | Doc | Basicapi.java | Cercle |

Dans ce chapitre, vous apprenez à insérer du code dans Android Apps (sans avoir leur code source) en utilisant Soot. Pour exécuter le code, vous avez besoin d'Android SDK (vérifiez ce lien).
./gradlew run --args="AndroidLogger" : insérer les appels de méthode de journalisation au début des méthodes APK de la calculatrice NuMIX../gradlew run --args="AndroidClassInjector" : Créez une nouvelle classe à partir de zéro et injectez-la à la calculatrice NuMIX. L'APK instrumenté est situé dans demo/Android/Instrumented . Vous devez le signer pour installer sur un appareil 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 Pour voir les journaux, exécutez adb logcat | grep -e "<SOOT_TUTORIAL>"
| Titre | Tutoriel | Code de suie | Exemple APK |
|---|---|---|---|
| Les appels de la méthode du journal dans un apk | Doc | Androidlogger.java | Calculatrice Numix (à partir de F-Droid) |
| Créer et injecter une classe dans un apk | Doc | AndroidClassInjector.java | Calculatrice Numix (à partir de F-Droid) |

Ce chapitre vous donne un bref aperçu des graphiques d'appels et de l'analyse Pointsto dans Android et vous apprenez à créer des graphiques d'appels à l'aide de FlowDroid. Le code source de l'exemple de code est ici. Pour exécuter le code, vous avez besoin d'Android SDK (vérifiez ce lien).
./gradlew run --args="AndroidCallGraph <CG_Algorithm> (draw)" : Créez le graphique d'appel de l'application de démonstration de SOOTUTORAL à l'aide de l'algorithme <CG_Algorithm> et de l'information imprimée tels que des méthodes accessibles ou le nombre de bords.<CG_Algorithm> peut être SPARK ou CHAdraw est facultatif, s'il est fourni qu'une visualisation du graphique d'appel sera affichée../gradlew run --args="AndroidCallGraph SPARK draw" Visualize Le graphique d'appel généré par l'algorithme Spark../gradlew run --args="AndroidPTA" : effectuez l'analyse Pointsto et Alias sur l'application de démonstration SOOTTUTORAL à l'aide de FlowDroid.| Titre | Tutoriel | Code de suie | Exemple APK |
|---|---|---|---|
| Appel graphiques dans Android | Doc | Androidcallgraph.java | Application de démonstration SOOTTUTORAL (code source) |
| Analyse Pointsto dans Android | Doc | Androidpointstoanalysis.java | Application de démonstration SOOTTUTORAL (code source) |

./gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream" : trouver des usages de la méthode avec la subsignation donnée dans toutes les méthodes d'usageExample.java../gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream" : trouvez des usages de la méthode avec la subsignation donnée de la signature de classe donnée dans toutes les méthodes d'usageExample.java.| Titre | Tutoriel | Code de suie | Exemple d'entrée |
|---|---|---|---|
| Trouver des usages d'une méthode | Usagefinder.java | UsageExample.java | |
| Analyse du pointeur nul | Nullpointeranalysis | NullpointerExample.java |
| Titre | Tutoriel | Code de suie | Exemple d'entrée |
|---|---|---|---|