Este repositorio contiene (contendrá) varios ejemplos simples de análisis de programas estáticos en Java usando Soot.
Cualquiera que conozca la programación de Java y quiera hacer un análisis estático en la práctica, pero no sabe nada sobre el análisis de hollín y estático en teoría.
Si tiene algún conocimiento previo sobre el análisis del programa estático, le sugiero que aprenda hollín desde aquí.
En resumen, use Java 8 y ejecute ./gradlew build . Para obtener más información y configuración de Docker, siga este enlace.
En este capítulo, visitará un ejemplo de código muy simple para estar familiarizado con las estructuras de datos esenciales de Soot y Jimple , la representación intermedia principal de Soot.
./gradlew run --args="HelloSoot" : la representación jimple del método PrintfizzBuzz junto con la declaración de rama../gradlew run --args="HelloSoot draw" : la visualización del gráfico PrintFizzBuzz Control-Flow.| Título | Tutorial | Código de hollín | Entrada de ejemplo |
|---|---|---|---|
| Hola hollín | Doc | Hellososoot.java | Fizzbuzz.java |

En este capítulo, se familiariza con algunos métodos básicos pero útiles en el hollín para ayudar a leer, analizar e incluso actualizar el código Java.
./gradlew run --args="BasicAPI" : analizar el círculo de clase../gradlew run --args="BasicAPI draw" : Analice el círculo de clase y dibuja el gráfico de llamadas.| Título | Tutorial | Código de hollín | Entrada de ejemplo |
|---|---|---|---|
| API básica | Doc | Basicapi.java | Círculo |

En este capítulo, aprende cómo insertar código en aplicaciones de Android (sin tener su código fuente) usando Soot. Para ejecutar el código, necesita Android SDK (verifique este enlace).
./gradlew run --args="AndroidLogger" : insertar llamadas del método de registro al comienzo de los métodos APK de la calculadora Numix../gradlew run --args="AndroidClassInjector" : cree una nueva clase desde cero e inyecte a la calculadora Numix. El APK instrumentado se encuentra en demo/Android/Instrumented . Debe firmarlo para instalar en un dispositivo 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 Para ver los registros, ejecute adb logcat | grep -e "<SOOT_TUTORIAL>"
| Título | Tutorial | Código de hollín | Ejemplo APK |
|---|---|---|---|
| Llamadas del método de registro en un APK | Doc | Androidlogger.java | Calculadora Numix (de F-Droid) |
| Crear e inyectar una clase en un APK | Doc | AndroidClassinjector.java | Calculadora Numix (de F-Droid) |

Este capítulo le brinda una breve descripción general de gráficos de llamadas y análisis de punta en Android y usted aprende cómo crear gráficos de llamadas usando FlowDroid. El código fuente del código de ejemplo está aquí. Para ejecutar el código, necesita Android SDK (verifique este enlace).
./gradlew run --args="AndroidCallGraph <CG_Algorithm> (draw)" : cree el gráfico de llamadas de la aplicación de demostración Soottutorial utilizando el algoritmo e información de impresión <CG_Algorithm> e información de impresión, como métodos accesibles o el número de bordes.<CG_Algorithm> puede ser SPARK o CHAdraw es opcional, si se proporciona una visualización del gráfico de llamadas../gradlew run --args="AndroidCallGraph SPARK draw" visualiza el gráfico de llamadas generado por el algoritmo Spark../gradlew run --args="AndroidPTA" : realice el análisis de puntos y alias en la aplicación de demostración Soottutorial usando FlowDroid.| Título | Tutorial | Código de hollín | Ejemplo APK |
|---|---|---|---|
| Llame a los gráficos en Android | Doc | Androidcallgraph.java | Aplicación de demostración de Soottutorial (código fuente) |
| Análisis de punta en Android | Doc | Androidpointstoanalysis.java | Aplicación de demostración de Soottutorial (código fuente) |

./gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream" : encuentre los usos del método con la subsignatura dada en todos los métodos de useExample.java../gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream" : Encuentre los usos del método con la subsignatura dada de la firma de clase dada en todos los métodos de useexample.java.| Título | Tutorial | Código de hollín | Entrada de ejemplo |
|---|---|---|---|
| Encontrar usos de un método | UseFefinder.java | UseExample.java | |
| Análisis de puntero nulo | Nullpointeranálisis | Nullpointerexample.java |
| Título | Tutorial | Código de hollín | Entrada de ejemplo |
|---|---|---|---|