APK ファイルの内部を探索する: Android アプリケーションがどのように構成されているかを理解する

I. APK ファイルとは何ですか?

APK( Android application package) は、Androidアプリケーションの構築と公開における重要なコンポーネントです。APKファイルは、アプリケーションのコード、リソース、マニフェスト情報を組み合わせて、デバイスにインストールして実行できるようにするアプリケーションのパッケージ化形式です。

「インストール パッケージ」と呼ばれるこれは、本質的にはzip圧縮されたパッケージです。

II. APK ファイルのコンポーネント

一般的なファイル構成は以下の通りですが、その他のファイルやディレクトリ等が存在する場合もあります。
ファイル構造

名前 ディレクトリ/ファイル 簡単な分析
資産 目次 静的リソースファイル
ライブラリ 目次 ライブラリファイル
メタINF 目次 署名ファイル
レス 目次 リソースファイルをコンパイルする
AndroidManifest.xml 書類 構成マニフェストファイル
クラス.dex 書類 コアコードファイル
リソース.arsc 書類 リソースマッピングファイル

詳しい説明

アセット:静的リソース

assetsHTMLこのディレクトリは、オーディオ ファイル、ビデオ ファイル、ファイルなど、アプリケーションの元の静的ファイルを保存するために使用されます。

lib: ライブラリ

libこのディレクトリはアプリケーションのローカル ライブラリ ディレクトリであり、特定のハードウェア アーキテクチャに関連するローカル ライブラリ ファイルを保存するために使用されます。

META-INF: 署名

META-INFディレクトリには、APKファイルの整合性と署名に関連する情報が保存されます。これらのファイルはAPK ビルドおよび署名プロセス中に自動的に生成され、その役割は主にアプリケーションのセキュリティと検証に関連します。

一部のディレクトリはAPK 解凍後に表示されませんMETA-INF。これは、V2使用されている署名が原因である可能性があります。V2署名情報はAPk圧縮パッケージのファイル構造(データ領域と中央ディレクトリの間)に挿入されるため、解凍されませんAPKこの記事では署名方法については説明していませんが、Android v1、v2、v3 の署名についてはこの記事で詳しく説明されています。

このディレクトリには次のファイルが含まれています。

1.MANIFEST.MF(マニフェストファイル)

  • MANIFEST.MFAPKファイルのメインのマニフェスト ファイルです。APKこれには、作成時間、変更時間、バージョン番号など、ファイルに関連するメタデータ情報が含まれます。
  • マスター マニフェスト ファイルには、ファイルの整合性APKを確保するために、ファイルに含まれる他のマニフェスト ファイルの名前とハッシュが記録されますAPK

2. CERT.RSA (RSA 証明書)

  • CERT.RSAファイルには、APKファイルのデジタル署名情報が含まれています。APKビルド プロセス中に、開発者はAPKデジタル証明書を使用してファイルに署名します。
  • APKデジタル署名は、ファイルの作成元と完全性を保証し、APK配布プロセス中にファイルが改ざんされたり、悪意を持って変更されたりすることを防ぐメカニズムです。
  • Androidデバイスはアプリケーションをインストールするときに、CERT.RSAファイル内の署名情報を検証して、APKファイルが正規の開発者によって署名されていることを確認します。

注: 直接解凍して取得したファイルは暗号化されてCERT.RSA いるため、などのツールを使用して表示するRSA必要があります。openssl

openssl pkcs7 -inform DER -in CERT.RSA -text -noout -print_certs

ここに画像の説明を挿入します

3. CERT.SF (署名ファイル)

  • CERT.SFファイルにAPKは、ファイル内のすべてのリソース ファイルのハッシュとマニフェスト ファイルのハッシュが含まれています。署名プロセス
    中に、マニフェスト ファイル内の各エントリがハッシュ化され、ファイルに記録されます。APKCERT.SF
  • APKファイルをインストールするとき、AndroidデバイスはCERT.SFファイルを検証して、ハッシュ値APKが実際のリソース ファイルおよびマニフェスト ファイルと一致していることを確認し、改ざんや変更を防ぎます。したがって、インストール時間は比較的遅くなります。これは、ファイル内に多くのリソース ファイルが含まれており、署名の検証が必要であるAPKためである可能性があります。APK

res: リソース

  • resディレクトリとは、APKリソースファイルが格納されるディレクトリのことで、レイアウトファイルや画像ファイル、文字列リソースなど、アプリケーションが使用するさまざまなリソースが含まれています。
  • レイアウト ファイル ( layout) は、アプリケーション インターフェイスの構造とコンポーネントの場所を定義します。
  • 画像ファイル ( drawable) には、アプリケーションで使用されるアイコンや背景画像などの画像リソースが含まれています。
  • 文字列リソース ( values) には、国際化およびローカリゼーションのためにアプリケーションで使用されるテキスト文字列が格納されます。

AndroidManifest.xml: アプリケーションマニフェストファイル

  • マニフェスト ファイルはAPK ファイルの中核コンポーネントであり、アプリケーションの基本情報と特性が記述されています。
  • マニフェスト ファイルには、アプリケーションのパッケージ名、バージョン番号、権限要件、およびアクティビティ ( Activity)、サービス ( Service)、ブロードキャスト レシーバー ( Broadcast Receiver)、コンテンツ プロバイダー ( Content Provider) などのコンポーネントの宣言が含まれています。
  • マニフェスト ファイルはAndroidアプリケーションの全体的な構造をシステムに通知し、システムがアプリケーションのさまざまなコンポーネントを正しくロードして起動できるようにします。

※直接解凍しAPKたものはAndroidManifest.xml圧縮されており、直接開くと文字化けしますが、関連ツール( AndroidStudio、、など)を使用するとjadx解凍できます。

ここに画像の説明を挿入します

classes.dex: Dalvik バイトコード ファイル

  • classes.dexファイルはAPKファイル内のバイトコード ファイルであり、Javaアプリケーションのすべてのコードのコンパイルおよび最適化された結果が含まれます。
  • DalvikAndroid変換されたバイトコード ファイルを実行できる、システムによって使用される特定の仮想マシンです。
  • classes.dexファイル内のバイトコードはDalvik仮想マシンによって解釈および実行され、Androidデバイス上でアプリケーションを実行できるようになります。

resource.arsc: リソースインデックスファイル

  • resources.arscアプリケーションで使用されるすべてのリソースのインデックス情報が含まれるバイナリ ファイルです。
  • リソース インデックス ファイルには、各リソースのタイプ、名前、および対応するリソースが記録されますID
  • Androidシステムは、リソース インデックス ファイルを解析することで、アプリケーションに必要なリソースに迅速にアクセスしてロードできます。

参考

APK ファイル構造
Android v1、v2、v3 署名の詳細説明
Android 公式導入署名

おすすめ

転載: blog.csdn.net/DisMisPres/article/details/131833412