Hello there, ('ω')ノ
📦 APKって何のこと?
✅ APKとは?
Android Package(アンドロイド・パッケージ)の略で、アプリを配布・インストールするための「ひとつの箱(パッケージ)」です。
Windowsでいう .exe ファイル、iPhoneでいう .ipa ファイルのようなものです。
この中には、以下のようなものが詰め込まれています:
| ファイル名・フォルダ | 役割 |
|---|---|
AndroidManifest.xml |
アプリの設定・権限・構成 |
classes.dex |
アプリの動作ロジック(バイトコード) |
res/ |
アイコンや画面の部品などのリソース |
assets/ |
任意のファイル(DB、HTML、設定ファイルなど) |
lib/ |
ネイティブライブラリ(C/C++で書かれた処理) |
🔧 APKを分解する方法(デコンパイル)
APKファイルは、適切なツールを使えば中身を見たり、分解(解析)したりすることが可能です。
よく使う2つのツール
| ツール名 | 用途 | 備考 |
|---|---|---|
apktool |
APKの構造を分解(マニフェストやリソースを読む) | コマンドライン |
jadx |
バイトコード(.dex)をJava風に逆変換 | GUIで見やすい |
🧪 実践:apktoolで分解してみよう
① APKファイルを入手
まずは対象アプリの .apk ファイルを用意します。
実機から抜き出すには以下のADBコマンドを使います:
adb shell pm path com.example.app
出力例:
package:/data/app/com.example.app-1/base.apk
続いてファイルをPCにコピー:
adb pull /data/app/com.example.app-1/base.apk
② apktoolで分解
apktool d base.apk -o extracted_app
これで、extracted_app/ フォルダの中に以下のような構造が展開されます:
extracted_app/ ├─ AndroidManifest.xml ├─ res/ ├─ smali/ ├─ assets/ ├─ lib/
🔍 何を見る?診断の視点
✅ AndroidManifest.xml
このファイルはアプリの設計図とも言える存在。 以下のような重要情報が含まれます:
- 要求している権限(permission)
- 外部公開しているコンポーネント(exported)
- デフォルト起動のアクティビティ(main)
- コンテンツプロバイダの設定など
診断者としてはまずここをチェックし、「余計な権限がないか」「他アプリからアクセスできる機能がないか」を見極めます。
✅ assets/ や res/raw/
ここには、アプリ内で使っているデータファイルや設定ファイルが格納されていることがあります。
- プレーンなJSONファイルにAPIキーが入っていた
- SQLiteの初期データが暗号化されずにそのまま入っていた
- 開発用の設定ファイルが誤って入ったままになっていた
という事例も珍しくありません。
✅ classes.dex → Javaコードを読む
ここがアプリの“頭脳”です。
classes.dex にある処理ロジックを読み解くことで、
- パスワードの保存方法
- 通信先のURLやAPIキー
- 暗号化や認証のロジック
などを確認できます。
これは jadx を使ってGUIで読みやすくできます:
jadx-gui base.apk
GUIでJava風のコードが表示され、「こんな簡単に見えるの!?」と驚かれるかもしれません。
🕵️♀️ どう活かす?診断の観点
| 観点 | チェック内容 |
|---|---|
| 権限設定 | AndroidManifest.xml に過剰な権限がないか |
| Export設定 | 外部に公開されている機能が意図したものだけか |
| 認証情報 | APIキーや秘密のパスワードが埋め込まれていないか |
| 通信先 | 固定IPや危険な外部サーバーへの接続がないか |
| データ保護 | データファイルが平文で保存されていないか |
✅ まとめ
- APKはAndroidアプリの“箱”であり、中には設定・コード・データが詰め込まれている
apktoolやjadxを使うことで、中身を構造的に確認できる- 診断では、マニフェスト・コード・リソースファイルの3つを重点的にチェック
- 中をのぞくことで、開発者も気づいていないリスクが見つかることがある
Best regards, (^^ゞ