정밀도와 리콜로 Android 응용 프로그램에서 타사 라이브러리 감지.
Yuan Zhang, Jiarun Dai, Xiaohan Zhang, Sirong Huang, Zhemin Yang, Min Yang, Hao Chen.
소프트웨어 분석, 진화 및 리엔지니어링에 관한 IEEE 국제 컨퍼런스, Saner'18, Campobasso, Italy, 2018 년 3 월 20-23 일. [PDF]
타사 라이브러리는 Android 애플리케이션에서 개발을 용이하게하고 기능을 향상시키기 위해 널리 사용됩니다. 그러나 Incorporated Libraries는 또한 새로운 보안 및 개인 정보 보호 문제를 호스트 응용 프로그램에 가져오고 응용 프로그램 코드와 라이브러리 코드 간의 회계를 흐리게합니다. 이 상황에서 정확하고 신뢰할 수있는 라이브러리 탐지기가 매우 바람직합니다. 실제로, 통합 중에 개발자가 라이브러리 코드를 사용자 정의 할 수 있으며 애플리케이션 빌드 프로세스 중에 코드 oppuscators에 의해 Dead Library 코드를 제거 할 수 있습니다. 그러나 도서관 탐지에 대한 기존 연구는 이러한 문제를 우아하게 처리하지 않았으므로 실제로는 심각한 한계에 직면 해 있습니다.
이 논문에서는 안드로이드 애플리케이션을위한 난독 화 및 매우 정확하며 신뢰할 수있는 라이브러리 탐지기 인 Libpecker를 제안합니다. Libpecker는 시그니처 매칭을 채택하여 주어진 라이브러리와 응용 프로그램 사이에 유사성 점수를 제공합니다. LibPecker는 라이브러리 내부의 내부 클래스 종속성을 완전히 활용하여 각 클래스에 대한 엄격한 서명을 생성합니다. 라이브러리 코드 사용자 정의 및 제거를 가능한 한 견딜 수 있도록 Libpecker는 라이브러리 유사성을 계산할 때 적응 형 클래스 유사성 임계 값 및 가중 클래스 유사성 점수를 소개합니다. 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 파일)을 변환하려면 BIN 디렉토리에서 DX 명령을 사용할 수 있습니다.
##### 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
개발 환경을 설정하려면 Intellij 아이디어 에서 libpecker.iml을 직접 열 수 있습니다. 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},
}