Androidアプリの構造
APKの内部構造
「Androidアプリの構造」はCoddyKit上の無料Ethical Hacking Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはEthical Hacking Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ethical Hacking Academyコースには全4レッスンが含まれています。
APK ファイル
Android アプリはAPK(Android Package)として配布されます。実体は、コンパイル済みコード、リソース、メタデータを含むZIP アーカイブです。
ZIP 形式なので、単純に解凍して内容を調べられます。これはモバイルペネトレーションテストの最初の手順です。
unzip app.apk -d app_extracted/APK の内部
展開した APK には、次のものが含まれます。
AndroidManifest.xml:アプリの設定。classes.dex:コンパイル済みバイトコード。res/とresources.arsc:リソース。lib/:ネイティブライブラリ。META-INF/:署名情報。
マニフェスト
AndroidManifest.xmlは、アプリのコンポーネント、権限、設定を宣言します。APK 内ではバイナリ XML 形式になっており、ツールでデコードできます。
アプリの攻撃対象領域を理解するうえで、最も重要なファイルです。
DEX とランタイム
Java/Kotlin のソースコードは、classes.dex内のDEX(Dalvik Executable)バイトコードにコンパイルされます。最新の Android では、これを ART(Android Runtime)経由で実行します。
DEX は可読性の高いコードに近い形へ変換できるため、APK の静的解析ではこの性質を利用します。
4 種類のコンポーネント
Android アプリは、次の 4 種類のコンポーネントで構成されます。
- Activities:画面 / UI。
- Services:バックグラウンド処理。
- Broadcast Receivers:システムイベントに応答。
- Content Providers:アプリ間でデータを共有。
エクスポートされたコンポーネント
android:exported="true"と指定されたコンポーネントは、他のアプリから呼び出せます。このようなコンポーネントがチェックなしで機密性の高い処理を行う場合、攻撃対象領域になります。
ペネトレーションテスターは、データを漏えいしたり特権操作を実行したりする、エクスポートされたアクティビティ、サービス、プロバイダーを探します。
<activity android:name=".AdminActivity" android:exported="true"/>権限
アプリはマニフェストで権限を要求します(例:INTERNET、READ_SMS、ACCESS_FINE_LOCATION)。
過剰に広い権限は、リスクのある挙動や過度なデータアクセスを示唆します。カスタム権限も、未承認のアクセスを許してしまうよう誤設定されることがあります。
<uses-permission android:name="android.permission.READ_SMS"/>アプリサンドボックス
Android は各アプリを固有の Linux UID を持つサンドボックス内に分離します。デフォルトでは、アプリ同士が互いのデータを読み取ることはできません。
ワールドリーダブルなファイルや公開されたプロバイダーなど、アプリがこの境界を弱めると脆弱性が生じます。
アプリデータの保存場所
インストールされたアプリは、/data/data/<package>/以下に、データベース、共有設定、ファイルなどのプライベートデータを保存します。
root 化されたデバイスやバックアップを利用すると、ペネトレーションテスターはこのディレクトリを調べ、安全でない状態で保存された秘密情報を探せます。詳しくは後のレッスンで扱います。
/data/data/com.example.app/署名
すべての APK にはデジタル署名が付けられ、その署名はMETA-INF/に保存されます。Android はインストール時と更新時に署名を検証します。
アプリを変更して再パッケージ化した場合は再署名が必要です。そのため開発者は署名を利用して改ざんを検出します。
ネイティブライブラリ
性能が重要なロジックや難読化されたロジックは、C/C++ からコンパイルされたネイティブライブラリ(.soファイル)としてlib/以下に置かれていることがあります。
これらは DEX には含まれないため、ネイティブ逆アセンブラを使った別個の解析が必要です。開発者が、ネイティブコードは調査しにくいと誤って考え、ここに秘密情報を隠すこともあります。
lib/arm64-v8a/libnative.soクイックチェック
コンポーネントを他のアプリに公開するマニフェスト属性を思い出してください。
まとめ
これで Android アプリの構造を理解できました。
- APKは、
AndroidManifest.xml、classes.dex、リソース、署名データを含む ZIP です。 - アプリには 4 種類のコンポーネントがあり、エクスポートされたコンポーネントは攻撃対象領域になります。
- 権限とアプリごとのサンドボックスがアクセスを管理します。プライベートデータは
/data/data/に保存されます。 - APK には改ざん検出のため署名が付けられます。
次は静的解析で APK をデコンパイルします。
よくある質問
「Androidアプリの構造」レッスンは無料ですか?
はい。「Androidアプリの構造」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ethical Hacking Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ethical Hacking Academyコースには全4レッスンが含まれています。
「Androidアプリの構造」で何を学びますか?
APKの内部構造 ブラウザで直接実行するハンズオンコードでEthical Hacking Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ethical Hacking Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのEthical Hacking Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Androidアプリの構造」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このEthical Hacking Academyレッスンでコードを書いて実行できますか?
はい。すべてのEthical Hacking Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Androidアプリの構造
- APKの静的解析
- Fridaによる動的解析
- 安全でないストレージと通信