Erkennen von Bibliotheken von Drittanbietern in Android-Anwendungen mit hoher Präzision und Rückruf.
Yuan Zhang, Jiarun Dai, Xiaohan Zhang, Sirong Huang, Zhemin Yang, Min Yang, Hao Chen.
In Proceedings of IEEE International Conference über Softwareanalyse, Evolution und Reengineering, Saner'18, Campobasso, Italien, 20. bis 23. März 2018. [PDF]
Bibliotheken von Drittanbietern werden in Android-Anwendungen häufig verwendet, um die Entwicklung zu erleichtern und die Funktionen zu verbessern. Die integrierten Bibliotheken bringen jedoch auch neue Sicherheits- und Datenschutzprobleme in die Host -Anwendung ein und verwischen die Buchhaltung zwischen Anwendungscode und Bibliothekscode. In dieser Situation ist ein präziser und zuverlässiger Bibliotheksdetektor sehr wünschenswert. Tatsächlich kann der Bibliothekscode von Entwicklern während der Integration angepasst werden, und der Code für den toten Bibliothek kann durch den Code -Hebel während des Anwendungsaufbaues beseitigt werden. Die bestehende Untersuchung zur Erkennung von Bibliotheken hat diese Probleme jedoch nicht anmutig behandelt und dadurch in der Praxis schwere Einschränkungen ausgesetzt.
In diesem Artikel schlagen wir Libpecker vor, einen verschleierten, resilen, sehr präzise und zuverlässigen Bibliotheksdetektor für Android-Anwendungen. Libpecker nimmt die Signaturanpassung an, um eine Ähnlichkeitsbewertung zwischen einer bestimmten Bibliothek und einer Anwendung zu verleihen. Durch die vollständige Verwendung der internen Klassenabhängigkeiten in einer Bibliothek generiert Libpecker eine strenge Signatur für jede Klasse. Um die Anpassung und Eliminierung von Bibliothekscode so weit wie möglich zu tolerieren, führt Libpecker bei der Berechnung der Bibliotheksähnlichkeit die Ähnlichkeitsschwelle und die Ähnlichkeitsbewertung der gewichteten Klasse ein. Um die Präzision und den Rückruf von Libpecker quantitativ zu bewerten, führen wir das erste derartige Experiment (nach bestem Wissen) mit einer großen Anzahl von Bibliotheken und Anwendungen durch. Die Ergebnisse zeigen, dass Libpecker die hochmodernen Tools sowohl im Rückruf als auch in der Präzision erheblich übertrifft (91% bzw. 98,1%).
Wir betrachten das Problem der Erkennung der Bibliothek in einem realistischeren Szenario für Anwendungsentwickler, um Bibliotheken von Drittanbietern einzubeziehen, dh Codeanpassung und Code-Eliminierung können sowohl auf Klassenebene als auch auf Klassenmeisterebene auftreten. In einer App gibt es keine klare Grenze zwischen App -Code und Bibliothekscode, wodurch die Erkennung der Bibliothek eine große Herausforderung darstellt. Unser Ansatz verwendet Ähnlichkeits-Matching auf Klassenebene, um zu testen, ob die Hauptfunktionalitäten einer Bibliothek noch in einer Anwendung vorhanden sind. Es wird eine genaue Kopie einer bestimmten Bibliothek und einer App als Eingänge benötigt und eine Ähnlichkeitsbewertung (zwischen 0 und 1) zwischen der Bibliothek und der Anwendung berechnet. Wenn der Ähnlichkeitswert einen Schwellenwert überschreitet, berichtet Libpecker, dass die Bibliothek in der Anwendung vorhanden ist.
Wie in der folgenden Abbildung dargestellt, besteht unser Ansatz aus zwei Hauptteilen: a) Signaturgenerierung für alle Bibliotheksklassen und Anwendungsklassen; b) Bibliotheksanpassungsprozess, um eine Ähnlichkeitsbewertung zwischen einer bestimmten Bibliothek und einer bestimmten Anwendung basierend auf den Klassensignaturen zu geben. Weitere Details finden Sie in unserem Artikel.

Libpecker akzeptiert zwei Eingaben: eine Android -App (.APK -Datei) und eine Bibliothek (.dex -Datei). Libpecker gibt eine Ähnlichkeit zurück, um darzustellen, wie viel Code der Bibliothek in der App zu finden ist.
java -jar LibPecker.jar <apk_path> <lib_path>
Um Bibliotheksdateien (z. B. JAR/.AAR -Datei) zu transformieren, können Sie den Befehl dx im Bin -Verzeichnis verwenden.
##### Linux
./bin/dx --dex --output=<lib_dex> <lib_jar_path>
##### Windows
./bin/dx.sh --dex --output=<lib_dex> <lib_jar_path>
Wir bieten auch einige Testfälle im Testverzeichnis an. Um diese Fälle zu testen, können Sie diesen Befehl ausführen.
java -cp LibPecker.jar -Xmx4G cn.fudan.libpecker.main.TestDriver
Die erwartete Ausgabe ist wie folgt.
=== 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
Um die Entwicklungsumgebung einzurichten, können Sie libpecker.iml in der Intellij -Idee direkt öffnen. Beachten Sie, dass JDK 1.7 benötigt wird. Wenn Sie weitere Fragen haben, wenden Sie sich bitte an Yuanxzhang [at] 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},
}