Обнаружение сторонних библиотек в приложениях Android с высокой точностью и отзывами.
Юань Чжан, Джирун Дай, Сяохан Чжан, Сиранг Хуанг, Жемин Ян, Мин Ян, Хао Чен.
В материалах Международной конференции IEEE по анализу программного обеспечения, эволюции и реинжинирингу, Saner'18, Campobasso, Италия, 20-23 марта 2018 года. [PDF]
Сторонние библиотеки широко используются в приложениях Android для облегчения разработки и улучшения функциональных возможностей. Тем не менее, включенные библиотеки также привносят новые проблемы безопасности и конфиденциальности в хост -приложение и размывают бухгалтерский учет между кодом приложения и кодом библиотеки. В этой ситуации точный и надежный библиотечный детектор очень желателен. Фактически, код библиотеки может быть настроен разработчиками во время интеграции, а код Dead Library может быть устранена упускателями кода в процессе сборки приложений. Тем не менее, существующие исследования по обнаружению библиотеки не изящно решали эти проблемы, таким образом, сталкиваясь с серьезными ограничениями на практике.
В этой статье мы предлагаем Libpecker, срабатывающий, очень точный и надежный библиотечный детектор для приложений для Android. Libpecker принимает соответствие подписи, чтобы дать оценку сходства между данной библиотекой и приложением. Полное использование внутренних зависимостей класса внутри библиотеки, Libpecker генерирует строгую подпись для каждого класса. Чтобы максимально переносить настройку и устранение кода библиотеки, Libpecker вводит порог сходства адаптивного класса и взвешенную оценку сходства класса при расчете сходства библиотеки. Чтобы количественно оценить точность и отзыв либпекера, мы проводим первый такой эксперимент (насколько нам известно) с большим количеством библиотек и приложений. Результаты показывают, что Libpecker значительно превосходит современные инструменты как в отзыве, так и в точке (91% и 98,1% соответственно).
Мы рассматриваем проблему обнаружения библиотеки в более реалистичном сценарии для разработчиков приложений, чтобы включить сторонние библиотеки, то есть настройка кода и устранение кода может произойти как на уровне класса, так и на уровне класса. В приложении нет четкой границы между кодом приложения и кодом библиотеки, что делает обнаружение библиотеки довольно сложным. Наш подход использует сопоставление сходства на уровне класса, чтобы проверить, есть ли основные функции библиотеки, все еще присутствуют в приложении. Требуется точная копия данной библиотеки и приложения в качестве входных данных и вычисляет оценку сходства (в диапазоне от 0 до 1) между библиотекой и приложением. Если оценка сходства превышает порог, Libpecker сообщает, что библиотека присутствует в приложении.
Как изображено на следующем рисунке, наш подход состоит из двух основных частей: а) генерального поколения для всех классов библиотеки и классов приложений; б) процесс сопоставления библиотеки, чтобы дать оценку сходства между данной библиотекой и данным приложением, основанным на подписях класса. Более подробную информацию можно найти в нашей статье.

Libpecker принимает два входа: приложение для Android (файл .apk) и библиотека (.dex file). 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 в Intellij Idea . Обратите внимание, что JDK 1.7 необходим. Если у вас есть дополнительные вопросы, пожалуйста, свяжитесь с 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},
}