ที่เก็บนี้มี (จะมี) ตัวอย่างง่ายๆหลายประการของการวิเคราะห์โปรแกรมแบบคงที่ใน Java โดยใช้เขม่า
ใครก็ตามที่รู้การเขียนโปรแกรม Java และต้องการทำการวิเคราะห์แบบคงที่ในทางปฏิบัติ แต่ไม่รู้อะไรเกี่ยวกับการวิเคราะห์เขม่าและการวิเคราะห์แบบคงที่ในทางทฤษฎี
หากคุณมีความรู้ก่อนหน้านี้เกี่ยวกับการวิเคราะห์โปรแกรมแบบคงที่ฉันขอแนะนำให้คุณเรียนรู้เขม่าจากที่นี่
ในระยะสั้นให้ใช้ Java 8 และ Run ./gradlew build สำหรับข้อมูลเพิ่มเติมและการตั้งค่า Docker ให้ไปที่ลิงค์นี้
ในบทนี้คุณจะเยี่ยมชมตัวอย่างโค้ดที่ง่ายมากเพื่อทำความคุ้นเคยกับโครงสร้างข้อมูลที่จำเป็นของเขม่าและ Jimple ซึ่งเป็นตัวแทนหลักของ Soot
./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 | เอกสาร | Androidclassinjector.java | เครื่องคิดเลข numix (จาก F-Droid) |

บทนี้ให้ภาพรวมโดยย่อ o กราฟการโทรและการวิเคราะห์ PointSto ใน Android และคุณเรียนรู้วิธีการสร้างกราฟการโทรโดยใช้ flowDroid ซอร์สโค้ดของรหัสตัวอย่างอยู่ที่นี่ ในการเรียกใช้รหัสคุณต้องใช้ Android SDK (ตรวจสอบลิงค์นี้)
./gradlew run --args="AndroidCallGraph <CG_Algorithm> (draw)" : สร้างกราฟการโทรของแอพสาธิต SoottUtorial โดยใช้อัลกอริทึม <CG_Algorithm> และข้อมูลการพิมพ์เช่นวิธีการเข้าถึงหรือจำนวนขอบ<CG_Algorithm> สามารถ SPARK หรือ CHAdraw เป็นตัวเลือกหากมีการแสดงภาพกราฟการโทรจะแสดง./gradlew run --args="AndroidCallGraph SPARK draw" แสดงภาพกราฟการโทรที่สร้างโดยอัลกอริทึม Spark./gradlew run --args="AndroidPTA" : ทำการวิเคราะห์ PointSto และนามแฝงในแอพสาธิต Soottutorial โดยใช้ FlowDroid| ชื่อ | การสอน | รหัสเขม่า | ตัวอย่าง apk |
|---|---|---|---|
| เรียกกราฟใน Android | เอกสาร | Androidcallgraph.java | แอพสาธิต Soottutorial (ซอร์สโค้ด) |
| การวิเคราะห์ PointSto ใน Android | เอกสาร | 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" : ค้นหาวิธีการของวิธีการที่มีการลงนามในชั้นเรียนที่กำหนดในทุกวิธี| ชื่อ | การสอน | รหัสเขม่า | อินพุตตัวอย่าง |
|---|---|---|---|
| ค้นหาวิธีการของวิธีการ | usagefinder.java | usageExample.java | |
| การวิเคราะห์ตัวชี้ว่างเปล่า | nullpointeranalysis | nullpointerexample.java |
| ชื่อ | การสอน | รหัสเขม่า | อินพุตตัวอย่าง |
|---|---|---|---|