Этот репозиторий содержит (будет содержать) несколько простых примеров анализа статической программы в Java с использованием сажи.
Любой, кто знает программирование Java и хочет провести статический анализ на практике, но в теории не знает ничего о саже и статическом анализе.
Если у вас есть некоторые предварительные знания об анализе статического программы, я предлагаю вам научиться здесь.
Короче говоря, используйте Java 8 и запустите ./gradlew build . Для получения дополнительной информации и настройки Docker перейдите по этой ссылке.
В этой главе вы посетите очень простой пример кода, чтобы познакомиться со структурами существенных данных, и Джимпл , принципиальное промежуточное представление.
./gradlew run --args="HelloSoot" : Jimple представление метода Printfizzbuzz вместе с заявлением филиала../gradlew run --args="HelloSoot draw" : визуализация графика управления PrintFizzBuzz.| Заголовок | Учебник | Код сажи | Пример ввода |
|---|---|---|---|
| Привет, сажа | Док | Hellosoot.java | Fizzbuzz.java |

В этой главе вы узнаете о некоторых основных, но полезных методах в сажи, чтобы помочь чтению, анализе и даже обновлению кода Java.
./gradlew run --args="BasicAPI" : проанализируйте круг классов../gradlew run --args="BasicAPI draw" : проанализируйте круг классов и рисует график вызовов.| Заголовок | Учебник | Код сажи | Пример ввода |
|---|---|---|---|
| Базовый API | Док | Basicapi.java | Круг |

В этой главе вы узнаете, как вставлять код в приложения Android (без их исходного кода) с использованием сажи. Чтобы запустить код, вам нужен Android SDK (проверьте эту ссылку).
./gradlew run --args="AndroidLogger" : вставьте вызовы метода журнала в начале методов APK калькулятора Numix../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>"
| Заголовок | Учебник | Код сажи | Пример APK |
|---|---|---|---|
| Вызовы метода журнала в APK | Док | Androidlogger.java | Калькулятор Numix (от F-Droid) |
| Создать и ввести класс в APK | Док | Androidclassinject.java | Калькулятор Numix (от F-Droid) |

Эта глава дает вам краткий обзор o Графики вызова и анализ Pointsto в Android, и вы узнаете, как создавать графики вызовов с использованием Flowdroid. Исходный код примера кода здесь. Чтобы запустить код, вам нужен Android SDK (проверьте эту ссылку).
./gradlew run --args="AndroidCallGraph <CG_Algorithm> (draw)" : Создайте график вызовов приложения SOOTTUTUTURIOR DEMO с использованием алгоритма <CG_Algorithm> , такого как достижимые методы или количество краев.<CG_Algorithm> может быть SPARK или CHAdraw аргумент необязательным, если предоставлена визуализация графа вызовов../gradlew run --args="AndroidCallGraph SPARK draw" визуализирует график вызовов, сгенерированный алгоритмом Spark../gradlew run --args="AndroidPTA" : выполнить анализ PointSto и псевдоним на приложении SOOTTUTUTURIOR DEMO с использованием FlowDroid.| Заголовок | Учебник | Код сажи | Пример APK |
|---|---|---|---|
| Звоните в графики в Android | Док | Androidcallgraph.java | Демонстрационное приложение SOOTTUTUTURIONE (исходный код) |
| Анализ Pointsto в Android | Док | AndroidpointStoanalysis.java | Демонстрационное приложение SOOTTUTUTURIONE (исходный код) |

./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" : найдите использование метода с данной подчиненной подписью класса во всех методах использования Example.java.| Заголовок | Учебник | Код сажи | Пример ввода |
|---|---|---|---|
| Найдите использование метода | USAGEFINDER.JAVA | UsageExample.java | |
| Анализ нулевого указателя | Нулевой товарнализ | NullPointerExample.java |
| Заголовок | Учебник | Код сажи | Пример ввода |
|---|---|---|---|