ที่เก็บนี้เป็นโฮสต์เครื่องมือวิเคราะห์การไหลของข้อมูล flowdroid FlowDroid คำนวณการไหลของข้อมูลในแอพ Android และโปรแกรม Java เป้าหมายคือเพื่อให้นักวิจัยและผู้ปฏิบัติงานมีเครื่องมือและห้องสมุดที่พวกเขาสามารถใช้โครงการวิจัยและการนำไปใช้ผลิตภัณฑ์ของตนเอง เรามีความสุขที่ได้เห็นว่า FlowDroid ใช้กันอย่างแพร่หลายในสถาบันการศึกษาและอุตสาหกรรม
คุณสามารถสร้าง flowdroid ด้วยตัวเองโดยใช้ Maven หรือคุณสามารถดาวน์โหลดรีลีสจากที่นี่บน GitHub
ตอนนี้ FlowDroid สามารถพบได้ใน Maven Central ในการใช้ flowdroid ในการสร้าง maven ของคุณให้รวมสิ่งต่อไปนี้ในไฟล์ pom.xml ของคุณ เราขอแนะนำให้ใช้เวอร์ชันล่าสุดและยิ่งใหญ่ที่สุดเว้นแต่คุณจะมีปัญหาเฉพาะที่ป้องกันไม่ให้คุณทำเช่นนั้น ในกรณีนั้นโปรดแจ้งให้เราทราบ (ดูที่ติดต่อด้านล่าง)
<dependencies>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow-summaries</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>de.fraunhofer.sit.sse.flowdroid</groupId>
<artifactId>soot-infoflow-android</artifactId>
<version>2.12.0</version>
</dependency>
</dependencies>
สำหรับการเริ่มต้นอย่างรวดเร็วด้วย flowdroid ให้ดูที่ "การใช้ตัวติดตามข้อมูลการไหล" ด้านล่าง หากคุณต้องการใช้เครื่องมือบรรทัดคำสั่งเท่านั้นสิ่งที่คุณต้องมีคือไฟล์ "soot-infoflow-cmd-jar-with-dependencies.jar"
หน้ารีลีสมีไฟล์ JAR ที่สร้างไว้ล่วงหน้าทั้งหมดสำหรับแต่ละรุ่นที่เราเผยแพร่อย่างเป็นทางการ เราขอแนะนำให้ใช้เวอร์ชันล่าสุดและยิ่งใหญ่ที่สุดเว้นแต่คุณจะมีปัญหาเฉพาะที่ป้องกันไม่ให้คุณทำเช่นนั้น ในกรณีนั้นโปรดแจ้งให้เราทราบ (ดูที่ติดต่อด้านล่าง)
สำหรับการเริ่มต้นอย่างรวดเร็วด้วย flowdroid ให้ดูที่ "การใช้ตัวติดตามข้อมูลการไหล" ด้านล่าง หากคุณต้องการใช้เครื่องมือบรรทัดคำสั่งเท่านั้นสิ่งที่คุณต้องมีคือไฟล์ "soot-infoflow-cmd-jar-with-dependencies.jar"
ความต้องการ:
ในครั้งแรก FlowDroid จะต้องสร้างจากโมดูลหลักนั่นคือโฟลเดอร์รูทของโครงการ ชุดทดสอบเต็มรูปแบบใช้เวลาประมาณ 30 นาทีดังนั้นเราขอแนะนำให้ปิดการทดสอบเมื่อสร้าง:
mvn install -DskipTestsในการเรียกใช้งานบิลด์ด้วยการทดสอบที่เปิดใช้งานจำเป็นต้องมีขั้นตอนเพิ่มเติมบางอย่าง:
rt.jar จะต้องอยู่ที่ตำแหน่งเริ่มต้น (อีกวิธีหนึ่งให้วาง rt.jar ภายใน $JAVA_HOME/lib/ )--recursive )ANDROID_JARS เป็นไดเรกทอรีแพลตฟอร์ม Android (โดยทั่วไปแล้ว $HOME/Android/Sdk/platforms/ )เราทำงานกับ flowdroid โดยใช้ Eclipse IDE โมดูลทั้งหมดเป็นโครงการคราสและสามารถนำเข้าสู่ Eclipse IDE พวกเขาจะปรากฏเป็นโครงการ Maven ที่นั่นและ Eclipse ควรดูแลการดาวน์โหลดการพึ่งพาที่จำเป็นทั้งหมดสำหรับคุณ
คุณสามารถใช้ flowDroid ได้ผ่านอินเตอร์เฟสบรรทัดคำสั่ง (โมดูล soot-infoflow-CMD) หรือเป็นไลบรารี โดยทั่วไปหากคุณต้องการใช้บางสิ่งบางอย่างและต้องการตัวติดตามการไหลของข้อมูลเป็นส่วนประกอบคุณจะดีกว่าโดยการรวมโมดูล flowDroid เป็นไฟล์ JAR หากคุณต้องการผลลัพธ์อย่างรวดเร็วเพียงเรียกใช้อินเทอร์เฟซบรรทัดคำสั่ง
FlowDroid รองรับบน Windows, Mac OS และ Linux
หากคุณต้องการใช้เครื่องมือบรรทัดคำสั่งเพื่อเรียกใช้ตัวติดตามการไหลของข้อมูลคุณสามารถใช้คำสั่งต่อไปนี้:
java -jar soot-infoflow-cmd/target/soot-infoflow-cmd-jar-with-dependencies.jar
-a <APK File>
-p <Android JAR folder>
-s <SourcesSinks file>
โฟลเดอร์ Android Jar เป็นไดเรกทอรี "แพลตฟอร์ม" ภายในโฟลเดอร์การติดตั้ง Android SDK ของคุณ ไฟล์นิยามสำหรับแหล่งที่มาและอ่างล้างจานกำหนดสิ่งที่จะถือว่าเป็นแหล่งข้อมูลที่ละเอียดอ่อนและสิ่งที่จะถือว่าเป็นอ่างล้างจานที่อาจมีการรั่วไหลของข้อมูลที่ละเอียดอ่อนไปยังโลกภายนอก คำจำกัดความเหล่านี้มีความเฉพาะเจาะจงกับกรณีการใช้งานของคุณ อย่างไรก็ตามหากคุณกำลังมองหาปัญหาความเป็นส่วนตัวคุณสามารถใช้ไฟล์เริ่มต้น "SourcesandSinks.txt" ในโฟลเดอร์ "soot-infoflow-Android" เป็นจุดเริ่มต้น
สำหรับการค้นหาเกี่ยวกับตัวเลือกอื่น ๆ ของเครื่องมือบรรทัดคำสั่งคุณสามารถเรียกใช้เครื่องมือด้วยตัวเลือก "-help" หรือดูที่ mainclass.initializeCommandlineOptions () "วิธีการในซอร์สโค้ด (โมดูล soot-infoflow-CMD)
สำหรับแอพบางตัว FlowDroid จะใช้เวลานานมากสำหรับแอพขนาดใหญ่ มีตัวเลือกต่าง ๆ ที่คุณสามารถกำหนดค่าการแลกเปลี่ยนระหว่างประสิทธิภาพความแม่นยำและการเรียกคืน
-ns ไม่ติดตาม taints ในเขตข้อมูลคงที่และไม่สนใจผู้เริ่มต้นแบบคงที่-ne ไม่ติดตามกระแสที่ยอดเยี่ยมคุณยังสามารถกำหนดหมดเวลา:
-dt N ยกเลิกการวิเคราะห์การไหลของข้อมูลหลังจาก n วินาทีและส่งคืนผลลัพธ์ที่ได้รับจนถึงตอนนี้-ct N ยกเลิกคอลเลกชันการโทรกลับในระหว่างการก่อสร้าง CallGraph หลังจาก n ไม่กี่วินาทีและดำเนินการต่อด้วย callgraph (ไม่สมบูรณ์) ที่สร้างขึ้นจนถึงตอนนี้-rt N ยกเลิกการรวบรวมผลลัพธ์หลังจาก n ไม่กี่วินาทีและส่งคืนผลลัพธ์ที่ได้รับจนถึงตอนนี้โปรดทราบว่าการหมดเวลาเป็นสารเติมแต่ง ทั้งสามขั้นตอนจะต้องเสร็จสิ้นหรือวิ่งเข้าสู่การหมดเวลาเพื่อให้เครื่องมือส่งคืนและส่งมอบผลลัพธ์
หากคุณต้องการรวม flowDroid เป็นไลบรารีลงในโซลูชันของคุณเองคุณสามารถอ้างอิงไฟล์ JAR ที่เกี่ยวข้องโดยตรง หากคุณใช้ Maven คุณสามารถเพิ่ม FlowDroid เป็นข้อมูลอ้างอิงและให้ Maven แก้ไขส่วนประกอบที่จำเป็นทั้งหมดได้ ขึ้นอยู่กับสิ่งที่คุณต้องการวิเคราะห์ (แอพ Android หรือโปรแกรม Java) การพึ่งพาของคุณอาจแตกต่างกันไป
ในส่วนนี้เราจะรวบรวมโค้ดและตัวอย่างการกำหนดค่าสำหรับงานทั่วไปกับ flowdroid
ในการเรียกใช้การวิเคราะห์การไหลของข้อมูลอย่างง่ายคุณสามารถใช้รหัสต่อไปนี้ คุณต้องเปลี่ยน androidJarFolder ตัวยึดตำแหน่งด้วยตำแหน่งของไดเรกทอรี platforms ในการติดตั้ง Android SDK ของคุณ ตัวยึดตำแหน่ง apkPath หมายถึงเส้นทางไฟล์แบบเต็มของไฟล์ APK ผลลัพธ์การไหลของข้อมูลสามารถเข้าถึงได้ผ่านคลาส InfoflowResults
SetupApplication app = new SetupApplication(androidJarFolder, apkPath);
app.setTaintWrapper(new SummaryTaintWrapper(new LazySummaryProvider("summariesManual")));
InfoflowResults results = app.runInfoflow();
การวิเคราะห์การไหลของข้อมูลใช้บทสรุปไลบรารี Stubdroid เริ่มต้น ในการกำหนดค่าเริ่มต้นบทสรุปเหล่านี้จะถูกเก็บไว้ในโฟลเดอร์ summariesManual และไม่จำเป็นต้องเปลี่ยนแปลง
หากคุณต้องการอ่านรายละเอียดเกี่ยวกับวิธีการทำงานของ FlowDroid วิทยานิพนธ์ปริญญาเอกของ Steven Arzt เป็นจุดเริ่มต้นที่ดี
ยินดีต้อนรับการมีส่วนร่วมเสมอ FlowDroid เป็นโครงการโอเพ่นซอร์สที่เราตีพิมพ์ด้วยความหวังว่ามันจะเป็นประโยชน์ต่อชุมชนการวิจัยโดยรวม หากคุณมีคุณสมบัติใหม่หรือการแก้ไขข้อบกพร่องที่คุณต้องการดูในที่เก็บรหัสอย่างเป็นทางการโปรดเปิดคำขอผสานที่นี่ใน GitHub และติดต่อเรา (ดูด้านล่าง) พร้อมคำอธิบายสั้น ๆ เกี่ยวกับสิ่งที่คุณทำ
FlowDroid ได้รับใบอนุญาตภายใต้ใบอนุญาต LGPL ดูไฟล์ใบอนุญาต นี่หมายความว่าคุณมีอิสระที่จะใช้เครื่องมือ (แม้ในโครงการเชิงพาณิชย์ที่มีแหล่งปิดแหล่งข้อมูล) อย่างไรก็ตามหากคุณขยายหรือแก้ไขเครื่องมือคุณต้องทำการเปลี่ยนแปลงของคุณภายใต้ LGPL เช่นกัน สิ่งนี้ทำให้มั่นใจได้ว่าเราสามารถปรับปรุงเครื่องมือต่อไปเป็นความพยายามของชุมชน
หากคุณประสบปัญหาใด ๆ คุณสามารถขอความช่วยเหลือในรายชื่อผู้รับจดหมายเขม่า นอกจากนี้คุณยังสามารถติดต่อเราได้ที่ [email protected]