【Unity】Unityで作ったゲームのメモリ改ざんとその対応策

メモリ改ざんとその対応策についてです。

メモリ改ざんは意外とお手軽

よく行われるチートの一つして、メモリの改ざんが挙げられます。
これはゲーム内に表示されている値からツールを使ってメモリのアドレスを割り出し、そのメモリを書き換えるという手法です。

具体的には下記のように行うようです。

ameblo.jp

とても簡単です。
メモリ改ざんができるツールを使うためには脱獄ややRoot化が必要にはなってくるものの、
ツールが出回っているのでチートの手法の中では難易度が低いものであると言えそうです。

サーバで管理できるところはサーバで行う

まず基本的な対策としては、やはり重要な値はサーバで管理するという点です。

例えば課金アイテムの個数などはサーバで管理して増減する時にバリデーションすれば、
もしメモリが改ざんされても見かけ上の値が一時的に変わるだけです。

クライアントで管理する値はメモリ上の値を変える

ただ、アクションゲームのバトル中など、どうしても通信を挟みづらい部分はあります。
その場合はメモリ上の値を表示している値と変えてしまう対応が有効です。

具体的には以下の手順で行います。

  1. 適当な値を決める
  2. 守りたい値と1.とのXORを計算する
  3. 2.をメモリに保存する
  4. メモリから読む時には2.と1.のXORを計算する(XORを二回計算すると元に戻る性質を利用)

実装は次の記事でわかりやすく紹介されています。

qiita.com

Anti-Cheat Toolkit

前節のように自前で実装してもいいと思いますが、この辺りをライブラリ化してあるアセットも存在します。
有料アセットですが、Anti-Cheat Toolkitを使うとメモリの改ざんを簡単に検知できます。

assetstore.unity.com

またそれ以外にもPlayerPrefsの暗号化やスピードハック対策なども入っているようです。