Androidアプリケーションのサードパーティライブラリを高精度とリコールで検出します。
Yuan Zhang、Jiarun Dai、Xiaohan Zhang、Sirong Huang、Zhemin Yang、Min Yang、Hao Chen。
ソフトウェア分析、進化とリエンジニアリングに関するIEEE国際会議の議事録、Saner'18、Campobasso、イタリア、2018年3月20〜23日。[PDF]
サードパーティライブラリは、開発を容易にし、機能を強化するために、Androidアプリケーションで広く使用されています。ただし、組み込まれたライブラリは、新しいセキュリティとプライバシーの問題をホストアプリケーションにもたらし、アプリケーションコードとライブラリコードの間の会計を曖昧にします。この状況では、正確で信頼できるライブラリ検出器が非常に望ましいです。実際、ライブラリコードは統合中に開発者によってカスタマイズされる場合があり、デッドライブラリコードは、アプリケーションビルドプロセス中にコード観測者によって排除される場合があります。ただし、図書館の検出に関する既存の研究は、これらの問題を優雅に処理していないため、実際には深刻な制限に直面しています。
この論文では、Androidアプリケーション向けの難読化抵抗力があり、非常に正確で信頼性の高いライブラリ検出器であるLibpeckerを提案します。 Libpeckerは、署名マッチングを採用して、特定のライブラリとアプリケーションの間に類似性スコアを提供します。ライブラリ内の内部クラス依存関係を完全に利用することにより、Libpeckerは各クラスの厳格な署名を生成します。ライブラリコードのカスタマイズと排除を可能な限り容認するために、Libpeckerは、ライブラリの類似性を計算するときに、適応クラスの類似性しきい値と加重クラスの類似性スコアを導入します。 Libpeckerの精度とリコールを定量的に評価するために、多数のライブラリとアプリケーションで最初のそのような実験(私たちの知る限り)を実行します。結果は、Libpeckerがリコールと精度の両方で最先端のツールを大幅に上回ることを示しています(それぞれ91%と98.1%)。
アプリケーション開発者がサードパーティライブラリを組み込むためのより現実的なシナリオでライブラリ検出の問題を考慮します。つまり、コードのカスタマイズとコードの排除は、クラスレベルとクラスメンバーレベルの両方で発生する可能性があります。アプリでは、アプリコードとライブラリコードの間に明確な境界がなく、ライブラリの検出が非常に困難になっています。私たちのアプローチでは、クラスレベルの類似性マッチングを利用して、ライブラリの主な機能がまだアプリケーションに存在しているかどうかをテストします。特定のライブラリの正確なコピーとアプリを入力として取得し、ライブラリとアプリケーション間の類似性スコア(0〜1の範囲)を計算します。類似性スコアがしきい値を超える場合、Libpeckerは、ライブラリがアプリケーションに存在すると報告しています。
次の図に示されているように、私たちのアプローチは2つの主要な部分で構成されています。a)すべてのライブラリクラスとアプリケーションクラスの署名生成。 b)ライブラリマッチングプロセスでは、特定のライブラリとクラスの署名に基づいた特定のアプリケーション間の類似性スコアを提供します。詳細については、私たちの論文をご覧ください。

libpeckerは、Androidアプリ(.apkファイル)とライブラリ(.dexファイル)の2つの入力を受け入れます。 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},
}