Shikata Ga Nai

Private? There is no such things.

第16回:APKToolでアプリをデコンパイルする

Hello there, ('ω')ノ

🧰 APKToolとは?

APKTool(apktool) は、APKファイルを“分解”して、

  • AndroidManifest.xml
  • res/フォルダ(リソース)
  • smali/フォルダ(コード)

など、アプリの構造そのものを再現することができるツールです。

たとえるなら、「アプリをばらして部品ごとに分類してくれる分解キット」です。


🔧 APKToolのインストール方法

✅ 前提:

  • Java(JDK)インストール済みであること(java -version で確認)
  • OSはWindows / macOS / Linux いずれも可

✅ インストール手順(例:Linux/mac)

# apktoolとその依存ファイルを取得
wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.9.3.jar

# 実行権限を付けて配置
chmod +x apktool
sudo mv apktool /usr/local/bin/
sudo mv apktool_2.9.3.jar /usr/local/bin/apktool.jar

apktool というコマンドで apktool.jar を呼び出す仕組みです。


📦 APKファイルを用意しよう

実際に調査したいアプリのAPKファイルを用意します。 自社アプリであれば、ビルド済みのAPKを使うのが一般的です。

もしくは実機から取得するには、次のADBコマンドを使います:

adb shell pm path com.example.app
# 出力: package:/data/app/com.example.app-1/base.apk

adb pull /data/app/com.example.app-1/base.apk

🛠 APKToolでデコンパイル!

APKファイルが手に入ったら、以下のコマンドでデコンパイル(分解)します。

apktool d base.apk -o extracted_app

✅ 結果(フォルダ構成):

extracted_app/
├── AndroidManifest.xml     ← アプリの設定ファイル(読める形式)
├── res/                     ← UIや画像、文字列などのリソース
├── smali/                   ← アプリのロジック部分(Smali言語)
├── assets/                  ← 独自データ(DB、設定ファイルなど)
├── lib/                     ← ネイティブライブラリ(.soファイル)

🕵️‍♀️ どこを見ればいい?診断の視点

🔍 AndroidManifest.xml

  • アプリの権限(permission)
  • 外部に公開されたコンポーネント(exported)
  • 起動アクティビティやインテントフィルター
  • デバッグ設定やバックアップ許可の有無

MobSFでも見れますが、apktoolで分解した方が編集しやすいです。


🔍 smali/ フォルダ(Smaliコード)

  • Javaをバイトコードにしたもの(逆コンパイルされたコード)
  • LoginActivity.smali など、クラス単位で分割されている
  • 中には getSharedPreferences()Base64.decode() など、パスワード保存や暗号化処理のヒントが潜んでいることも

※ 初心者には少し読みにくいですが、Javaに慣れている人なら雰囲気で読めます。


🔍 res/values/strings.xml

  • アプリ内で使用されている表示文字列(UIやエラーメッセージ)
  • 中に「APIキー」「メールアドレス」「サーバーURL」などが含まれていることも多い!

🔍 assets/res/raw/

  • SQLiteデータベース、設定ファイル、JSONファイルなど
  • 開発者が検証用に残していた“お宝ファイル”が見つかることも

🧪 再構築(Recompile)もできる

APKToolの便利な点は、「分解」だけでなく「再パッケージ」もできることです。

修正後に以下のコマンドを実行すれば、再びAPKとしてまとめられます:

apktool b extracted_app -o modified.apk

※ ただし、このAPKはそのままではインストールできないため、署名が必要です(次回以降で解説予定)。


✅ まとめ

  • APKToolは、APKを構造ごと分解して「設計図」「部品」に戻せる強力ツール
  • AndroidManifest、リソース、コード(smali)などを人間が読める形で確認できる
  • 静的解析やカスタム診断をしたいときに必須!
  • MobSFと合わせて使えば、診断の幅が一気に広がる

Best regards, (^^ゞ