اكتشاف مكتبات الطرف الثالث في تطبيقات Android بدقة عالية واستدعاء.
يوان تشانغ ، جيارون داي ، شياوان تشانغ ، سيرونج هوانغ ، تشومين يانغ ، مين يانغ ، هاو تشن.
في وقائع المؤتمر الدولي لـ IEEE حول تحليل البرمجيات والتطور وإعادة الهندسة ، Saner'18 ، Campobasso ، إيطاليا ، 20-23 مارس 2018. [PDF]
تستخدم مكتبات الطرف الثالث على نطاق واسع في تطبيقات Android لتخفيف التطوير وتعزيز الوظائف. ومع ذلك ، فإن المكتبات المدمجة تجلب أيضًا مشكلات أمان وخصوصية جديدة إلى التطبيق المضيف ، وتطهير المحاسبة بين رمز التطبيق ورمز المكتبة. بموجب هذا الموقف ، يكون كاشف المكتبات الدقيق والموثوق مرغوبًا فيه للغاية. في الواقع ، قد يتم تخصيص رمز المكتبة من قبل المطورين أثناء التكامل ، ويمكن القضاء على رمز المكتبة الميتة بواسطة محوقي الكود أثناء عملية بناء التطبيق. ومع ذلك ، فإن الأبحاث الحالية حول اكتشاف المكتبات لم تتعامل مع هذه المشكلات بأمان ، وبالتالي تواجه قيودًا شديدة في الممارسة العملية.
في هذه الورقة ، نقترح Libpecker ، وهو كاشف مكتبة للمكتبات الدقيق والموثوق بشكل كبير وموثوق به لتطبيقات Android. يعتمد Libpecker مطابقة التوقيع لإعطاء درجة تشابه بين مكتبة معينة وتطبيق. من خلال الاستفادة الكاملة من تبعيات الطبقة الداخلية داخل المكتبة ، يولد Libpecker توقيعًا صارمًا لكل فئة. للتسامح مع تخصيص رمز المكتبة والإلغاء قدر الإمكان ، يقدم Libpecker عتبة تشابه الطبقة التكيفية ودرجة تشابه الطبقة المرجحة عند حساب تشابه المكتبة. لتقييم دقة واستدعاء Peckercer بشكل كمي ، نقوم بإجراء أول تجربة من هذا القبيل (على حد علمنا) مع عدد كبير من المكتبات والتطبيقات. تظهر النتائج أن libpecker يتفوق بشكل كبير على الأدوات الحديثة في كل من الاستدعاء والدقة (91 ٪ و 98.1 ٪ على التوالي).
نحن نعتبر مشكلة اكتشاف المكتبات في سيناريو أكثر واقعية لمطوري التطبيقات لدمج مكتبات الطرف الثالث ، وهذا هو تخصيص الكود والتخلص من التعليمات البرمجية في كل من مستوى الفصل وعضو الفئة. في التطبيق ، لا توجد حدود واضحة بين رمز التطبيق ورمز المكتبة ، مما يجعل اكتشاف المكتبات أمرًا صعبًا للغاية. يستخدم نهجنا مطابقة التشابه على مستوى الفصل لاختبار ما إذا كانت الوظائف الرئيسية للمكتبة لا تزال موجودة في التطبيق. يستغرق نسخة دقيقة من مكتبة معينة وتطبيق كمدخلات ، ويحسب درجة التشابه (تتراوح من 0 إلى 1) بين المكتبة والتطبيق. إذا تجاوزت درجة التشابه عتبة ، فإن Libpecker تقارير أن المكتبة موجودة في التطبيق.
كما هو موضح في الشكل التالي ، يتكون نهجنا من جزأين رئيسيين: أ) توليد توقيع لجميع فئات المكتبة وفئات التطبيقات ؛ ب) عملية مطابقة المكتبة لإعطاء درجة تشابه بين مكتبة معينة وتطبيق معين بناءً على توقيعات الفصل. يمكن العثور على مزيد من التفاصيل في ورقتنا.

يقبل 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 مباشرة في Idea Intellij . لاحظ أن 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},
}