Tiro เป็นกรอบการทำซ้ำแบบไฮบริดซ้ำสำหรับแอปพลิเคชัน Android ชื่อของมันหมายถึงสี่ขั้นตอน: Target Instrument Run และ Observe วิธีการของ Tiro ใช้แนวคิดของการดำเนินการตามเป้าหมาย (ดูเครื่องมือก่อนหน้าของเรา Intellidroid) เพื่อระบุตำแหน่งของการทำให้งงงวยที่เป็นไปได้อย่างคงที่และกำหนดอินพุตเพื่อกระตุ้นตำแหน่งรหัสเหล่านี้ ด้วยการใช้เครื่องมือเหล่านี้และดำเนินการโดยใช้ข้อมูลการกำหนดเป้าหมายข้อมูลการทำ deobfuscation แบบรันไทม์สามารถรวบรวมและส่งกลับไปยังการวิเคราะห์แบบคงที่เพื่อ deobfuscate แอปพลิเคชันและบรรลุผลการวิเคราะห์ที่สมบูรณ์ยิ่งขึ้น
สำหรับรายละเอียดเพิ่มเติมโปรดดูบทความของเราที่เผยแพร่ใน USENIX Security 2018
ปัจจุบันรหัสในที่เก็บนี้มีรหัสฐานสำหรับขั้นตอน Target และส่วนใหญ่เป็นพอร์ตขององค์ประกอบคงที่ของ Intellidroid ไปยังกรอบเขม่า เราวางแผนที่จะปล่อยรหัสสำหรับขั้นตอน Tiro อื่น ๆ ในอนาคต
การวิเคราะห์แบบคงที่ของ Tiro ประกอบด้วย Target และขั้นตอน Instrument ในขั้นตอน Target จะมีการระบุตำแหน่งของการทำให้งงงวยและเส้นทางการโทรไปยังสถานที่เหล่านั้นจะถูกสกัด สำหรับแต่ละเส้นทาง Tiro รวบรวมข้อ จำกัด ที่กำหนดอินพุตที่ต้องฉีดเพื่อกระตุ้นเส้นทางแบบไดนามิก ขณะนี้เราใช้ตัวแก้ข้อ จำกัด Z3 และแปลงข้อ จำกัด เป็นรูปแบบ Z3-PY และ Z3-Java
องค์ประกอบการวิเคราะห์แบบคงที่ต้องการ Java 8 (JDK 1.8)
ที่เก็บนี้มีการพึ่งพาที่เก็บ android-platforms ซึ่งมีไลบรารี Android Framework ที่ใช้โดยแอปพลิเคชัน การพึ่งพานี้เป็น submodule ภายในโครงการ เพื่อโคลน tiro กับ submodule, run:
git clone --recursive [email protected]:miwong/tiro.git
หรือถ้าคุณโคลน tiro แล้วโดยไม่มี submodule ให้รัน:
git submodule update --init --recursive
ทำให้ใช้เวลาหลายนาทีเนื่องจากห้องสมุด Android Framework มีขนาดใหญ่
โครงการนี้ใช้ระบบการสร้าง Gradle ไฟล์เอาต์พุตอยู่ใน build/ Directory สคริปต์ Gradlew เป็นเครื่องห่อหุ้มสำหรับเครื่องจักรที่ไม่ได้ติดตั้ง Gradle แล้ว หากเครื่องพัฒนาของคุณมี Gradle อยู่แล้วคุณสามารถใช้การติดตั้งของคุณเองได้โดยแทนที่ ./gradlew gradlew ด้วย gradle ในคำสั่งด้านล่าง จำเป็นต้องมีการเชื่อมต่อเครือข่ายเมื่อรวบรวมรหัสเป็นครั้งแรกเพื่อให้ Gradle สามารถดาวน์โหลดการพึ่งพาได้โดยอัตโนมัติ
เพื่อสร้าง:
./gradlew build
เพื่อสร้างและเรียกใช้:
./TIROStaticAnalysis <APK>
โดยค่าเริ่มต้น Tiro เขียนผลการวิเคราะห์แบบคงที่ลงในไดเรกทอรี tiroOutput ตัวเลือก -o อนุญาตให้เปลี่ยนสิ่งนี้ หากต้องการดูตัวเลือกบรรทัดคำสั่งอื่น ๆ เรียกใช้:
./TIROStaticAnalysis --help
ปัจจุบันเอาต์พุตการวิเคราะห์แบบคงที่ของ Tiro (เช่น appInfo.json ) ไม่เข้ากันกับ Intellidroid ในขณะที่เราปล่อยองค์ประกอบแบบไดนามิกของ Tiro เราจะอัปเดตไคลเอนต์แบบไดนามิกที่ใช้ใน Intellidroid เพื่อให้การสกัดข้อ จำกัด ของ Tiro สามารถรวมเข้ากับการวิเคราะห์แบบไดนามิก
Tiro สร้างขึ้นบนกรอบการวิเคราะห์แบบคงที่เขม่า มีการปรับเปลี่ยนหลายครั้งเพื่อสร้างกราฟการโทรของเขม่าเพื่อปรับปรุงกราฟการโทรด้วยขอบที่แสดงถึงการไหลของการดำเนินการเฉพาะ Android (เช่น Intents) การดัดแปลงถูกตีพิมพ์ในที่เก็บแยกต่างหากที่นี่
เนื่องจากแอปพลิเคชัน Android นั้นขับเคลื่อนด้วยเหตุการณ์จุดเข้าสู่แอปพลิเคชันจะต้องคำนวณเพื่อให้ได้การวิเคราะห์ที่สมบูรณ์ Tiro ใช้การค้นพบจุดเริ่มต้นที่ใช้ใน FlowDroid มีการปรับเปลี่ยนเล็กน้อยในรหัสเข้าสู่จุดนี้เพื่อแยกข้อมูลที่จำเป็นโดยการวิเคราะห์ของ Tiro การเปลี่ยนแปลงเหล่านี้จะถูกเก็บไว้ใน static/src/soot/ และ static/src/tiro/target/entrypoint/
ต่อไปนี้ได้มีส่วนร่วมในการใช้รหัสเพื่อ Tiro:
Tiro ได้รับการพัฒนาเป็นโครงการระดับปริญญาเอกโดย Michelle Wong ที่มหาวิทยาลัยโตรอนโต สำหรับข้อสงสัยใด ๆ โปรดติดต่อ Michelle ที่ [email protected]
Tiro ได้รับการปล่อยตัวภายใต้ใบอนุญาตสาธารณะ GNU Lesser ทั่วไปรุ่น 2.1