Détection des bibliothèques tierces dans des applications Android avec une haute précision et un rappel.
Yuan Zhang, Jiarun Dai, Xiaohan Zhang, Sirong Huang, Zhemin Yang, Min Yang, Hao Chen.
Dans les actes de la Conférence internationale de l'IEEE sur l'analyse, l'évolution et la réingénierie des logiciels, Saner'18, Campobasso, Italie, 20-23 mars 2018. [PDF]
Les bibliothèques tierces sont largement utilisées dans les applications Android pour faciliter le développement et améliorer les fonctionnalités. Cependant, les bibliothèques incorporées apportent également de nouvelles problèmes de sécurité et de confidentialité à l'application hôte et brouillants la comptabilité entre le code d'application et le code de la bibliothèque. Dans cette situation, un détecteur de bibliothèque précis et fiable est hautement souhaitable. En fait, le code de la bibliothèque peut être personnalisé par les développeurs pendant l'intégration et le code de bibliothèque mort peut être éliminé par les obfuscateurs de code pendant le processus de création d'application. Cependant, les recherches existantes sur la détection des bibliothèques n'ont pas traité gracieusement ces problèmes, ainsi confronté à de graves limitations dans la pratique.
Dans cet article, nous proposons LibPecker, un détecteur de bibliothèque résiliente, très précis et fiable pour les applications Android. Libpecker adopte la correspondance de signature pour donner un score de similitude entre une bibliothèque donnée et une application. En utilisant pleinement les dépendances de classe interne dans une bibliothèque, LibPecker génère une signature stricte pour chaque classe. Pour tolérer autant que possible la personnalisation et l'élimination du code de la bibliothèque, LibPecker introduit un seuil de similitude de classe adaptative et un score de similitude de classe pondéré lors du calcul de la similitude de la bibliothèque. Pour évaluer quantitativement la précision et le rappel de Libpecker, nous effectuons la première expérience de ce type (à notre connaissance) avec un grand nombre de bibliothèques et d'applications. Les résultats montrent que Libpecker surpasse considérablement les outils de pointe dans le rappel et la précision (91% et 98,1% respectivement).
Nous considérons le problème de la détection de la bibliothèque dans un scénario plus réaliste pour les développeurs d'applications afin d'incorporer des bibliothèques tierces, c'est-à-dire que la personnalisation du code et l'élimination du code peuvent se produire au niveau de la classe et au niveau du classement. Dans une application, il n'y a pas de limite claire entre le code d'application et le code de la bibliothèque, ce qui rend la détection de bibliothèque assez difficile. Notre approche utilise une correspondance de similitude au niveau de la classe pour tester si les principales fonctionnalités d'une bibliothèque sont toujours présentes dans une application. Il prend une copie exacte d'une bibliothèque donnée et d'une application comme entrées, et calcule un score de similitude (allant de 0 à 1) entre la bibliothèque et l'application. Si le score de similitude dépasse un seuil, LibPecker rapporte que la bibliothèque est présente dans l'application.
Comme illustré dans la figure suivante, notre approche se compose de deux parties principales: a) Génération de signature pour toutes les classes de bibliothèque et les cours d'application; b) Processus de correspondance de la bibliothèque pour donner un score de similitude entre une bibliothèque donnée et une application donnée basée sur les signatures de classe. Plus de détails peuvent être trouvés dans notre article.

LibPecker accepte deux entrées: une application Android (fichier .apk) et une bibliothèque (fichier .dex). LibPecker renvoie une similitude pour représenter la quantité de code de la bibliothèque que l'on peut trouver dans l'application.
java -jar LibPecker.jar <apk_path> <lib_path>
Pour transformer les fichiers de bibliothèque (tels que le fichier .jar / .aar), vous pouvez utiliser la commande dx dans le répertoire bin .
##### Linux
./bin/dx --dex --output=<lib_dex> <lib_jar_path>
##### Windows
./bin/dx.sh --dex --output=<lib_dex> <lib_jar_path>
Nous fournissons également quelques cas de test dans le répertoire des tests . Pour tester ces cas, vous pouvez exécuter cette commande.
java -cp LibPecker.jar -Xmx4G cn.fudan.libpecker.main.TestDriver
La sortie attendue est comme celle suivante.
=== 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
Pour configurer l'environnement de développement, vous pouvez ouvrir directement Libpecker.iml dans Intellij Idea . Notez que JDK 1.7 est nécessaire. Si vous avez d'autres questions, veuillez contacter 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},
}