Este repositório contém (conterá) vários exemplos simples de análise estática do programa em Java usando fuligem.
Quem conhece a programação Java e deseja fazer alguma análise estática na prática, mas não sabe nada sobre fuligem e análise estática em teoria.
Se você tiver algum conhecimento prévio sobre a análise estática do programa, sugiro que você aprenda fuligem a partir daqui.
Em resumo, use Java 8 e Run ./gradlew build . Para obter mais informações e configuração do Docker, siga este link.
Neste capítulo, você visitará um exemplo de código muito simples para se familiarizar com estruturas de dados essenciais da fuligem e Jimple , a representação intermediária principal da Soot.
./gradlew run --args="HelloSoot" : a representação Jimple do método PrintFizzBuzz ao lado da instrução Branch../gradlew run --args="HelloSoot draw" : a visualização do gráfico de fluxo de controle printfizzbuzz.| Título | Tutorial | Código de fuligem | Exemplo de entrada |
|---|---|---|---|
| Olá fuligem | Doc | HelloSoot.java | Fizzbuzz.java |

Neste capítulo, você se familiariza com alguns métodos básicos, mas úteis, para ajudar a ler, analisar e até atualizar o código Java.
./gradlew run --args="BasicAPI" : analise o círculo de classe../gradlew run --args="BasicAPI draw" : Analise o círculo de classe e desenha o gráfico de chamada.| Título | Tutorial | Código de fuligem | Exemplo de entrada |
|---|---|---|---|
| API básica | Doc | Basicapi.java | Círculo |

Neste capítulo, você aprende a inserir código nos aplicativos Android (sem ter seu código -fonte) usando a fuligem. Para executar o código, você precisa do Android SDK (verifique este link).
./gradlew run --args="AndroidLogger" : Insira o método de log de chamadas no início dos métodos APK da calculadora Numix../gradlew run --args="AndroidClassInjector" : crie uma nova classe do zero e injete -a na calculadora Numix. O APK instrumentado está localizado em demo/Android/Instrumented . Você precisa assiná -lo para instalar em um 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 os logs, execute adb logcat | grep -e "<SOOT_TUTORIAL>"
| Título | Tutorial | Código de fuligem | Exemplo apk |
|---|---|---|---|
| O método de log chama em um apk | Doc | AndroidLogger.java | Calculadora de Numix (do F-Droid) |
| Crie e injete uma classe em um apk | Doc | AndroidClassinjector.java | Calculadora de Numix (do F-Droid) |

Este capítulo oferece uma breve visão geral do gráfico de chamadas e análise de Pointsto no Android e você aprende a criar chamadas gráficos usando o FlowDroid. O código -fonte do código de exemplo está aqui. Para executar o código, você precisa do Android SDK (verifique este link).
./gradlew run --args="AndroidCallGraph <CG_Algorithm> (draw)" : Crie o gráfico de chamada do aplicativo de demonstração Soottutorial usando <CG_Algorithm> algoritmo e informações de impressão, como métodos alcançáveis ou o número de arestas.<CG_Algorithm> pode ser SPARK ou CHAdraw é opcional, se for fornecido, uma visualização do gráfico de chamadas será mostrada../gradlew run --args="AndroidCallGraph SPARK draw" visualiza o gráfico de chamadas gerado pelo algoritmo Spark../gradlew run --args="AndroidPTA" : execute a análise Pointsto e Alias no aplicativo de demonstração Soottutorial usando o FlowDroid.| Título | Tutorial | Código de fuligem | Exemplo apk |
|---|---|---|---|
| Ligue para gráficos no Android | Doc | AndroidCallgraph.java | Aplicativo de demonstração soottorial (código -fonte) |
| Análise de Pointsto no Android | Doc | AndroidPointStoanalysis.java | Aplicativo de demonstração soottorial (código -fonte) |

./gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream" : encontre os usos do método com a subnignidade fornecida em todos os métodos de useexample.java../gradlew run --args="UsageFinder 'void println(java.lang.String)' 'java.io.PrintStream" : encontre usos do método com a subnignidade fornecida da assinatura de classe fornecida em todos os métodos de usogeExample.java.| Título | Tutorial | Código de fuligem | Exemplo de entrada |
|---|---|---|---|
| Encontre usos de um método | Usefinder.java | Useexample.java | |
| Análise de ponteiro nulo | NullPointeranálise | Nullpointerxample.java |
| Título | Tutorial | Código de fuligem | Exemplo de entrada |
|---|---|---|---|