Using the Anti-Cheat interfaces

41 分で読めます

Anti-Cheat インターフェースがサポートしているプラットフォームは Windows、Mac、Linux で、これらのプラットフォームに 64 ビットのオペレーティング システムがインストールされている必要があります。

Anti-Cheat インターフェースを使用するには、次の手順を実行する必要があります。

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

クライアント モジュールの設定と更新

ゲームを開始するたびに、ゲームに設定された最新の Anti-Cheat クライアント モジュールを Anti-Cheat Bootstrapper がフェッチします。更新にはバグ修正やチート (不正) 行為の検出と防止に対する機能改善が含まれることがあります。

クライアント モジュールの設定と更新および復元

  1. Developer Portal にアクセスします。
  2. [Your Product (あなたの製品)] > [Game Services (ゲーム サービス)] > [Anti-Cheat] に移動します。
  3. ドロップダウン メニューから適切な システム (Windows、Linux、macOS) を選択します。
  4. (更新および復元の場合の場合) モジュールがゲームで期待どおりに動作することを テスト します。
  5. アクティブにするクライアント モジュールの [More Options (その他のオプション)] ボタンから、[Activate Build (ビルドのアクティブ化)] を選択します。

ライブ ゲームでクライアント モジュールを更新する必要がある場合、新規モジュールがゲームで期待どおりに動作することをテストしてからアクティブ化することが重要です。

モジュールをテストする
  1. デベロッパー ポータルの [Client Module Releases (クライアント モジュール リリース)] のリストから、新規クライアント モジュールの [More Options (その他のオプション)] ボタンを選択します。
  2. [Download Config File (コンフィグ ファイルのダウンロード)] を選択します。プレーン テキストのコンフィギュレーション ファイルがダウンロードされます。これによりテスト システムが、アクティブな Anti-Cheat モジュールの代わりに、指定したモジュールをダウンロードして使用できます。
  3. ダウンロードされたコンフィギュレーション ファイルをゲームの実行可能ファイルがあるディレクトリに同じ名前で配置します。
    1. たとえば、ゲームの実行可能ファイル名が「MyGame-Win64-Shipping.exe」である場合、コンフィギュレーション ファイルを同じディレクトリに「MyGame-Win64-Shipping.exe.eac」という名前で配置する必要があります。
  4. Anti-Cheat Bootstrapper を使用して、通常どおりゲームを開始します。
  5. Anti-Cheat Bootstrapper の ログ ファイル を見つけます。
  6. Anti-Cheat Bootstrapper のログ ファイルに想定どおりのタイムスタンプが表示され、コンフィギュレーション ファイルの URL が使用されたレコードがあることを確認します。
  7. 対象のゲーム向けに選択した、適切なテスト手順に従ってゲームを実行します。少なくとも、保護されたマルチプレイヤー ゲーム セッションに正常に接続でき、インゲームの購買オーバーレイなどの必須機能が使用できる必要があります。
  8. テスト システムがライブ環境に適合することを確認できたら終了し、.eac コンフィギュレーション ファイルを削除します。.eac ファイルはゲーム ディストリビューションの一部としてシッピングしないでください。
  9. 新規モジュールがゲームで期待どおりに動作することを確認したら、[Activate Build (ビルドのアクティブ化)] を選択します。
前のクライアント モジュールに戻す

最新のアップデートでゲームに問題が発生する疑いがある場合、前の Anti-Cheat モジュールに戻す必要があります。

更新 の場合と同様の手順ですが、最新バージョンではなく、前のバージョンを選択します。

デベロッパー ポータルでの Anti-Cheat サービス コンフィギュレーション

EOS デベロッパー ポータルにある Anti-Cheat サービス ページの一番上に 2 つのコンフィギュレーション ステータスが表示されています。Client Protection は、各プレイヤーがゲームを開始したときに、Anti-Cheat Bootstrapper を通じて、Anti-Cheat クライアント モジュールが配信されて保護されているかどうかを示しています。Server Kicks は、適切な SDK コールバック を通じて、保護されたゲーム セッションでチート対策保護が実行されていて、チート対策を実行していないまたは違反があるプレイヤーが削除対象としてマークされているかどうかを示します。

[Configure] ボタンをクリックすると、3 種類のコンフィギュレーション オプションから選択できます。

  • Enable all (すべてを有効)

    • このコンフィギュレーションは通常の運用で使用されます。Anti-Cheat クライアント モジュールがゲーム開始時に配信され、保護されたゲーム セッションに常駐します。
  • Enable Client protection while Server kicks is disabled (Server Kicks が無効であるときにクライアント保護を有効化)

    このコンフィギュレーションは、問題が発生したためにチート対策にエラーがある保護ゲーム セッションから多くのプレイヤーを削除する場合に、一時的に使用できます。Anti-Cheat クライアント モジュールはゲーム開始時に配信されますが、保護されたゲーム セッションに常駐しません。そのため、チートの防止および検出は有効ではありません。

  • Disable all (すべてを無効にする)

    • このコンフィギュレーションは、緊急の状況で一時的に使用できます。たとえば、Anti-Cheat に関連するクラッシュが多数のプレイヤーで発生し、以前の Anti-Cheat クライアント モジュールに 戻して も解決できない場合です。Anti-Cheat クライアント モジュールはゲーム開始時に配信されず、保護されたゲーム セッションに常駐しません。可能な場合に常に優先的に採るべき方法は、前のバージョンの Anti-cheat クライアント モジュールに戻すことです。このコンフィギュレーション設定を使用する場合、数時間の移行期間にのみ Client Protection を有効にする必要があります。その後、多数のプレイヤーが保護されたゲーム セッションから突然削除されることを避けるために、Enable all 状態に戻します。

チート対策整合性ツールのコンフィギュレーション

チート対策では、各プレイヤー マシンにあるゲームの必須ファイルとデベロッパーとしてリリースしたファイルの一致を検証できることが必要です。SDK の EOS_AntiCheatTools パッケージに含まれる anticheat_integritytool を使用して、ファイルの整合性チェックを設定することができます。

Anti-Cheat Integrity Tool は、ビルド プロセスの最後で次の 2 つのファイルの生成を簡単に追加できるように設計されているコマンドライン ツールです。

  • コンフィグ ファイルで定義できる、ゲーム ファイルのハッシュ値の署名付きリスト (カタログ)。ランタイム時に、Anti-Cheat サービスがこの署名付きカタログをロードし、コンテンツ ファイルがアクセスされたときに一致していることを確認します。
  • クライアント側の Anti-Cheat の署名付きランタイム コンフィギュレーションであり、製品特有の設定をデベロッパーが設定できます。

ゲーム ファイルはアクセス時に確認されるので、このツールではカタログに記載されているファイルが削除されることを防ぐことはできません。不可欠なファイルがディスク上に存在しない場合に、それを適切に処理することはゲーム コードに任されています。

カタログ ファイル自体またはカタログに記載されているファイルが変更された後にカタログがロードされた場合、保護されたマルチプレイヤー セッションではゲーム クライアントが自動的にブロックされます。ただし、オフライン、単独、または保護されていないモードでの実行はチート対策保護の対象外であるため、そのようなゲームの実行は妨げられません。

ゲームのリリースや更新のたびに、チート対策を有効にした状態でこのツールを実行する必要があります。ゲームのすべてのシッピング ビルドでこのツールが自動的に実行されるように設定し、最終ディストリビューションで正しいディレクトリに出力ファイルが存在していることを確認します。

整合性ツールを設定する

  1. デベロッパー ポータル で、[Your Product] > [Game Services] > [Anti-Cheat] に移動し、[Download Integrity Keys (整合性キーをダウンロード)] をクリックします。整合性チェックに必要なファイルを含む zip ファイルが自動的にダウンロードされます。

    1. これらのファイルは、現在表示されている製品に特有のファイルです。複数の製品を扱っている場合は、必ず該当するパッケージを使用します。

    2. プライベートキーは秘密にしておき、配信しないでください。漏洩すると、プレイヤーが整合性保護をすり抜けることができます。

  2. base_private.key」ファイル および「base_public.cer」ファイルをツーリング zip ファイルから抽出しanticheat_integritytool.cfg」およびanticheat_integritytool.exe`」があるディレクトリに移動します。

  3. anticheat_integritytool.cfg」で、望ましい動作になるように 値を変更します。

    1. search_options」内にあるフィールドを変更して、どのファイルがカタログに記載されるかを制御します。

      1. 整合性チェックの対象には、実行可能コード (.dll、.exe など) を含むゲーム ディストリビューションのすべてのファイルを含めます。すべてのファイルが含まれていないと、チート機能を送り込むチャンスが生まれます。他のゲーム アセットを含めることはそれほど必要ではありません。それらを変更しても、ゲームプレイにおいて著しく不公平だといえるほど優位にならないからです。

      2. 場合によっては、ゲーム エンジンで特定のアセット ファイル形式自体の検証がサポートされていることがあります。

        1. たとえば、Unreal Engine では .pak アーカイブ ファイルの効率的な署名と検証がサポートされています。そのようなサポートを利用できるときは、それを利用し、Anti-Cheat のファイル整合性チェックの対象には含めないことをお勧めします。
    2. runtime_configuration」内にあるフィールドを変更して、次のランタイム設定を指定します。 注記: ** プラットフォーム間で生成されるにもかかわらず、このランタイム構成は現在、Windows クライアントによってのみ尊重されます。

      1. max_active_game_instances:1 台の PC で実行できるアクティブなゲーム インスタンスの最大数を設定します。 この値が指定されていない場合またはゼロに設定されている場合、インスタンス数は無制限になります。

      2. crash_reporter_name:クラッシュ レポート機能の名前を指定します。これはクライアント側の Anti-Cheat サンドボックスに渡されます。クラッシュ レポート機能はクラッシュが発生したゲーム プロセスにアクセスできます。ただし、ゲームの整合性を保つためにそのゲーム プロセスは 30 秒以内に強制的に終了されるため、アクセスできるのはそれまでの時間だけです。

      3. anti_tamper_solution_name:ゲームで利用されている改ざん対策ソリューションの名前。現時点では次の名前を認識できます。Arxan、Denuvo、Themida、StarForce、VMrotect、SteamDRM。ゲームで独自のソリューションや上記以外のソリューションが利用されている場合は、このサービスへの適合性を確保するために引数として「Generic」を渡すことができます。コマンド プロンプトを開いて、次のように入力してツールを実行します。 anticheat_integritytool.exe -target_game_dir <game_root_directory> -productid <your eos_product_id>

  4. このツールが正常に終了すると、指定した「target_game_dir」の「EasyAntiCheat\Certificates」サブディレクトリにファイルが出力されます。

起動コンフィギュレーション

ゲーム プロセスが作成された直後にチート対策保護コンポーネントがロードされるようにするには、Anti-Cheat Bootstrapper ヘルパー実行可能ファイル を指定してゲームを起動する必要があります。Anti-Cheat Bootstrapper に渡すすべてのコマンドライン引数は、自動的にゲーム実行可能ファイルに渡されます。

Anti-Cheat Bootstrapper 実行可能ファイルを設定する

  1. EasyAntiCheat/Settings.json」ファイルで ProductIdSandboxId、および DeploymentId を指定します。これらの値は、デベロッパー ポータル の Product Settings ページで確認できます。
  2. Settings.json」ファイルにゲームの最終実行可能ファイルの一覧を記載して EOS SDK API を呼び出すと、Anti-Cheat で保護されます。
    1. たとえば、Unreal Engine では、ゲームのルート ディレクトリにサイズが小さい「BootstrapPackagedGame」ヘルパー実行可能ファイルを出力するように設定されているが、実際のゲーム実行可能ファイルは「Binaries\Win64」などのサブディレクトリに置かれていることがよくあります。そのような場合は、Anti-Cheat で実際に保護される必要がある、「Binaries\Win64」に置かれている実行可能ファイルが「Settings.json」に記載されている必要があります。
  3. 任意指定のコンフィギュレーション:
    1. title: ランチャープロセスに必要なタイトル (キャプション) を指定します。指定しないと「Easy Anti-Cheat Launcher」が使用されます。

    2. wait_for_game_process_exit: ゲーム プロセスの終了コードにアクセスするには、ランチャー プロセスを開いたままにするために、これを「1」に設定します。ゲーム プロセス ウィンドウが表示されると、ランチャー ウィンドウは表示されなくなります。

    3. requested_splash:スプラッシュ画面のカスタム画像のパス。通常はゲーム独自のグラフィックを使用した画像です。

      1. サポートされている形式は .png のみです。
      2. サイズ:800x450 ピクセルである必要があります。
    4. アイコンのカスタマイズ

      1. Windows
        1. EOS SDK 1.15 以降の Bootstrapper は、executable フィールドで指定されているターゲット実行可能ファイルのアイコンを抽出しようとします。

          それに失敗した場合は、埋め込まれている Easy Anti-Cheat ロゴのアイコンが使用されます。

          Bootstrapper で別のアイコンを使用する場合は、独自のアイコン ファイルを「EasyAntiCheat/BootstrapperIcon.ico」として配置します。

          この変更は、Windows のタスクバーとタスク マネージャーに表示されるアイコンにのみ影響を及ぼします。

          Windows タスクバーに表示されるアイコンをカスタマイズするには、カスタム アイコン ファイルを「EasyAntiCheat/BootstrapperIcon.ico」として配置します。

          Windows エクスプローラーでディスク上のファイルをブラウズするときに Bootstrapper 実行可能ファイルに対して表示されるアイコンは、実行可能ファイル自体に埋め込まれているので変更することはできません。ただし、Epic Games Store (利用方法の参考情報) や Steam などほとんどの PC ストアでは、ゲーム ショートカットで好みのアイコンが使用されるように設定できます。

      2. Mac
        1. EOS SDK 1.15 以降の Bootstrapper は、独自の .app バンドルに格納されています。

          そのため、Bootstrapper 用の Easy Anti-Cheat アイコンが追加されており、それを変更することもできます。そのアイコンを変更するには、「AntiCheatIcon.icns」を独自の .icns ファイルで置き換えます。

          このバンドルは署名付きであるため、アイコンのファイル名は同じままであることが想定されており、アイコンのファイル名を変更すると、独自のシグネチャを使用してバンドルに署名し直す必要があります。

必須または任意指定のコンフィギュレーションで問題が発生した場合は、Bootstrapper の ログ ファイル をまず確認することが最善の手段です。

複数の Bootstrapper コンフィギュレーション ファイルを使用する

複数の Bootstrapper コンフィギュレーション ファイルを配布して、起動時にいずれかに切り替えると便利な場合があります。たとえば、本番環境とテスト環境で SandboxId または DeploymentId の値が異なる同じゲーム ディストリビューションを使用する場合や、ユーザーが選択した起動設定に応じて複数の異なるゲーム実行可能ファイルを使用する場合が考えられます。

-anticheat_settings=SecondarySettings.json」形式のコマンドライン引数を使用し、実際に使用するコンフィグ ファイルのファイル名で「SecondarySettings.json」を置き換えて渡すことにより、使用するコンフィギュレーション ファイルをゲーム起動時に指定することができます。この引数は Bootstrapper で使用され、ゲーム実行可能ファイルには渡されません。

コールバックを登録する

Anti-Cheat Client インターフェースと Anti-Cheat Server インターフェースは、接続を維持し、チート対策保護をプレイヤーに適用するために、マルチプレイヤー ゲーム セッション中にコールバック イベントを生成します。これらのコールバックは、保護されたマルチプレイヤー ゲーム セッションを初めて開始する前に設定しておく必要があります。その設定は使用するモードに応じて異なります。

Generic (汎用)

Anti-Cheat Client には、発生したすべての Anti-Cheat Client の整合性違反をゲーム プロセスに伝える、モードに依存しないコールバックがあります。

ゲーム プロセスに伝えるべき違反情報が Anti-Cheat にある場合にコールバックを登録するには、EOS_AntiCheatClient_AddNotifyPeerAuthStatusChanged を使用します。

このコールバックに与えられたメッセージは、指定された形式でプレイヤーに提示される必要があります。このメッセージは、オンライン マルチプレイヤー セッションに参加できない理由をプレイヤーが理解するのに役立ちます。提示されるメッセージは常に、ローカライズされた形式で提供されます。

この機能では、保護されたセッションで有利な立場を得るためにユーザーが活用できる情報は、ユーザーに公開されません。

クライアントサーバー モード

ゲーム独自のネットワーク機能を使用して、接続されているクライアントとゲーム サーバーに Anti-Cheat メッセージを送る必要がある場合に、トリガーされるコールバックを登録するには EOS_AntiCheatServer_AddNotifyMessageToClient および EOS_AntiCheatClient_AddNotifyMessageToServer を使用します。 EOS_AntiCheatServer_AddNotifyMessageToClient に関連付けられたコールバックがゲーム サーバーでトリガーされた場合は、ゲーム独自のネットワーク機能を使用して、該当するクライアントに opaque (不透明型) メッセージ データを送信する必要があります。そして、そのメッセージ データを受信したら、EOS_AntiCheatClient_ReceiveMessageFromServer を呼び出します。

逆に、EOS_AntiCheatClient_AddNotifyMessageToServer に関連付けられたコールバックがゲーム クライアントでトリガーされた場合、ゲーム独自のネットワーク機能を使用してゲーム サーバーに opaque メッセージ データを送信し、そのメッセージ データを受信したら、EOS_AntiCheatServer_ReceiveMessageFromClient を呼び出す必要があります。

クライアントのチート対策保護が期待どおりに機能しないためクライアントをゲームから除外するなどのアクションを、接続されているクライアントに適用する必要がある場合にトリガーされるコールバックを、EOS_AntiCheatServer_AddNotifyClientActionRequired で登録します。

これらのコールバックでは、それらが指しているコードが無効化された場合に、該当する関数 EOS_AntiCheatClient_RemoveNotifyMessageToServerEOS_AntiCheatServer_RemoveNotifyMessageToClient、および EOS_AntiCheatServer_RemoveNotifyClientActionRequired を削除する必要があります。

次のコールバックはクライアント サーバー モードでは任意指定であり、ゲームに追加情報を提供します。

問題行為 (レベルが適切なコールバックとステータスを受け取る前に、レベルにスポーンされるのを防止するなど) を制限するために、接続されているクライアントが新しい Anti-Cheat 認証状態になったときにトリガーするコールバックを登録することもできます。EOS_AntiCheatServer_AddNotifyClientAuthStatusChanged を使用して新しい状態に対するコールバックを登録し、コールバックが指しているコードが無効になった場合に、該当する関数 EOS_AntiCheatServer_RemoveNotifyClientAuthStatusChanged でこのコールバックを削除します。

ピアツーピア モード

EOS_AntiCheatClient_AddNotifyMessageToPeer は、Anti-Cheat メッセージをピアに送る必要がある場合にトリガーするコールバックを登録します。ゲーム独自のネットワーク機能を使用して該当するピアに opaque メッセージ データを送信し、そのメッセージ データを受信したときに EOS_AntiCheatClient_ReceiveMessageFromPeer を呼び出す必要があります。ピアのチート対策保護が期待どおりに機能しないためクライアントをゲームから除外するなどのアクションを、接続されているピアに適用する必要がある場合にトリガーされるコールバックを、EOS_AntiCheatClient_AddNotifyPeerActionRequired で登録します。その時点のゲームプレイの状況に応じてこのアクションに対処する最適な方法を決定することは、ゲームに任されています。ピアを除外する必要があるという通知を受け取ったときに、権限のないクライアントにおいて最も簡単な対処方法は、明確なエラー メッセージを付けてゲームから切断することです。

この解決法は 1 対 1 の対戦などの小規模なゲーム セッションではうまく機能しますが、大規模なゲーム セッションでは複雑なゲーム ロジックが必要になります。EOS_ANTICHEATCLIENT_PEER_SELF は、ローカル ゲーム クライアントを表す特殊なハンドルであり、ローカル ゲーム クライアントがオンライン プレイに参加できない (ピアによって拒否される) ことを伝えるために使用されます。

ピアの認証ステータスが変わったときに、トリガーされるコールバックを登録するには、EOS_AntiCheatClient_AddNotifyPeerAuthStatusChanged を使用します。新しいピアが登録されて通信が確立された後に、このコールバックがトリガーされるまでに最大 60 秒かかることがあります。たとえば、このコールバックを使用して、Anti-Cheat 認証が完了するまではピアからの一部のアクションのみを許可することもできます。

認証が完了したと見なされるのは、前述のコールバックが EOS_EAntiCheatCommonClientAuthStatus::EOS_ACCCAS_RemoteAuthComplete を指定して呼び出されたときです。つまり Anti-Cheat バックエンドでユーザーが正常に認証されたということです。

認証が完了する前にオンライン プレイへの参加がプレイヤーに許可されると、クライアント側のチート対策保護が実行されていることが保証されません。そのような状況では、認証タイムアウトがキックされるまでプレイヤーがプレイできることになります。

アクティブ オンライン セッションから離脱しないプレイヤーがゲームの整合性に影響を及ぼす場合は、完全な認証チェックを実行する必要があります。

保護されたゲーム セッションの通知

Anti-Cheat インターフェースがアクティブになるのは、保護されるマルチプレイヤー ゲームにプレイヤーが参加しているときだけです。保護されたマルチプレイヤー セッションでプレイヤーが参加または離脱したときに、次の API を使用してインターフェースに通知する必要があります。

保護されたゲーム セッションの開始時

保護されたマルチプレイヤー ゲーム セッションにローカル ユーザーが入るときに、EOS_AntiCheatClient_BeginSession を使用して Anti-Cheat Client インターフェースに通知する必要があります。

クライアント サーバー モードを使用している場合は、保護されたマルチプレイヤー セッションが開始されているときに、EOS_AntiCheatServer_BeginSession を使用して Anti-Cheat Server インターフェースにも通知する必要があります。

保護されたゲーム セッションの進行中

各コールバックは定期的な EOS_Platform_Tick 呼び出しを当てにしています。詳細については、「Platform インターフェース」を参照してください。

クライアントを登録する (クライアントサーバー モード)

専用サーバー (クライアントサーバー モード) では、EOS_AntiCheatServer_RegisterClient を使用して、保護されたゲーム セッションに参加する各クライアントを登録する必要があります。保護されたゲーム セッションの開始時に、すでに参加している各プレイヤーに対しては、保護されたゲーム セッションの開始時にこの関数を呼び出し、保護されたゲーム セッションの進行中に参加するプレイヤーに対しては、その時点でこの関数を呼び出します。

ゲーム サーバーでのこれらの呼び出しは、クライアントでの EOS_AntiCheatClient_BeginSession および EOS_AntiCheatClient_EndSession の呼び出しと対応している必要があります。

たとえば、レベルの移行が始まったときにクライアントの登録を解除し、移行が終了したときにクライアントを再登録することを選択できます。同様に、各クライアントが、保護されたゲーム セッションを終了してから再起動するようにしておく必要もあります。

また、保護されたゲーム セッションを離脱するときや、セッションを終了するときに、EOS_AntiCheatServer_UnregisterClient を使用して、登録されているクライアントを登録解除する必要もあります。

保護されたゲーム セッションの終了時

保護されたゲーム セッションをローカル ユーザーが離脱するときは、EOS_AntiCheatClient_EndSession を使用して Anti-Cheat Client インターフェースに通知する必要があります。

保護されたマルチプレイヤー ゲーム セッションをゲーム サーバーが終了するときは、EOS_AntiCheatServer_EndSession を使用して Anti-Cheat Server インターフェースに通知する必要があります。

データ機能のイベントを定義する (クライアントサーバー モード)

ゲームプレイ データ機能はオプションであり、チート対策のためにゲーム状態に関する追加情報を提供できます。この機能は現時点で、アクション ゲームとシューティング ゲームに専用であり、他のゲームでは利用できません。

たとえば、Anti-Cheat サービスはサーバーからのデータを使用して、クライアントに頼ることなく、シューティング ゲームでチート行為を検出できます。

EOS_AntiCheatServer_LogGame… 関数および EOS_AntiCheatServer_LogPlayer... 関数を使用して、一連の共通のビルトイン イベントをログ記録できます。関連イベントが発生するたびに、これらの関数を呼び出します。SDK では、これらのイベントを効率的に処理し、生成されるネットワーク トラフィック量を抑えるロジックが提供されています。

ビルトイン イベントだけでなく、ゲームの起動時に、保護された最初のゲーム セッションの開始前に EOS_AntiCheatServer_RegisterEvent を呼び出すことで、任意のカスタム イベントを定義できます。EOS_AntiCheatServer_LogEvent を使用して、保護されたゲーム セッションの進行中にそれらのイベントをログ記録します。ビルトイン イベントには特定の最適化でメリットがあるので、できる限りビルトイン イベントを使用することをお勧めします。

チート検出に対処する

チート検出がゲームで生成されると、デベロッパー ポータルの [Sanctions (処罰)] ページで、それが保留中の 処罰 として表示されます。ゲームのこれらの処罰を見直し、デベロッパー自身の最善の判断に従ってどれをアクティブにするかを決定する必要があります。

詳しい検出内容がチート行為の開発側に開示されないようにするために、チート行為の検出に貢献した生のデータを利用することはできません。チート行為の検出が間違っていることが判明した場合、それに関連する処罰は適切なメッセージ付きで自動的に削除とマークされます。

トラブルシューティング

運用上の問題

新しい Anti-Cheat クライアント モジュールがアクティブ化されたのとほぼ同じ時期に問題が発生した場合は、前に使用していたクライアント モジュールに 戻します

チート対策違反のため保護されたゲーム セッションから突然削除されるプレイヤーの数が多すぎる場合、Anti-Cheat サービス コンフィギュレーション を「Enable Client protection while Server kicks is disabled」に変更し、プレイヤーのブロックを解除し、トラブルシューティングの時間をさらに確保します。

ログ

Anti-Cheat 関連のほとんどの問題では、まずログ データを確認することが最善の方法です。

Anti-Cheat インターフェースは、ログ ファイルを直接作成するのではなく、プログラムで Logging インターフェース を使用してログ出力を生成する、EOS SDK のコンポーネントです。ゲーム コードでは、トラブルシューティングで使いやすい場所にログ データを作成する必要があります。

開発中に問題のトラブルシューティングを行う場合は、Anti-Cheat のログ レベルを VeryVerbose に設定することをお勧めします。

Anti-Cheat サービスと Anti-Cheat Bootstrapper は、それぞれ独自のログ ファイルを自動的に作成します。

Service
  • Windows: %AppData%\EasyAntiCheat\service.log
Anti-Cheat Bootstrapper
  • Windows:
    • モジュール ダウンロード情報: \%AppData\%\EasyAntiCheat<Your ProductId><Your DeploymentId>\loader.log
    • Bootstrapper ログ: \%AppData\%\EasyAntiCheat\anticheatlauncher.log
  • Linux:
    • モジュール ダウンロード情報: .cache/com.epicgames.easyanticheat/Your ProductId>Your DeploymentId>/loader.log
    • ブートストラッパー ログ: .cache/com.epicgames.easyanticheat/anticheatlauncher.log
  • Mac:
    • モジュール ダウンロード情報: /Users/<Current_User>/Library/Caches/com.epicgames.easyanticheat/<Your ProductId><Your DeploymentId>/loader.log
    • ブートストラッパー ログ: /Users/<Current_User>/Library/Caches/com.epicgames.easyanticheat/anticheatlauncher.log
  • Steam Deck:
    • ブートストラッパー ログ: /home/deck/.local/share/Steam/steamapps/compatdata/<Steam AppID>/pfx/drive_c/users/steamuser/AppData/Roaming/EasyAntiCheat/<Your ProductId>/<Your DeploymentId>/anticheatlauncher.log

よくあるエラー

Anti-Cheat Kick Reasons (ClientActionReason)

AuthenticationFailed / Authentication Timed Out (1/2)

クライアント サーバー モードでは、このエラーは、ゲーム サーバーがゲーム クライアントからアンチチート認証メッセージを受信しなかったことを意味します。タイムアウト期間は、EOS_AntiCheatServer_RegisterClient が呼び出された瞬間に始まり、RegisterTimeout 秒後に終了します。このエラーの最もよくある原因を次に示します。

  • ゲーム サーバーとゲーム クライアント間で受け渡されるメッセージが正しく実装されていません。文書化されているとおりにメッセージが渡されていること、およびゲーム独自のネットワーク機能による処理中にメッセージが破損または切り捨てられていないことを確認します。
  • ゲーム クライアントがブロックロード フェーズにあり、通信できないときに、ゲーム サーバーが EOS_AntiCheatServer_RegisterClient を呼び出しました。サーバーが EOS_AntiCheatServer_RegisterClient を呼び出す前に、クライアントがブロッキング ロード フェーズを終了したことを確認してください。ただし、エクスプロイトを防ぐために、クライアントが意味のあるゲームプレイ アクションを実行できないようにしてください。
  • ゲーム クライアントが Anti-Cheat Bootstrapper なしで起動されたため、チート対策保護がありません。通常の起動フローに Anti-Cheat Bootstrapper が含まれていることを確認します。
HeartbeatTimeout

このエラーは、初回認証後、Anti-Cheat データフローが長時間停止したことを意味します。このエラーの最も一般的な原因を次に示します。

  • ゲームサーバーまたはローカル ピアでパフォーマンスの問題が発生しているために、Anti-Cheat メッセージの配信が非常に遅くなっているか、まったく配信されていません。独自のパフォーマンス メトリックをチェックして、ゲーム ロジックが正常に実行されていることを確認します。
  • クライアントまたはピアが切断されましたが、対応する UnregisterClient 関数が呼び出されませんでした。切断時に UnregisterClient 関数が常に呼び出されることを確認します。
NullClient

このエラーの意味は、Anti-Cheat Bootstrapper が Anti-Cheat モジュールをロードできず、フェールセーフの「null client」モードで起動されていることを意味します。詳細については、対象マシンの Anti-Cheat Bootstrapper ログ を参照してください。このエラーの最も一般的な原因を次に示します。

  • インターネット接続の問題またはファイアウォールが原因で、Anti-Cheat Bootstrapper がゲーム開始時に Anti-Cheat モジュールをダウンロードできませんでした。
  • プレイヤーが、クライアント モジュールをアクティブにしていないプラットフォームでゲームを起動しています。たとえば、Linux モジュールがアクティブになってない場合に Wine/Proton を使用していることが考えられます。
  • デベロッパー ポータルで Client Protection 設定が無効であれば、このサービスは推奨移行期間を待たずに再有効化されます。
ClientViolation

このエラーは、該当するゲーム クライアントで Anti-Cheat クライアント違反エラーが発生していることを意味します。詳細情報は ClientIntegrityViolated コールバックまたは EOS_AntiCheatClient_PollStatus 関数で提供されます。「保護されたゲームセッションの通知」を参照してください。

TemporaryCooldown

Client-Server モードでは、このエラーは、 プレーヤーが現在のゲーム サーバでのプレイを一時的にブロックされていることを意味します。このエラーの最も一般的な原因は以下のとおりです。

  • Anti-cheat メッセージが、ゲーム クライアントとゲーム サーバ間の通信で頻繁に失われたり、破棄されたりしている。
    • プレーヤーのインターネット接続が正常に機能していることを確認します。
    • 独自のパフォーマンス メトリックを使用して、ゲーム サーバが正常に動作していることを確認します。 *ゲーム コードが、Anti-cheat メッセージを選択的に破棄するようなネットワーク優先順位のロジックを適用していないことを確認します。
    • EOS_AntiCheatServer_RegisterClient が有効で正しい AccountId または UserId で呼び出されていることを確認します。 異なるユーザーに同じ値を使用すると、このエラーが発生する場合があります。
Game Security Violation (ゲーム セキュリティ違反)

このエラーは、重要な Anti-Cheat コンポーネントが終了している場合や、Windows カーネルのデフォルトのセキュリティ機能を回避するようにマシンが設定されている場合に、ゲーム クライアントに表示されることがあります。

このエラーのよくある原因の一つとして、チート行為に悪用されたことがあるよく知られているセキュリティの脆弱性があるドライバーがバンドルされていて実行される、ハードウェア制御 (RGB ライティングなど) のソフトウェア パッケージがあります。そのような場合は、プレイヤーが利用可能な最新バージョンのソフトウェア パッケージに更新することをお勧めします。修正済みのバージョンを入手できない場合は、ソフトウェア ベンダーに問い合わせてください。

Anti-Cheat でデバッガを使用する

チート対策保護がアクティブであると、デバッガは機能しません。

通常のゲーム開発タスクでは、Anti-Cheat Bootstrapper 実行可能ファイルを使用せずに直接ゲームの実行可能ファイルを開始することで、チート対策保護をアクティブにしないでゲームを実行することをお勧めします。

このようにしてゲームを開始すると、チート対策保護はアクティブにならないので、デバッガの動作を妨げません。Anti-Cheat が適切に統合されている場合、この状況では、保護されたマルチプレイヤー セッションに参加することはできません。

Anti-Cheat が完全に動作している状態ではデバッガは動作しませんが、デバッグのためにAnti-Cheat に null client を渡すことができます。これにより、デバッガを接続して、Anti-Cheat のハンドシェイクまでのフローの大部分をデバッグすることができます。これを行うには、Anti-Cheat Bootstrapper を使わずにゲームを起動し、追加のコマンドライン引数 -EOS_FORCE_ANTICHEATCLIENTNULL をゲームに渡します。

外部のクラッシュ ダンプ

Windows の別プロセスとして実行するクラッシュ ダンプ ツールを正しく動作させるには、ゲーム プロセスのメモリを読み取る必要があります。残念ながら、このアクセス レベルはチート行為のために簡単に乗っ取られたり悪用されたりする可能性があるため、通常の状況ではチート対策保護により実行できません。

チート対策保護と併せて実行するには、ダンプ出力をトリガーする異常状態が認識されるまで、外部のクラッシュ ダンプツールで Windows プロセスつまりゲーム プロセスへのスレッド ハンドルをメモリ アクセス権で開けないようにします。異常状態が認識されると、フル アクセス権でハンドルを開き、クラッシュ処理の目的でゲーム プロセス メモリに短時間アクセスします。この間、ゲームプロセススレッドは自動的に一時停止されます。少し経過してから、問題行為が行われないようにゲームプロセスが終了します。

チート対策保護は、これらの要件を満たすことがわかっているWindows WerFault および Unreal Engine Crash Report Client ダンプツールを自動的に認識します。使用するクラッシュ ダンプツールも要件を満たしている場合は、実行可能ファイルのファイル名を「CrashReport」で始まるものに設定すると、同じように動作できるようになります。

互換性のない一部のクラッシュダンプツールは、ゲーム プロセスが開始するたびに、ゲーム プロセスのハンドルをフル アクセスですぐに開くことに注意してください。これらのツールのいずれかを使用しようとすると、前述のロジックにより、ゲームがハングし、開始後すぐに終了します。