Anti-Cheat インターフェース

EOS 製品への Anti-Cheat の導入に関する前提条件、ネットワーク アーキテクチャ、プラットフォーム コンポーネントなどについて説明します。

Preview Only

Anti-Cheat インターフェース を使用するには SDK 1.12 以上が必要となります。Anti-Cheat インターフェースがサポートするプラットフォームは Windows、Mac、Linux です。64 ビットのオペレーティング システムをインストールする必要があります。

オンラインのマルチプレイヤーゲームでの不正行為を減らすために、Anti-Cheat インターフェース (別名 Easy Anti-Cheat) を使用できます。このインターフェースでは、ゲーム クライアントを、ゲーム サーバーまたはその他のゲーム クライアントによって検証される不正対策保護モードで起動するためのツールを提供します。これらのインターフェースは、デジタル著作権管理 (DRM) やコードの難読化のツールではなく、純粋なオフラインのプレイには有用ではありません。

Anti-Cheat インターフェースには 2 種類の保護機能があります。

  • チートの防止: 直接的な方法を使用してゲーム プロセス メモリを読み取ったり書き込んだりするなどの一般的なチート技法を受動的に防止します。

  • チートの検知: チートに対する措置を講じるため、より専門的な方法でゲームを操作しているアカウントを特定します。

Anti-Cheat インターフェースを使うには、次の手順を実行します。

  1. 開発の前提条件 を確認し、遵守します。

  2. ネットワーク アーキテクチャクライアント ポリシー を決定します。

  3. クライアント モジュールファイル統合ツールAnti-Cheat Bootstrapper 実行ファイル を構成します。

  4. (Windows のみ) Windows サービス インストーラー を設定します。

  5. Anti-Cheat インターフェースを次のとおりゲーム コードに統合します。

    1. Connect インターフェース を使用して、ユーザー ID を生成する

    2. クライアント サーバー または ピアツーピア モード のコールバックを登録します。

    3. 保護されたセッション通知 を設定します。

  6. 整合性チェック リスト で Anti-Cheat インターフェースが正しく動作していることを確認します。

開発の前提条件

アンチチート サービスが効果的であるためには、セキュリティのベスト プラクティスを遵守し、発生したゲームの問題に積極的に対処する強固なゲーム基盤上で実行する必要があります。

ゲーム アーキテクチャ

できるだけ多くのゲーム ステートの権限のある専用のゲーム サーバーの使用を強くお勧めします。

例えば、プレイヤーが空を飛んだり、テレポートしたり、超高速で移動できるチートは通常、ゲーム サーバーにプレイヤーの位置や動きの権限を与えることでゲーム アーキテクチャの段階で完全に防ぐことができます。

ゲームの脆弱性

多くの場合、ゲーム ロジックのエラー、バグ、エッジ ケースはプレイヤーに発見され悪用されます。しかし、アンチチート サービスはゲーム コードが書き込まれたとおりに動作していると理解し、問題の解決はできません。開発を続けて新しい脆弱性が見つかった場合、ゲーム デベロッパーとして問題を解決しなければなりません。

ゲーム レベルのアンチチート

自身の開発チームが、ゲームに特化した知識を活かして、ゲーム レベルでチートを防止および検知することができます。チート販売者のターゲットになったゲームは、アンチチート サービスを補完してゲームの問題を解決する少人数の開発チームを持つことで大きなメリットを得られます。

プレイヤー レポート

同じゲームセッションに参加している他のプレイヤーが不正行為を行なっていると思われる場合に、プレイヤーが報告できるよう、レポート インターフェース を実装することが重要です。これにより、各ゲームのアンチチート プロテクションの有効性に関して重要な状況とフィードバックが得られます。

プレイヤー進行度管理

進行状況が後でゲームのサーバーに同期されるオフラインやソロプレイのシナリオの場合、アンチチート サービスは効果的に保護することはできません。

ゲーム ネットワーク アーキテクチャ

Anti-Cheat インターフェースは、各種ゲーム ネットワーク アーキテクチャのさまざまなモードをサポートしています。Anti-Cheat クライアント インターフェースが各ゲーム ネットワークをサポートするのに対し、Anti-Cheat サーバー インターフェースは、専用サーバーに特化して動作します (クライアント サーバー モード)。

専用サーバー (クライアント サーバー モード)

このモードを権限あるゲーム サーバーで使用し、Anti-Cheat クライアントとAnti-Cheat サーバー両方のインターフェースを実装します。

![Communication flow of the Client-Server mode of network architecture](AntiCheat_ClientServerMode.png)

個々のゲーム サーバーのオペレータは、ネットワーク接続を操作するなどしてサーバー内の Anti-Cheat を意図的に無効化または切断することができます。これは、コミュニティが運営するサーバーをサポートするゲームのリスクとして許容されています。このリスクを軽減するために、「公式」と「非公式」のゲーム サーバーのユーザー インターフェースを区別できます。

クライアントがゲームに参加する直前に EOS_AntiCheatClient_BeginSession を呼び出すと、ゲーム EOS_AntiCheatServer_RegisterClient を呼び出すよう、サーバーがクライアントの保護されたセッションとゲーム サーバーの呼び出しを一致させる必要があります。

ピアツーピア メッシュ (ピアツーピア モード)

このモードは、ゲーム クライアントが他のすべてのゲーム クライアントとネットワーク メッセージを交換するが、どのゲーム クライアントもゲーム セッションに対する全権限を持たないフルメッシュ レイアウトに使用します。

![Communication flow of the Peer-to-Peer mode of network architecture](AntiCheat_PeertoPeerMode.png)

このモードでは、Anti-Cheat サーバー インターフェースは使用しません。その代わり、プレイヤーは Anti-Cheat クライアント インターフェースを使用し、他のプレーヤーが不正対策保護を有効にしているかどうかを確認します。

ローカル ユーザーとして同じゲームセッションに参加する各ピアに EOS_AntiCheatClient_RegisterPeer 関数を呼び出します。

リッスン サーバー

ゲーム セッションにおいてシングル プレイヤーが権限のあるゲーム ホストとしての役割を果たす場合、ピアツーピアまたはクライアント サーバー モードのどちらかを使用しなければいけません。

![Communication flow of the Listen Server mode of network architecture](AntiCheat_ListenServerMode.png)

ピアツーピア モードの場合

  • 権限のあるゲーム ホスト クライアントは、各プレイヤーをピアとして登録し、必要に応じてデータを交換することで、ゲームセッションのすべてのプレイヤーを検証してください。

    • ピアの削除操作が必要なコールバックが発生した場合、権限のあるゲーム ホスト クライアントは、そのプレイヤーをゲーム セッションから退出させてください。

  • 権限のないゲーム ホスト クライアントは、特定のクライアントをピアとして登録し、必要に応じてデータを交換することによってのみ、ゲーム ホスト クライアントを検証してください。

    • ゲーム ホストの削除操作が必要なコールバックが発生した場合、権限のないクライアントは、接続を切断し、適切なエラーメッセージを表示してください。

クライアント サーバー モードの場合

  • よりシンプルなアプローチですが、権限のあるゲーム ホスト クライアントはより特権のある役割となり、不正利用される可能性があります。

  • 実装は、ログインしているローカル プレイヤーを EOS_AntiCheatServer_BeginSession の呼び出しで指定しなければいけないことを除いて、専用のサーバーと同じです。

クライアント資格情報とポリシー設定

Anti-Cheat インターフェースの クライアント資格情報を設定する場合、ネットワーク アーキテクチャ とユース ケースを考慮してください。

Anti-Cheat クライアント インターフェースには、定義済みの GameClient ポリシー タイプを使用してください。ユーザー必須フィールド フラグは、ゲーム クライアントでは常に有効にしてください。

Anti-Cheat サーバー インターフェースと信頼できる公式サーバーのみを使用するゲームでは、predefined TrustedServer policy タイプを使用し、資格情報を秘密にしてください。

異なる定義済みのポリシー タイプまたはカスタム ポリシーを使用する必要があるかもしれませんが、慎重に検討してください。

次のポリシー アクションを使用できます。

authenticateForLocalUser 必須 クライアントの資格情報保持者が、クライアント サーバーまたはピアツーピアのいずれかの Anti-Cheat クライアント モードを使用して、不正対策 バックエンドで自分自身を認証することを可能にします

authenticateForAnyUser このポリシー アクションは、クライアントがクライアント サーバー モードを使用してリッスン サーバーをホストする場合のみ使用します。 クライアントの資格情報保持者が、Anti-Cheat サーバー インターフェースを使用してその他のユーザーを認証することを可能にします

sendTrustedGamePlayDataForAnyUser このポリシー アクションは、信頼できる、公式の専用サーバーにのみ使用します。ゲーム クライアントまたはコミュニティがホストのゲーム サーバーに使用したり公開したりしないでください。 クライアントの資格情報保持者が、どのユーザーのアンチチート ゲームプレイ データを提出できるようにします。改ざんされていないと確信している、信頼できる公式の専用サーバーにのみ使用してください。

プラットフォーム コンポーネント

Anti-Cheat インターフェースを使用するには、EOS SDK パッケージに含まれる、バイナリをゲーム クライアントに配布する必要があります。EOS SDK ZIP ファイル内で、SDK > Tools > EOS_AntiCheatTools へ移動します。dist サブディレクトリ内のファイルは、ゲーム クライアントの一部としてプレイヤーにのみ配布してください。その他のファイルは、開発のみに使用し、配布しないでください。

Windows

Anti-Cheat クライアントは 64-bit Windows バージョンのみをサポートしています。32 ビット版のゲームは、64 ビット版のオペレーティング システムで動作している場合にのみサポートされます。

コンポーネント

ファイル名

説明

サービス インストーラー

EasyAntiCheat_EOS_Setup.exe

(必須) Anti-Cheat Windows サービスのインストール、修復、アンインストールに使用します。

Anti-Cheat Bootstrapper

start_protected_game.exe

不正対策を準備し、利用可能な通常の不正対策クライアント保護を使用しゲーム プロセスを開始します。

Service

EasyAntiCheat_EOS.exe

実行可能な Windows サービスで、これにより Anti-Cheat が他のコンポーネントを初期化することができます。

Windows 'dist' サブディレクトリ構造体

<GameRoot>\start_protected_game.exe
<GameRoot>\EasyAntiCheat\EasyAntiCheat_EOS_Setup.exe
<GameRoot>\EasyAntiCheat\Settings.json
<GameRoot>\EasyAntiCheat\SplashScreen.png
<GameRoot>\EasyAntiCheat\Localization

Windows サービス インストーラー

Windows の場合、ゲームと共に不正対策システム サービスがインストール、アンインストールされるよう設定しなければいけません。このため、Windows ユーザーはゲームをインストールする際、管理者権限が必要ですが、そのあとゲームを起動するのに管理者権限は必要ありません。アンチチート対策が取られたゲームを起動すると、Anti-Cheat Bootstrapper が Windows サービスを自動的に起動します。ゲームを終了すると、Windows サービスは自動的に終了します。

コンフィギュレーション
  1. Developer Portal から ProductId を取得します。

  2. 次のコマンドを実行するよう、インストーラーを設定します。

    • EasyAntiCheat_EOS_Setup.exe install <Your ProductId>

    • EasyAntiCheat_EOS_Setup.exe uninstall <Your ProductId>

  3. 成功すると、このコマンドのプロセス終了コードは 0 になります。プロセス終了コードが 0 ではない場合は失敗です。

ストア固有の前提条件
Epic Games ストア

Epic Games ストアについてのドキュメントを参照してください。

Steam

Steamworks Installscript ドキュメント を参照してください。通常は、サービスのインストール操作を行なうために「プロセスの実行」ブロックを定義し、サービスのアンインストール操作を行なうために「アンインストール時のプロセス実行」ブロックを定義します。

Steam Installscript 機能は、Windows 以外のプラットフォームでは利用できない場合があります。

Mac

コンポーネント

ファイル名

説明

Anti-Cheat Bootstrapper

start_protected_game

不正対策を準備し、利用可能な通常の不正対策クライアント保護を使用しゲーム プロセスを開始します。

Mac **dist** サブディレクトリ構造

<GameRoot>\start_protected_game
<GameRoot>\EasyAntiCheat\Settings.json
<GameRoot>\EasyAntiCheat\SplashScreen.png
<GameRoot>\EasyAntiCheat\Localization

Linux

コンポーネント

ファイル名

説明

Anti-Cheat Bootstrapper

start_protected_game

アンチチートを準備し、利用可能な通常のアンチチート クライアント保護を使用しゲーム プロセスを開始します。

Linux **dist** サブディレクトリ構造

<GameRoot>\start_protected_game
<GameRoot>\EasyAntiCheat\Settings.json
<GameRoot>\EasyAntiCheat\SplashScreen.png
<GameRoot>\EasyAntiCheat\Localization

Linux Wine / Proton のサポート

Wine または Proton 互換性レイヤーを使用して Linux 上で多くの Windows ゲームの実行が可能であり、アンチチート クライアント保護はこの構成をサポートできます。このサポートをゲームで有効にするには、SDK version 1.14 以上を使用し Linux プラットフォームに対して クライアント モジュール をアクティブにする必要があります。

Wine または Proton でゲームを実行しているプレーヤーは、Linux クライアント モジュールを使用するため、Windows に加えて、Linux のクライアント モジュールの更新を定期的にテストしてアクティブにする必要があります。

コンソール サポート

通常、コンソール プラットフォームは、任意のコードの実行防止をハードウェアのセキュリティ機能に依存しており、これは、ほとんどのタイプの不正の前提条件です。プラットフォームに特化したセキュリティ機能がほとんどのニーズに対応するため、アンチチート クライアント保護は、コンソールには提供されません。

コンピュータ ユーザーとコンソール ユーザー間のクロス プラットフォーム プレイをサポートするには、保護されたゲーム セッションにプレイヤーが参加する時にクライアント保護が必要ないプラットフォームを使用しているかどうかを判断しなくてはいけません。この確認は、プレイヤーのゲーム クライアントが改ざんされていないことに依存してはいけません。悪意のあるユーザーが不正対策を回避するためにこの値を操作する可能性があるため、ゲーム クライアントに使用しているプラットフォームを示すメッセージを送信させるだけでは十分ではありません。

プラットフォームは様々ですが、ゲーム クライアントが生成し、ゲーム サーバーまたはバックエンドが独自に検証するプラットフォーム チケットまたはトークンを使って堅牢なチェックを行なうことができます。これらのチェックでユーザーがアンチチート クライアント保護が必要ないコンソール プラットフォームを使用していることが確認できた場合、EOS_ACCCT_UnprotectedClient フラッグを使用してクライアントをアンチチートに登録し、アンチチートのクライアント チェックからクライアントを除外できます。これにより、サーバー側の不正対策ゲームプレイ データ収集では引き続き参照されます。