元ドキュメント: Unity AB Encryption
ソリューション概要
AssetBundleとは、Unityが提供するリソース保存用の圧縮形式を使用してリソースをパッケージングした集合体です。現在、Unityゲームリソースの主流なパッケージング方式です。AssetBundleは4種類の異なるAPIで読み込むことができます。
- AssetBundle.LoadFromMemoryAsync(メモリ消費量大)
- AssetBundle.LoadFromFile(公式推奨方法)
- WWW.LoadfromCacheOrDownload
- UnityWebRequestAssetBundleのDownloadHandlerAssetBundle(Unity 5.3以降)
現在、ハードニングソリューションが提供しているUnity ABリソース暗号化機能はAssetBundle.LoadFromFileのみサポートしています。他の方法で読み込んでいる場合はABリソース暗号化を有効にできません。強制的に有効にしても効果はありません。
使用方法
有効化方法
Unity ABリソース暗号化を使用するには以下の2つのステップが必要です:
- tpshell-config.xmlで最低バージョンを設定します:3.3.0.17246.oversea。libunity.soファイルを暗号化すると同時に、extparamsタグ内に"unityfs_filter"を追加します。xml
<TPVersion>3.3.0.17246.oversea</TPVersion> <!--Encryption configuration for Unity AB--> <EncSo>libunity.so</EncSo> <extparams>{ <!--you can add unityfs_filter in <extparams> to enable assetbundle enc--> <!--ディレクトリパスまたはファイルパスを追加可能--> "unityfs_filter":["assets/assetbundle", "assets/ab"] } </extparams> - コマンドラインツール実行時に-sパラメータを追加し、Unity ABリソースファイル暗号化に必要なシンボルファイルを指定します。symbols.zipファイルの生成方法についてはシンボルファイル生成方法をご参照ください。bash
# APKコマンドラインツールハードニング呼び出し方法 ClientConsole.exe -d <gameId> <apkpath> <outDir> <certPath> -c <configPath> -s <symbolpath> # AABコマンドラインツールハードニング呼び出し方法 ClientConsole.exe -a <gameId> <aabPath> <outDir> <certPath> -c <configPath> -s <symbolpath>
コマンドラインハードニングはUnity ABリソースファイル暗号化をサポートしています。コマンドラインツールの操作方法についてはコマンドラインハードニングツール操作ガイドをご参照ください。
無効化方法
コマンドラインツール実行時に-sパラメータを削除すると、デフォルトでUnity ABリソース暗号化機能が無効になります。
シンボルファイル取得方法
Unity AssetBundleリソース暗号化にはlibunityのシンボルファイルが必要です。シンボルファイルの場所はバージョンによって異なります。
Unityバージョン2018.1.0f2未満
シンボルファイルはUnityインストールパス配下にあります:
Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Symbols\armeabi-v7a\libunity.sym.so。見つけたらarmeabi-v7aディレクトリ全体を圧縮し、最終的に圧縮パッケージのディレクトリ構成がarmeabi-v7a/libunity.sym.soとなるようにします。Unityバージョン2018.1.0f2以上
apk/aabパッケージビルド時に「Create symbols.zip」にチェックを入れると、出力ディレクトリにapk/aabと同名のシンボルzipファイルが生成されます。

検証方法
16進エディタでハードニング前後のリソースファイルを比較します。

アンパッキングツールで暗号化前後のファイルを展開します。暗号化前は正常に解析できますが、暗号化後は正常に解析できなくなります。
