Anti-Cheat Interfaces

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

17 分で読めます

Anti-Cheat インターフェースは EOS SDK 1.12 以上の使用が必要となります。

インターフェースは、Anti-Cheat Client インターフェースと Anti-Cheat Server インターフェースの 2 種類があります。

  • Anti-Cheat Client いインターフェースは Windows、macOS、ChromeOS、Linux 64 ビット オペレーション システムのみをサポートします。仮想マシン (VM) はサポートしません。
  • Anti-Cheat Server インターフェースは VM を含む、すべてのプラットフォームをサポートします。

(Anti-Cheat Interfaces は Easy Anti-Cheat としても知られています。)

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

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

  • チートの防止: 直接的な方法を使用してゲーム プロセス メモリを読み取ったり書き込んだりするなどの一般的なチート技法を受動的に防止します。
  • チートの検知: チートに対する措置を講じるため、より専門的な方法でゲームを操作しているアカウントを特定します。

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

  1. 開発の前提条件 を確認し、遵守します。
  2. ネットワーク アーキテクチャクライアント ポリシー を決定します。
  3. クライアント モジュールアンチチート整合性ツールAnti-Cheat Bootstrapper 実行ファイル を設定します。 4. (Windows のみ) Windows サービス インストーラー を設定します。
  4. (Windows のみ) Windows サービス インストーラー を設定します。
  5. Anti-Cheat インターフェースを次のとおりゲーム コードに統合します。
    1. Connect インターフェース でユーザー ID を設定します。
    2. Client-Server モードまたは Peer-to-Peer モードのコールバックを登録します。
    3. 保護されたセッション通知 を設定します。
  6. 整合性チェック リスト で Anti-Cheat インターフェースが正しく動作していることを確認します。

開発の前提条件

不正対策サービスを効果的に行なうために、セキュリティのベスト プラクティスを遵守し、発生したゲームの問題に積極的に対処する、強固なゲーム基盤の上に実行されるものでなければなりません。

ゲーム アーキテクチャ

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

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

ゲームの脆弱性

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

ゲーム レベルの不正対策

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

プレイヤー レポート

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

プレイヤー進行度管理

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

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

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

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

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

Communication flow of the Client-Server mode of network architecture

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

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

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

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

Communication flow of the Client-Server mode of network architecture

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

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

リッスン サーバー

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

Communication flow of the Client-Server mode of network architecture

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

  • 権限のあるゲーム ホスト クライアントは、各プレイヤーをピアとして登録し、必要に応じてデータを交換することで、ゲームセッションのすべてのプレイヤーを検証してください。
    • ピアの削除操作が必要なコールバックが発生した場合、権限のあるゲーム ホスト クライアントは、そのプレイヤーをゲーム セッションから退出させてください。
  • 権限のないゲーム ホスト クライアントは、特定のクライアントをピアとして登録し、必要に応じてデータを交換することによってのみ、ゲーム ホスト クライアントを検証してください。
    • ゲーム ホストの削除操作が必要なコールバックが発生した場合、権限のないクライアントは、接続を切断し、適切なエラーメッセージを表示してください。

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

  • よりシンプルなアプローチですが、権限のあるゲーム ホスト クライアントはより特権のある役割となり乱用の可能性があります。特に、悪意のある権威のあるゲーム ホスト クライアントは、アンチチートがセッションで機能するのを意図的にブロックする可能性があります。これが懸念される場合は、代わりにピアツーピア モードの実装を使用する必要があります。
  • 実装は、ログインしているローカル プレイヤーを 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 サブディレクトリ内のファイルは、ゲーム クライアントの一部としてプレイヤーにのみ配布してください。その他のファイルは、開発のみに使用し、配布しないでください。EOS SDK の新しいバージョンに更新するたびに、使用中のプラットフォーム コンポーネント ファイルを更新する必要があります。

Windows

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

コンポーネントファイル名説明
サービス インストーラーEasyAntiCheat_EOS_Setup.exe(必須) Anti-Cheat Windows サービスのインストール、修復、アンインストールに使用します。
Anti-Cheat Bootstrapperstart_protected_game.exe不正対策を準備し、利用可能な通常の不正対策クライアント保護を使用しゲーム プロセスを開始します。
ServiceEasyAntiCheat_EOS.exe実行可能な Windows サービスで、これにより Anti-Cheat が他のコンポーネントを初期化することができます。

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

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

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

コンフィギュレーション
  1. デベロッパー ポータルから ProductId を取得します。
  2. 次のコマンドを実行するよう、インストーラーを設定します。
    • EasyAntiCheat_EOS_Setup.exe install <Your ProductId>
    • EasyAntiCheat_EOS_Setup.exe uninstall <Your ProductId>
  3. 成功すると、このコマンドのプロセス終了コードは 0 になります。プロセス終了コードが 0 ではない場合は失敗です。
ストア固有の前提条件
Epic Games Store

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

Steam

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

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

Mac

コンポーネントファイル名説明
Anti-Cheat Bootstrapperstart_protected_game不正対策を準備し、利用可能な通常の不正対策クライアント保護を使用しゲーム プロセスを開始します。

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

Linux

コンポーネントファイル名説明
Anti-Cheat Bootstrapperstart_protected_game不正対策を準備し、利用可能な通常の不正対策クライアント保護を使用しゲーム プロセスを開始します。

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

Linux Wine / Proton のサポート

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

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

コンソール サポート

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

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

EOS Connect インターフェースは、プレイヤーが一般的なコンソールからゲームを実行していることを安全に確認するために使用できるデバイスタイプ フィールドを含む EOS ID トークン を提供します。他のプラットフォームをサポートするには、プラットフォーム ベンダー独自のドキュメントを参照し、ゲーム クライアントが生成し、ゲームサーバー、バックエンド、またはピア プレイヤーが独自に検証するプラットフォーム チケットまたはトークンを使用して、堅牢なチェックを行う方法を見つける必要があります。これらのチェックでユーザーがアンチチート クライアント保護が必要ないコンソール プラットフォームを使用していることが確認できた場合、EOS_ACCCT_UnprotectedClient フラッグを使用してクライアントをアンチチートに登録し、アンチチートのクライアント チェックからクライアントを除外できます。これにより、保護された PC プレイヤーとのピアツーピアモード セッションに引き続き参加したり、サーバー側のアンチチート ゲームプレイ データ収集で参照したりすることができます。

ID トークンの詳細については「EOS ID Tokens」、Epic アカウントについては「EAS ID Tokens」を参照してください。