simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

Unity:改造方法の確認

前書き

ゲーム開発者会議などで、ゲームユーザーの100人に一人はゲームを改造して不正を行っていることが明らかになっています。
Unityを利用して企業や個人でゲームをリリースしていますが、それらのゲームが容易に改造されなように対策されていることを確認することは
その後の楽しいゲーム体験が損なわれないことを保証するうえで重要なことです。

例えば、不正に報酬を得るプレイヤーにランキング上位を独占されたり、対戦時に不当な負け方を強いられたりしたら、そのゲームを遊びたくなくなります。
そんなわけで、今回は Unity 製ゲームの改造方法の一つを学び、自分のゲームが対策されていることを確かめる手段を覚えてみます。

ゲームロジックの記述されているファイル

こちらの記事を参考にします。
baba-s.hatenablog.com

直近で作った VRM ランタイムロードの改造が可能か確認することを目的に具体的な作業を記録していきます。
Windows ユーザーに届けるように作ったパッケージは複数のファイルで構成されています。

f:id:simplestar_tech:20190105132428j:plain
Build指定先のフォルダの様子
ゲーム名_Data フォルダを開いてみましょう。
f:id:simplestar_tech:20190105132518j:plain
ゲーム名_Data フォルダの様子
ハイライトしたように Managed フォルダがあります。
この中の Assembly-CSharp.dll ファイルにゲームのロジックが記録されています。

.dll ファイルの中身の確認

ゲームロジックが記録されている Assembly-CSharp.dll の中身を確認するツールを手元に用意しましょう。
GitHub - 0xd4d/dnSpy: .NET debugger and assembly editor
こちらのリリースの最新版を取得して起動します。

File > Open メニューから Assembly-CSharp.dll を開いて、中身を見てみます。

f:id:simplestar_tech:20190105134957j:plain
GameManager クラスの実装を表示している様子

すべてのゲームロジックがユーザーに公開されてしまっていることがこの確認操作でわかりました。

改造してみる

右クリックメニューから Edit Method が選べたので、こちらでLoadするファイル名を Vita から sendagaya_xiv に変更しました。
右下の Compile ボタンを押して成功したので、File > Save All で保存確認ダイアログが出るので OK を押して上書きします。

以上…

ゲームを起動すると、全く違うキャラクターをロードしてゲームが始まってしまいました。

f:id:simplestar_tech:20190105143716j:plain
改造後にゲームを起動すると Vita ではなく違うキャラがゲーム内に登場した

おわりに

PlayerSettings でMono から IL2CPP に切り替えると、ビルド時間は伸びますが難読化にはなる様子
ですが、オンラインゲームのような不正を行うと他のプレイヤーに害が及ぶようなケースでは何らかの対策を入れて、可能な限り不正の芽は摘んでおきたいところですね。