はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】AssetStudioでUnity製のゲーム・AssetBundleの中身を覗き見・エクスポートする(悪用はしないように)

はじめに

今回はAssetStudioというツールを利用して、AssetBundleを抽出&解析してみるという記事になります。

github.com

AssetBundleの中身を解析している様子

あんまり深く掘っていくとグレーな予感がしてきますが、逆に開発者にとってもこういった危険性があるのだと認識していただければ幸いです。

またAsset Studioの利用は全て自己責任でお願いします。悪用はしないようにしてください。

概要

AssetStudioは以下のように説明されています。

None of the repo, the tool, nor the repo owner is affiliated with, or sponsored or authorized by, Unity Technologies or its affiliates.

AssetStudio is a tool for exploring, extracting and exporting assets and assetbundles.

GitHub - Perfare/AssetStudio: AssetStudio is a tool for exploring, extracting and exporting assets and assetbundles.

AssetStudioAssetAssetBundlesを探索・抽出・エクスポートするためのツールです。

またUnity Technologiesと一切関係ないよと強調されていましたね。


対応しているUnityのバージョンは3.4 ~ 2021.2らしいです。

Support version:
3.4 - 2021.2


加えて対応しているアセットの種類は以下の通りで、結構幅広いですね。

Support asset types:
Texture2D : convert to png, tga, jpeg, bmp
Sprite : crop Texture2D to png, tga, jpeg, bmp
AudioClip : mp3, ogg, wav, m4a, fsb. support convert FSB file to WAV(PCM)
Font : ttf, otf
Mesh : obj
TextAsset
Shader
MovieTexture
VideoClip
MonoBehaviour : json
Animator : export to FBX file with bound AnimationClip

環境

Windows10
Unity 2020.3.32f1
AssetStudio.net472.v0.16.40

インストール

以下のReleaseページから一番新しいzipファイル(私の場合はAssetStudio.net472.v0.16.40.zip)をダウンロードして、解凍します。
github.com

下準備

解析するためのAssetBundleを生成します。

まずは実験対象として以下のファイルを用意しました。

  • Animation Clip
  • Audio Clip (mp3)
  • Text Asset (json, txt)
  • Video Clip (mp4)
  • Shader
  • Texture2D, Sprite (png)
準備したファイル

後はビルドを行います。

public class CreateAssetBundles
{
    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string assetBundleDirectory = "Assets/AssetBundles";
        if(!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        BuildPipeline.BuildAssetBundles(assetBundleDirectory, 
                                        BuildAssetBundleOptions.None, 
                                        BuildTarget.StandaloneWindows);
    }
}

ビルドされたファイル群

AssetBundles
|--- AssetBundles
|--- AssetBundles.manifest
|--- sample
|--- sample.manifest

最後にWindows StandAloneでビルドを行いました。

使い方

AssetStudioGUI.exeを起動します。

AssetStudioGUIのデフォルト画面

左上のFile/Load file(Load folderなら中のファイルを全部走査してくれる)を選択し、対象のAsset Bundleを選択します。

File/Load file

ちなみにローカルからAssetBundleを読み込む実装をしている場合には、たいていStreamingAssetsの中にAssetBundleが含まれています。

// Windows StandAloneの場合
.
|--- ○○_Data
         |--- StreamingAssets
                  |--- AssetBundles
                  |--- AssetBundles.manifest
                  |--- sample
                  |--- sample.manifest

このsampleLoadしてみると・・・。

中身が見れている様子

ちゃんと中身が見れていますね。画像のプレビューとかは分かりますが、なんならAudioClipの再生機能までありました。

また上記の方法でAssetBundleを生成するとLZMA形式の圧縮がされていたはずですが、普通に見れるようです。

対象ファイルをエクスポート

対象のファイルを選択し、Export/All assetを押すことでエクスポートすることができます。

ファイルをエクスポート
エクスポートしたファイルたち

ひとこと

今回はローカルにあるAssetBundleを対象としていましたが、サーバーからダウンロードするタイプでもいくらでも中身を見る手法はあります。

あんまり書くと怒られそうですが、リモートからダウンロードしたAssetBundleは結局ローカルに保存されることが多いですし、なんならダウンロード先のURLを調べることができればAssetBundleを取ってこれます。

またURLから予想して、まだ正式に公開されていないAssetBundleを・・・なんてことも不可能ではありません。

逆に開発者側の視点に立つならば、URLを予想できないようにしたり、AssetBundleの中身を暗号化 or AssetBundle自体を暗号化するなどの対策が考えられます。