前書き
ゲーム開発者会議などで、ゲームユーザーの100人に一人はゲームを改造して不正を行っていることが明らかになっています。
Unityを利用して企業や個人でゲームをリリースしていますが、それらのゲームが容易に改造されなように対策されていることを確認することは
その後の楽しいゲーム体験が損なわれないことを保証するうえで重要なことです。
例えば、不正に報酬を得るプレイヤーにランキング上位を独占されたり、対戦時に不当な負け方を強いられたりしたら、そのゲームを遊びたくなくなります。
そんなわけで、今回は Unity 製ゲームの改造方法の一つを学び、自分のゲームが対策されていることを確かめる手段を覚えてみます。
ゲームロジックの記述されているファイル
こちらの記事を参考にします。
baba-s.hatenablog.com
直近で作った VRM ランタイムロードの改造が可能か確認することを目的に具体的な作業を記録していきます。
Windows ユーザーに届けるように作ったパッケージは複数のファイルで構成されています。ゲーム名_Data フォルダを開いてみましょう。ハイライトしたように Managed フォルダがあります。
この中の Assembly-CSharp.dll ファイルにゲームのロジックが記録されています。
.dll ファイルの中身の確認
ゲームロジックが記録されている Assembly-CSharp.dll の中身を確認するツールを手元に用意しましょう。
GitHub - 0xd4d/dnSpy: .NET debugger and assembly editor
こちらのリリースの最新版を取得して起動します。
追記:次の記事で紹介されている ILSpy というツールを使う人も多いみたい
dot-sharp.com
File > Open メニューから Assembly-CSharp.dll を開いて、中身を見てみます。
すべてのゲームロジックがユーザーに公開されてしまっていることがこの確認操作でわかりました。
改造してみる
右クリックメニューから Edit Method が選べたので、こちらでLoadするファイル名を Vita から sendagaya_xiv に変更しました。
右下の Compile ボタンを押して成功したので、File > Save All で保存確認ダイアログが出るので OK を押して上書きします。
以上…
ゲームを起動すると、全く違うキャラクターをロードしてゲームが始まってしまいました。
おわりに
PlayerSettings でMono から IL2CPP に切り替えると、ビルド時間は伸びますが難読化にはなる様子
ですが、オンラインゲームのような不正を行うと他のプレイヤーに害が及ぶようなケースでは何らかの対策を入れて、可能な限り不正の芽は摘んでおきたいところですね。
追記:そのマインドでこれを読むと理解や覚えが早くなるとか
難読化についてはこちらを参考にしてアセットを買いました
【Unity】Unity 製の PC ゲームにおける逆コンパイル・改造の方法と難読化による対策を紹介 - コガネブログ