ダーク/ライト切り替え

【Unity】セーブデータの改ざんやチート対策を考えてみる

投稿日2023-03-23

Picture of the logo


目次

目次を読み込み中...

ゲーム開発者にとって、チートは永遠の悩みです。どんなに対策しても開発者とチーターは「いたちごっこ」です。今回は初歩的な手段ではありますが、CRCやSHA256といった技術を使ってデータの改ざん、チート行為を検出する方法を紹介します。

# CRC、SHA256について

CRCやSHA256は、データの改変や誤り検知を行うための手法です。

# CRCとは

CRC(Cyclic Redundancy Check)は、送信されたデータに対して剰余を計算して、その結果を誤り検知のための冗長情報として付加することで、受信側での誤り検知を行います。CRCにはいくつかの種類があり、16ビットのCRC16や32ビットのCRC32が一般的に使われています。

# SHA256とは

一方、SHA256は、データの改変を検知するためのハッシュ関数の1つで、入力されたデータから256ビットの固定長の値を生成します。SHA256は、同じデータに対しては必ず同じ値を生成するので、データの改変を検知するために利用されます。SHA256は、セキュリティの強化が必要な場合にも利用されます。

# 実際にコードを書いてみる

Firebaseなどに保存する際データに改変が無いか検出する簡単なサンプルコードを紹介します。

# CRCを用いたチート検出

上記の例では、セーブデータの内容を文字列化してCRC32ハッシュを計算し、Firebase等に保存するときにそのハッシュ値も保存しています。そしてセーブデータを読み込むときに、読み込んだデータから再度CRC32ハッシュを計算し、保存されているハッシュ値と比較して一致しない場合は改変が検出されたと判断するという流れになっています。

# SHA256を用いたチート検出

上記の例では、セーブデータの内容を文字列化してSHA256ハッシュを計算し、Firebase等に保存するときにそのハッシュ値も保存しています。そしてセーブデータを読み込むときに、読み込んだデータから再度SHA256ハッシュを計算し、保存されているハッシュ値と比較して一致しない場合は改変が検出されたと判断するという流れになっています。

# さいごに

これらの手法は、ゲームアプリ開発においてセーブデータの改変を防止するために利用されることがあります。ゲームアプリでは、ユーザーがセーブデータを改変することで不正なアイテムやスコアを入手することができます。そのため、セーブデータにCRCやSHA256のような認証情報を追加することで、改変を検知し、不正行為を防止することができます。

ただし、完全に改変を防ぐことはできないため、セーブデータの暗号化やセキュリティ強化など、より高度なセキュリティ対策が必要になる場合もあります。また、セーブデータの改変を検知するための認証情報を保存すること自体が、攻撃者に対してセーブデータの改変を容易にする可能性もあるため、セキュリティ対策の考え方や実装方法には慎重になる必要があります。

これらは初歩的な技術の紹介であり、これらの情報により生じたいかなる損害につきましても当方では責を負いかねますので予めご了承ください。






関連記事

Unity】一枚のイメージ画像を縦横のタイル状に分割する方法

blog

UnityのUGUIを使用して、一枚のイメージ画像を縦横に分割して表示する方法を紹介します。

Unityでモザイク処理をする方法

blog

今回はUnityで画像にモザイク処理を掛ける方法を紹介します。標準機能では用意されていないようなのでカスタムシェーダーで実装します。

FirebaseStorageからUnityへファイルを読み込み、Resourcesに保存する

blog

UnityでFIREBASEのStorageサービスから画像ファイルをダウンロードしてシーン上に表示、保存するまでの簡単な手順紹介です。

UnityでFirebase Storeからデータを読み書きする

blog

FirebaseのFireStoreのデータをUnityから読み書きする手順を紹介します。入門レベル。

Unityで端末情報、IPアドレスを取得する方法

blog

Unityにて端末固有情報などをC#コードから取得する方法をまとめました。

【初心者】Unityでリンク先のウェブサイトを開く方法【備忘録】

blog

Unityからウェブサイトを開く方法を簡単に紹介します。初心者向け、備忘録

Firebase AuthentificationでEmailアカウントと匿名アカウントを実装する

blog

今回はFirebase Authentificationを使ってUnityに匿名認証、メール認証を実装する手順を紹介します。

【Unity】文字列に禁止ワードが含まれているかチェックをする方法

blog

Unityで下品な単語など望ましくない言葉が含まれていないかをチェックする方法を紹介します

UNITYからMYSQLデータベースにアクセスする【初心者向け】

blog

UnityからMySQL等のデータベースにアクセスする簡単なサンプルプログラムを紹介します。若干Java Scriptの知識も必要になります。

【Unity X Node.js】クライアント~サーバー間でAES暗号通信してみた

blog

Unityの暗号ライブラリCryptgraphyを使って暗号通信してみたかったので試してみました。


スポンサーリンク

このサイトをシェアする