การตรวจจับห้องสมุดบุคคลที่สามในแอปพลิเคชัน Android ที่มีความแม่นยำสูงและเรียกคืน
หยวนจาง, Jiarun Dai, Xiaohan Zhang, Sirong Huang, Zhemin Yang, Min Yang, Hao Chen
ในการประชุมนานาชาติ IEEE เกี่ยวกับการวิเคราะห์ซอฟต์แวร์วิวัฒนาการและการปรับโครงสร้าง, Saner'18, Campobasso, อิตาลี, 20-23 มีนาคม, 2018 [PDF]
ห้องสมุดบุคคลที่สามมีการใช้กันอย่างแพร่หลายในแอปพลิเคชัน Android เพื่อความสะดวกในการพัฒนาและปรับปรุงฟังก์ชันการทำงาน อย่างไรก็ตามไลบรารีที่จัดตั้งขึ้นยังนำปัญหาความปลอดภัยและความเป็นส่วนตัวใหม่มาสู่แอปพลิเคชันโฮสต์และเบลอการบัญชีระหว่างรหัสแอปพลิเคชันและรหัสห้องสมุด ภายใต้สถานการณ์นี้เครื่องตรวจจับห้องสมุดที่แม่นยำและเชื่อถือได้เป็นที่ต้องการอย่างมาก ในความเป็นจริงรหัสห้องสมุดอาจถูกปรับแต่งโดยนักพัฒนาในระหว่างการรวมและรหัสห้องสมุดที่ตายแล้วอาจถูกกำจัดโดยผู้ทำลายรหัสในระหว่างกระบวนการสร้างแอปพลิเคชัน อย่างไรก็ตามการวิจัยที่มีอยู่เกี่ยวกับการตรวจจับห้องสมุดไม่ได้จัดการกับปัญหาเหล่านี้อย่างสง่างามดังนั้นจึงต้องเผชิญกับข้อ จำกัด ที่รุนแรงในทางปฏิบัติ
ในบทความนี้เราเสนอ Libpecker ซึ่งเป็นเครื่องตรวจจับห้องสมุดที่มีความน่าเชื่อถือสูงและเชื่อถือได้สูงสำหรับแอปพลิเคชัน Android Libpecker ใช้การจับคู่ลายเซ็นเพื่อให้คะแนนความคล้ายคลึงกันระหว่างห้องสมุดที่กำหนดและแอปพลิเคชัน ด้วยการใช้ประโยชน์จากการพึ่งพาคลาสภายในภายในห้องสมุดอย่างเต็มที่ Libpecker จะสร้างลายเซ็นที่เข้มงวดสำหรับแต่ละคลาส เพื่อทนต่อการปรับแต่งรหัสห้องสมุดและการกำจัดให้มากที่สุดเท่าที่จะเป็นไปได้ Libpecker แนะนำเกณฑ์ความคล้ายคลึงกันของคลาส Adaptive และคะแนนความคล้ายคลึงกันของคลาสถ่วงน้ำหนักเมื่อคำนวณความคล้ายคลึงกันของห้องสมุด ในการประเมินความแม่นยำในเชิงปริมาณและการเรียกคืน Libpecker เราทำการทดลองครั้งแรก (เพื่อความรู้ที่ดีที่สุดของเรา) ด้วยห้องสมุดและแอปพลิเคชันจำนวนมาก ผลการศึกษาพบว่า Libpecker มีประสิทธิภาพสูงกว่าเครื่องมือที่ทันสมัยทั้งในการเรียกคืนและความแม่นยำ (91% และ 98.1% ตามลำดับ)
เราพิจารณาปัญหาของการตรวจจับห้องสมุดในสถานการณ์ที่สมจริงยิ่งขึ้นสำหรับนักพัฒนาแอปพลิเคชันเพื่อรวมไลบรารีของบุคคลที่สามนั่นคือการปรับแต่งรหัสและการกำจัดรหัสสามารถเกิดขึ้นได้ทั้งระดับระดับและระดับสมาชิก ในแอพไม่มีขอบเขตที่ชัดเจนระหว่างรหัสแอปและรหัสห้องสมุดทำให้การตรวจจับห้องสมุดค่อนข้างท้าทาย วิธีการของเราใช้การจับคู่ความคล้ายคลึงกันระดับชั้นเรียนเพื่อทดสอบว่าฟังก์ชันหลักของไลบรารียังคงอยู่ในแอปพลิเคชันหรือไม่ ต้องใช้สำเนาที่แน่นอนของไลบรารีที่กำหนดและแอพเป็นอินพุตและคำนวณคะแนนความคล้ายคลึงกัน (ตั้งแต่ 0 ถึง 1) ระหว่างไลบรารีและแอปพลิเคชัน หากคะแนนความคล้ายคลึงกันเกินเกณฑ์ Libpecker รายงานว่าห้องสมุดมีอยู่ในแอปพลิเคชัน
ดังที่ปรากฎในรูปต่อไปนี้วิธีการของเราประกอบด้วยสองส่วนหลัก: a) การสร้างลายเซ็นสำหรับคลาสห้องสมุดทั้งหมดและคลาสแอปพลิเคชัน; b) กระบวนการจับคู่ไลบรารีเพื่อให้คะแนนความคล้ายคลึงกันระหว่างไลบรารีที่กำหนดและแอปพลิเคชันที่กำหนดตามลายเซ็นของคลาส รายละเอียดเพิ่มเติมสามารถพบได้ในกระดาษของเรา

libpecker ยอมรับสองอินพุต: แอพ Android (ไฟล์ .APK) และไลบรารี (ไฟล์. dex) Libpecker ส่งคืนความคล้ายคลึงกันเพื่อแสดงถึงจำนวนรหัสของไลบรารีที่สามารถพบได้ในแอพ
java -jar LibPecker.jar <apk_path> <lib_path>
ในการแปลงไฟล์ไลบรารี (เช่น. jar/.aar ไฟล์) คุณสามารถใช้คำสั่ง dx ในไดเรกทอรี bin
##### Linux
./bin/dx --dex --output=<lib_dex> <lib_jar_path>
##### windows
./bin/dx.sh --dex --output=<lib_dex> <lib_jar_path>
นอกจากนี้เรายังจัดให้มีการทดสอบบางกรณีในไดเรกทอรี การทดสอบ ในการทดสอบกรณีเหล่านี้คุณสามารถเรียกใช้คำสั่งนี้
java -cp LibPecker.jar -Xmx4G cn.fudan.libpecker.main.TestDriver
เอาต์พุตที่คาดหวังเป็นเหมือนสิ่งต่อไปนี้
=== pass test: test/apk/3f217d600168e62b062b4c424ef4224d.apk test/lib/7f799553d1957873a92a2cf96b85ef2625195788ebbf6d7ae83ff3263c114c53.dex
similarity: 0.5920433145009416
=== pass test: test/apk/3f217d600168e62b062b4c424ef4224d.apk test/lib/9798a656af89d4f6e6c0d7ad60e4863347d89503a795381e51f6e463dc32fd6d.dex
similarity: 0.14186450492182975
=== pass test: test/apk/3f217d600168e62b062b4c424ef4224d.apk test/lib/a4564e66bacf765a2cd403d274c49380dc067c4ca2449e68fa6201da2ea783d9.dex
similarity: 0.35957322333349556
=== pass test: test/apk/3f217d600168e62b062b4c424ef4224d.apk test/lib/5277a56f0c4f8a18a35a2d7e020b0546436eb81c4b5c4e492dc3cfa36436e0b4.dex
similarity: 0.5954615408654523
=== pass test: test/apk/482c5db677fbf14040c93ddeb3714526.apk test/lib/163f8315a054e25db69d7b2b8aa6097804d1d4d30003dda4ff07be21678b9587.dex
similarity: 0.33905778602924114
=== pass test: test/apk/482c5db677fbf14040c93ddeb3714526.apk test/lib/af5b684ea74defaea3a8cdc5e67bebd9ed527673c6d00b691365e7c23319da67.dex
similarity: 0.0626696274364668
=== pass test: test/apk/482c5db677fbf14040c93ddeb3714526.apk test/lib/a873ffc1d69a6d38fff2bc9b17250963f09ee934aa8f86d2abb0ba80a4d4a38f.dex
similarity: 0.5981256669903423
=== pass test: test/apk/d11006c50e299a18539c6411285660a4.apk test/lib/e466ea56ddb39d05c43912dbafcd42ae5e178e80f5ebd1e7c0c3682e040ef4a6.dex
similarity: 0.9995280792826807
=== pass test: test/apk/d11006c50e299a18539c6411285660a4.apk test/lib/1ddc4f3804cdf219ae7feaf4647a5e1d79bfc1863208fac98cba54bf4b282994.dex
similarity: 1.0
=== pass test: test/apk/bb1ae8661d82b36fa26f9fe9801943c7.apk test/lib/bdabe04fa6179d13e590f6173acbc94d9ffdbc4b4a9310a989e30820c27b94e8.dex
similarity: 1.0
=== pass test: test/apk/bb1ae8661d82b36fa26f9fe9801943c7.apk test/lib/b46bf10c7a9e4dfa24c88f87d34a9dfb5248f7718f392e1518099f8d9f69cca5.dex
similarity: 0.9490735206216379
=== pass test: test/apk/b75eef27fd4b3f5c65a8a1c7eb677d05.apk test/lib/b42266a9b224e604911716c43bf2516cce03ad551d7db213747297efd866182c.dex
similarity: 1.0
=== pass test: test/apk/b75eef27fd4b3f5c65a8a1c7eb677d05.apk test/lib/967af7be58c4efde245efea26e544d4dabb351f09f396f41b40c78d32c2723a0.dex
similarity: 0.9999999999999998
=== pass test: test/apk/b75eef27fd4b3f5c65a8a1c7eb677d05.apk test/lib/cf0d095b6db6ecedd56654228db442f152c1445d07d9cca14c6a147b2c730f5a.dex
similarity: 0.9672300793377027
=== pass test: test/apk/b75eef27fd4b3f5c65a8a1c7eb677d05.apk test/lib/bc626e62b8783e095b3fd857423ef7713de12b2a9e89fa3280e45f5a9fdd7de7.dex
similarity: 0.9708244371118012
=== pass test: test/apk/b75eef27fd4b3f5c65a8a1c7eb677d05.apk test/lib/e466ea56ddb39d05c43912dbafcd42ae5e178e80f5ebd1e7c0c3682e040ef4a6.dex
similarity: 1.0
=== pass test: test/apk/6f35b5e01899df4cc91a31f2773b7217.apk test/lib/cf819dbfef851e6f21def64d3f4b4cc5d7425104b4830ec765dc5157c4453831.dex
similarity: 1.0
=== pass test: test/apk/6f35b5e01899df4cc91a31f2773b7217.apk test/lib/7cc2314e50de4dc66de7c108ab9c429f3122c6056855fac016fe2a00a9e4ee08.dex
similarity: 0.9999999999999993
=== pass test: test/apk/b75eef27fd4b3f5c65a8a1c7eb677d05.apk test/lib/44555093604035841f936e76428e8bc2087737d58387d2718c3878481332220b.dex
similarity: 1.0
=== pass test: test/apk/b75eef27fd4b3f5c65a8a1c7eb677d05.apk test/lib/798f6bed0fca807e9b47e2f3a0a2f99e4a0618e6cf0639b3444eb72f8a4933cf.dex
similarity: 0.9999999999999997
ในการตั้งค่าสภาพแวดล้อมการพัฒนาคุณสามารถเปิด libpecker.iml โดยตรงใน Identij Idea โปรดทราบว่าจำเป็นต้องใช้ JDK 1.7 หากคุณมีคำถามเพิ่มเติมโปรดติดต่อ yuanxzhang [ที่] fudan.edu.cn
@inproceedings{libpecker-saner-2018,
author={Y. Zhang and J. Dai and X. Zhang and S. Huang and Z. Yang and M. Yang and H. Chen},
booktitle={2018 IEEE 25th International Conference on Software Analysis, Evolution and Reengineering (SANER)},
title={Detecting third-party libraries in Android applications with high precision and recall},
year={2018},
volume={},
number={},
pages={141-152},
keywords={Library Detection, Code Similarity, Obfuscation Resilienc},
doi={10.1109/SANER.2018.8330204},
ISSN={},
month={March},
}