【Android】ファイル抽出のメモ

f:id:Arika0093:20150712204134p:plain
実際に運用する際は自己責任でお願いします。

目的

とあるAndroidアプリ(名前はあえて出しません。画像でわかると思います)の画像/音声ファイルを抽出します。
以下の説明ではAndroid環境を保持していることを前提として説明します。

apkファイルの抽出

ESファイルエクスプローラからアプリを開き、メニュー→ライブラリ→アプリからアプリを選択し、バックアップを生成してPCに持っていきます。

apkファイルの解凍

拡張子を.zipに変更して解凍します。ズラズラとファイルが出てきます。

ソースコードの抽出

1. classes.dexをdex2jarを利用して解凍します。.jarファイルが生成されます。

dex2jar.bat (apk解凍先のパス)\classes.dex

2. 生成されたjarファイルの拡張子をzipに変更して解凍します。.classファイルが生成されます。
3. Java Decompilerを使用して.classファイルを開きます。

assetsファイルの解析

1. disunityを使用して以下のコマンドを実行します。

disunity.bat extract (apk解凍先のパス)\assets\bin\Data\*

2. フォルダが大量に展開されて非常に確認しにくいと思われますので、生成されたフォルダを全て適当なフォルダに移し、エクスプローラの検索機能を活用して目当てのファイルを表示させます。
例) .txt(ストーリー), .mp3(BGM/SE), .tga(テクスチャ)

cacheフォルダの抽出

(これ以降の動作にはRoot権限が必要です)
data/data/***(アプリ名)のフォルダをPCに持っていきます。
・cacheにはカードの画像やフィールドの画像などがあります。大体の人の目当てはコレでしょう。
・filesにはtips画像があります。

cache/webviewCacheChromiumのファイル表示

ファイル名がf_******となっているものは、拡張子を.pngに変えることで見ることができます。
中身はお知らせ欄などに表示されている画像です。

cache/assets46ファイルの解析

1. disunityを使用して以下のコマンドを実行します。

disunity.bat bundle-extract (抽出したフォルダ)\cache\assets46
disunity.bat extract (抽出したフォルダ)\cache\assets46\*

2. 「assetsファイルの解析」の2と同様に、検索機能を活用して目当てのファイルを探します。

各ファイルの位置

(app): apkを解凍したフォルダ
(appdata): Root権限を使用して引っ張ってきたキャッシュフォルダ
――――――――――――――――
スプラッシュ画像: (app)\assets\bin\Data\splash.png
メインストーリー: (app)\assets\bin\Dataのファイルをdisunityした後.txtで検索
テクスチャ: (app)\assets\bin\Dataのファイルをdisunityした後.tgaで検索
音声: (app)\assets\bin\Dataのファイルをdisunityした後.mp3で検索
カード/街背景画像: (appdata)\cache\
お知らせ画像: (appdata)\cache\webviewCacheChromium\ (拡張子を.pngに変更)
追加ストーリー: (appdata)\cache\assets46のファイルをdisunityした後.txtで検索
追加テクスチャ: (appdata)\cache\assets46のファイルをdisunityした後.tgaで検索
追加音声: (appdata)\cache\assets46のファイルをdisunityした後.mp3で検索
――――――――――――――――