이 저장소에는 그을음을 사용하여 Java의 정적 프로그램 분석의 몇 가지 간단한 예제가 포함되어 있습니다.
Java 프로그래밍을 알고 실제로 정적 분석을하고 싶어하지만 이론적으로 그을음과 정적 분석에 대해서는 아무것도 모른다.
정적 프로그램 분석에 대한 사전 지식이 있다면 여기에서 그을음을 배우는 것이 좋습니다.
요컨대, Java 8을 사용하고 ./gradlew build 실행하십시오. 자세한 정보 및 Docker 설정은이 링크를 따르십시오.
이 장에서는 그을음 필수 데이터 구조와 Jimple 인 Soot의 원칙 중간 표현에 익숙한 매우 간단한 코드 예제를 방문합니다.
./gradlew run --args="HelloSoot" : Branch 문과 함께 PrintFizzBuzz 메소드의 Jimple 표현../gradlew run --args="HelloSoot draw" : PrintFizzBuzz Control-Flow 그래프의 시각화.| 제목 | 지도 시간 | 그을음 코드 | 예제 입력 |
|---|---|---|---|
| 안녕하세요 그 그을음 | 의사 | hellosoot.java | fizzbuzz.java |

이 장에서는 Soot의 기본이지만 유용한 방법에 익숙해지면 Java 코드를 읽고, 분석하고, 업데이트 할 수 있습니다.
./gradlew run --args="BasicAPI" : 클래스 원을 분석합니다../gradlew run --args="BasicAPI draw" : 클래스 원을 분석하고 호출 그래프를 그립니다.| 제목 | 지도 시간 | 그을음 코드 | 예제 입력 |
|---|---|---|---|
| 기본 API | 의사 | Basicapi.java | 원 |

이 장에서는 Soot를 사용하여 소스 코드가없는 Android 앱에 코드를 삽입하는 방법을 배웁니다. 코드를 실행하려면 Android SDK가 필요합니다 (이 링크 확인).
./gradlew run --args="AndroidLogger" : Numix 계산기의 APK 메서드의 시작 부분에서 로깅 메소드를 삽입합니다../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>" 실행하십시오 adb logcat | grep -e "<SOOT_TUTORIAL>"
| 제목 | 지도 시간 | 그을음 코드 | 예제 APK |
|---|---|---|---|
| APK에서 로그 메소드 호출 | 의사 | AndroidLogger.java | Numix 계산기 (F-Droid) |
| 클래스를 APK에 생성하고 주입하십시오 | 의사 | androidclassinjector.java | Numix 계산기 (F-Droid) |

이 장에서는 Android에서 간단한 개요 o 통화 그래프 및 포인트 스토 분석을 제공하며 FlowDroid를 사용하여 통화 그래프를 만드는 방법을 배웁니다. 예제 코드의 소스 코드는 여기에 있습니다. 코드를 실행하려면 Android SDK가 필요합니다 (이 링크 확인).
./gradlew run --args="AndroidCallGraph <CG_Algorithm> (draw)" : <CG_Algorithm> 알고리즘 및 도달 가능한 방법 또는 가장자리 수와 같은 인쇄 정보를 사용하여 SootTutiorial Demo App의 호출 그래프를 만듭니다.<CG_Algorithm> SPARK 또는 CHA 일 수 있습니다draw 인수는 선택 사항이며, 제공되는 경우 호출 그래프의 시각화에 표시됩니다../gradlew run --args="AndroidCallGraph SPARK draw" Spark 알고리즘으로 생성 된 통화 그래프를 시각화합니다../gradlew run --args="AndroidPTA" : flowdroid를 사용하여 Soottutorial 데모 앱에서 PointSto 및 Alias 분석을 수행하십시오.| 제목 | 지도 시간 | 그을음 코드 | 예제 APK |
|---|---|---|---|
| 안드로이드에서 그래프를 호출하십시오 | 의사 | AndroidCallgraph.java | Soottutorial 데모 앱 (소스 코드) |
| 안드로이드의 포인트 스타 분석 | 의사 | AndroidpointStoAnalysis.java | Soottutorial 데모 앱 (소스 코드) |

./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" : 모든 usageexample.java의 모든 메소드에서 주어진 클래스 서명의 주어진 하위 서명으로 메소드의 사용법을 찾으십시오.| 제목 | 지도 시간 | 그을음 코드 | 예제 입력 |
|---|---|---|---|
| 방법의 사용법을 찾으십시오 | usagefinder.java | usageexample.java | |
| 널 포인터 분석 | nullpointeranalysis | nullpointerexample.java |
| 제목 | 지도 시간 | 그을음 코드 | 예제 입력 |
|---|---|---|---|