見出し画像

【超速GP】音源データ解析

『ミニ四駆 超速グランプリ』(以下、超速GP)の音源データの解析について解説する。

注意事項

この解説は、誤った情報を払拭し、正しい情報を得る目的で提供されるが、ゲームの利用規約に抵触する内容が含まれる。不正な手段で得られた情報を利用してゲームを有利に進めることは、他のプレイヤーとの公平さを欠くチート行為に当たるため、正しい倫理観に基づく行動を期待する。

なお、今回解析対象としたデータは暗号化が行われている。復号するにあたっての適法性は当方では保証しないため、各自の責任で行うこと。また、解析データを公開する場合は著作権法に留意する必要がある。

ストリーミングアセットの抽出

音源データのほとんどはWebサーバからダウンロードするAssetBundleではなく、アプリ内にStreamingAssetsとして同梱されている。このため、まずは端末にインストールしたアプリ本体を何らかの方法でPCに転送するか、PCでアプリストアから直接アプリ本体をダウンロードする必要がある。

今回はAndroid端末にインストールされたapkをファイラーを使ってPCへ転送した。その後、7-Zipなどの解凍ソフトを使ってapkを解凍・展開しておく。

HCA鍵の解析

音源データは展開したフォルダ内の\assets\PROTO_SOUND\に置かれているが、暗号化されていてそのままでは再生することができない。Unityエンジン採用アプリでは画像や3Dモデルは暗号化されていないのに、音源やテキストは暗号化されていることが多いようだ。音源データの実体はHCA形式だが、その再生に必要な鍵をHCA鍵と呼ぶ。

有名アプリであれば誰かが見つけたHCA鍵が出回っている(vgmstream/src/meta/hca_keys.h 参照)が、超速GPのようなリリースされて間もないマイナーアプリでは自分で鍵を見つけ出す必要がある。HCA鍵の取得方法はアプリによって異なるため、この鍵をどのように見つけるかが解析の要となる。

apkに含まれるUnityライブラリの一部を自作のプロキシに置き換えて、プロセス間の通信内容をlogcatに吐き出す(Reverse Engineering on MLTD: HCA Key Extraction 参照)といった方法があるが、ややハードルが高いので最後の手段にしたい。

いくつかのブログを読んだところ、apkを展開した\assets\bin\data\内の「level0」というバイナリファイルにHCA鍵が含まれていることが多いようだ。

ところが、超速GPの場合は\assets\bin\Data\フォルダはあっても「Level~」といったファイルは見当たらない。同フォルダにはチュートリアルやガシャ演出などで使用する最低限のアセットをまとめた「data.unity3d」が存在しているのだが、ふとこれをUABE (Unity Assets Bundle Extractor)で開いて展開したところ「Level~」ファイルを切り出せることに気付いた。

スクリーンショット 2020-05-03 15.27.27

「Level0」から「Level121」まで根気強く調べる覚悟でいると、運良く「Level1」ファイルでそれらしき数列を発見した。

スクリーンショット 2020-05-03 19.24.01

HCA鍵は10進数で7957824642808300098、16進数では6E6FDF59AB704242となる。

スクリーンショット 2020-05-03 15.28.26_cut

音源データの復号

最後にacbDecrypterを利用して音源データを復号する。

1. acbDecrypterをダウンロード
2. acbDecrypterのhcaToWavフォルダ内の「復号鍵リスト.txt」に超速GPのHCA鍵を16進数で追記
3. acbDecrypter.exeを実行してアプリの\assets\PROTO_SOUND\フォルダを読み込む
4. 表示される復号鍵リストから超速GPを選択して決定

すると、acb/awbファイルからHCAファイルが抽出され、HCAファイルが復号され、無圧縮WAVファイルに変換され、一般的なオーディオプレイヤーで再生可能となる。

スクリーンショット 2020-05-03 19.42.48

なお、WebサーバからダウンロードするAssetBundleにもTextAssetとして音源データが含まれている場合がある。AssetStudioでエクスポートしてみたが、こちらはなぜかacbDecrypterでの自動変換が上手くいかなかったので、手動で変換することで再生できるようになった。

1. acb/awbファイルをacbToHca/AFS2アーカイブ.batにD&Dしてアーカイブ
2. アーカイブファイルをacbToHca/先頭をカットして展開.batにD&Dして再展開
3. 再展開ファイルをacbToHca/先頭をカットして展開.batにD&Dして暗号化hcaファイルに切り出し
4. 暗号化hcaファイルをhcaToWav/復号化.batにD&DしてHCA復号鍵を入力
5. 復号化hcaファイルをhcaToWav/hca.exeにD&Dして無圧縮WAV変換

なお、キャラゲーではないので大した音源データは入っていない。