UnityのAssetビューワと復号

Assetビューワ

Perfare氏が開発したAssetStudioが超便利だったので本記事でもオススメしておきます。

暗号化されていないAsset(unity3d)であればこれで何でも読み込めます。

カードデータを読み込んだところ

TextAssetの復号

TextAssetの復号キーはゲームごとに違う上に、実行ファイルに刻まれているのでいくら外部ファイルを眺めてもわかりません。

44氏によればAssembly-CSharp.dllに刻まれているらしいので見てみることにしました。

実はAssembly-CSharp.dllってUnity製ゲームの(特にソシャゲ)全てを司るファイルなのですが、結構杜撰な仕組みになっていたりするのでソースコードがほとんどそのまま読めたりします。

いろいろ読み込むすべはあるのですが、手っ取り早いのは.NET reflectorを使う方法でしょう。

体験期間があるのでちょっと調べるくらいならこれで問題ありません。

.NET reflector

読み込むとこのように何から何まで見えてしまいます。

バトガの暗号化はCipherというところで行われているので、そこのサブルーチンを見てみましょう。

PUBLIC_KEY_STRING

なにやらくっそ長いPUBLIC_KEY_STRINGが定義されているんですが、これが鍵でいいんですか?

いや、でもこれ公開鍵だから違いますよね?

多分、暗号化したファイルの正当性チェックとかに使うんだと思う、多分。

sKEY, sIV

一応これも載っていたけど、このまま使って良いのかどうかわからない。

DK, DI, ADI

libmisc.soに載っているのでそれを読み込むだけ。

ただ、バトガで調べると何故かキーにスペースが入っているんだけどこれはこれでいいのだろうか?

コードを書いてみた

ここまでやって飽きた

キーを記述してそれらのクラスを継承した親クラスをつくって、そのクラスからDecryptを呼び出せばいけそうな気がする。

問題はキーが合っているかということと、暗号化素人なのでこれでいいのかどうかがさっぱりわかってないところである。

まあ少なくとも44氏のようにModAPKをインストールして直接アプリに復号させるよりは手間が省けるはずである、多分。

プログラムは書きたいんだけど、気分次第っていう感じ。

ファイルさえあればいつでも復号はできるので、ね。

暗号の本はサイモン・シン氏の著書がすっごい面白いのでおすすめです。