Anti-Cheat インターフェースがサポートするプラットフォームは Windows、Mac、Linux です。64 ビットのオペレーティング システムをインストールする必要があります。
Anti-Cheat インターフェースを使うには、次の手順を実行します。
開発の前提条件 を確認および遵守します。
ネットワーク アーキテクチャ と クライアント ポリシー を決定します。
(Windows のみ) Windows サービス インストーラー を設定します。
Anti-Cheat インターフェースを次のとおりゲーム コードに統合します。
Connect インターフェース を使用して、ユーザー ID を生成する
クライアント サーバー または ピアツーピア モード のコールバックを登録します。
保護されたセッションの通知 を設定します。
整合性チェック リスト で Anti-Cheat インターフェースが正しく動作していることを確認します。
クライアント モジュールの設定と更新
ゲームを開始するたびに、ゲームに設定された最新の Anti-Cheat クライアント モジュールを、アンチチート ブートストラッパーがフェッチします。更新にはバグ修正やチート行為の発生防止と検出に対する機能改善が含まれることがあります。
クライアント モジュールの設定と更新および復元
[Developer Portal ] にアクセスします。
[Your Product] > [Game Services] > [Anti-Cheat] の順にクリックします。
ドロップダウン メニューから適切な システム (Windows、Linux、macOS) を選択します。
(更新および復元の場合の場合) モジュールがゲームで期待どおりに動作することを テスト します。
アクティブにするクライアント モジュールの [More Options (その他のオプション)] ボタンから、[Activate Build (ビルドのアクティブ化)] を選択します。
Developer Portal の [Client Module Releases (クライアント モジュール リリース)] のリストに、新しい Anti-Cheat モジュールがリリースされているのかを定期的に確認します。
ライブ ゲームでクライアント モジュールを更新する必要がある場合、重要なのは、新規モジュールがゲームで期待どおりに動作することをテストしてから、アクティブ化することです。
モジュールをテストする
Developer Portal の [Client Module Releases (クライアント モジュール リリース)] のリストから、新規クライアント モジュールの [More Options (その他のオプション)] ボタンを選択します。
[Download Details (詳細のダウンロード)] を選択します。プレーン テキストのコンフィギュレーション ファイルがダウンロードされます。これによりテスト システムが、アクティブな Anti-Cheat モジュールの代わりに、指定したモジュールをダウンロードして使用できます。
ダウンロードされたコンフィギュレーション ファイルをゲームの実行可能ファイルがあるディレクトリに同じ名前で配置します。
たとえば、ゲームの実行可能ファイル名が「
MyGame-Win64-Shipping.exe
」である場合、コンフィギュレーション ファイルを同じディレクトリに「MyGame-Win64-Shipping.exe.eac
」という名前で配置する必要があります。
アンチチート ブートストラッパーを使用して、通常どおりゲームを開始します。
Anti-Cheat Bootstrapper の ログ ファイル を見つけます。
アンチチート ブートストラッパーのログ ファイルに想定どおりのタイムスタンプが表示され、コンフィギュレーション ファイルの URL が使用されたレコードがあることを確認します。
対象のゲーム向けに選択した、適切なテスト手順に従ってゲームを実行します。少なくとも、保護されたマルチプレイヤー ゲーム セッションに正常に接続でき、インゲームの購買オーバーレイなどの必須機能が使用できる必要があります。
テスト システムがライブ環境に適合するように、終了したら .eac コンフィギュレーション ファイルを削除します。.eac ファイルはゲーム配布の一部としてシッピングしないでください。
新規モジュールがゲームで期待どおりに動作することを確認したら、[Activate Build (ビルドのアクティブ化)] を選択します。
クライアント モジュールを復元する
最新のアップデートでゲームに問題が発生する疑いがある場合、前の Anti-Cheat モジュールに戻す必要があります。
更新 の場合と同様の手順ですが、最新バージョンではなく、前のバージョンを選択します。
古いものではなく、できるだけ新しいバージョンに戻すことをお勧めします。
ファイル整合性ツールのコンフィギュレーション
不正行為対策では、各プレイヤー マシンにあるゲームの必須ファイルとデベロッパーとしてリリースしたファイルの一致を検証できることが必要です。SDK の EOS_AntiCheatTools パッケージに含まれる anticheat_integritytool
を使用して、ファイルの整合性チェックを設定することができます。
Anti-Cheat Integrity Tool はコマンドライン ツールで、ビルド プロセスの最後に簡単に追加できるように設計されています。これにより、コンフィグ ファイルで定義したゲームの各ファイルに対するハッシュ値の署名付きリスト (カタログ) を生成します。ランタイム時に、アンチチート プロテクション サービスがこの署名付きカタログをロードし、コンテンツ ファイルがアクセスされたときに一致することを確認します。
ゲームをリリースする、またはアンチチートを有効にして動作する更新をリリースするたびに、ツールを実行する必要があります。ゲームのすべてのシッピング ビルドに対して、自動的に実行するように設定し、最終ディストリビューションがある正しいディレクトリに出力ファイルが含まれていることを確認します。
整合性ツールを設定する
Developer Portal で、[Your Product] > [Game Services] > [Anti-Cheat] > [Download Tooling (ツーリングのダウンロード)] に移動し、[Download (ダウンロード)] をクリックします。整合性チェックに必要なファイルを含む zip ファイルが自動的にダウンロードされます。
これらのファイルは、表示されている製品に固有のものです。複数の製品をリリースしている場合、必ず一致するパッケージを使用します。
プライベートキーを安全に保存してください。漏洩すると、プレイヤーが整合性保護をすり抜けることができます。
「
base_private.key
」ファイルおよび「base_public.cer
」ファイルをツーリング zip ファイルから抽出し、「anticheat_integritytool.cfg
」および「anticheat_integritytool.exe
」があるディレクトリに移動します。「
anticheat_integritytool.cfg
」の他の値を変更して、含めるファイルと除外するファイルを適切に指定します。整合性チェックの対象に、実行可能コード (.dll、.exe など) を含むゲーム ディストリビューションのすべてのファイルを含めます。そうしないと、チート機能を送り込むチャンスが生まれます。他のゲーム アセットを含めることはそれほど必要ではありません。それらを変更することが、ゲームプレイにおいて著しく不公平なメリットを生み出すことはできないからです。
場合により、ゲーム エンジンで、特定のアセット ファイル形式自体の検証をサポートすることがあります。
たとえば、Unreal Engine では .pak アーカイブ ファイルの効率的な署名と検証をサポートします。このようなサポートを利用できるときは、これを利用し、アンチチート ファイル整合性チェックの対象に含めないことをお勧めします。
コマンド プロンプトを開き、次のとおりツールを実行します。
anticheat_integritytool.exe -target_game_dir <game_root_directory> -productid <your eos_product_id>
成功すると、ツールにより、指定した
target_game_dir
の「EasyAntiCheat\Certificates
」サブディレクトリにファイルが出力されます。
起動コンフィギュレーション
ゲームを アンチチート ブートストラッパー ヘルパー実行ファイル で起動し、ゲーム プロセスが作成された直後に、アンチチート保護コンポーネントがロードされることを確認する必要があります。アンチチート ブートストラッパーへ渡すコマンドライン引数はすべてゲームの実行ファイルへ自動的に転送されます。
アンチチート ブートストラッパー 実行可能ファイルを設定する
使用する ProductId、SandboxId、DeploymentId を「
EasyAntiCheat/Settings.json
」ファイルに指定します。これらの値は、Developer Portal の [Product Settings (製品設定)] ページに表示されます。Settings.json
ファイルにゲームの最終実行可能ファイルのリストを入力して、EOS SDK API を呼び出し、アンチチートで保護します。たとえば、Unreal Engine は、ゲーム ルート ディレクトリに小さな「BootstrapPackagedGame」ヘルパー実行可能ファイルを出力するようによく設定されます。一方、実際のゲーム実行可能ファイルは「
Binaries\Win64
」などのサブディレクトリにあります。Settings.json
にリストされた実行可能ファイルは、「Binaries\Win64
」にあるものに一致する必要があります。これがアンチチートで保護する必要があるものだからです。
追加のコンフィギュレーション:
title: ランチャープロセスに必要なタイトル (キャプション) を指定します。指定しないと「Easy Anti-Cheat Launcher」が使用されます。
wait_for_game_process_exit: ゲームプロセスの終了コードにアクセスするには、これを「1」に設定して、ランチャー プロセスを開いたままにします。ゲーム プロセス ウィンドウが表示されると、ランチャー ウィンドウは非表示になります。
requested_splash: カスタム スプラッシュ画面の画像 (通常はゲーム独自のグラフィックスがある画像) へのパス。
形式: .png のみをサポートします。
サイズ:800x450 ピクセルでなければなりません。
Windows のアイコンのカスタマイズ
Windows のタスクバーに表示されるアイコンをカスタマイズするには、
EasyAntiCheat/BootstrapperIcon.ico
にカスタム アイコン ファイルを配置します。ディスクのファイルをブラウズする時に Windows エクスプローラーがブートストラッパー実行ファイル用に表示するアイコンは、ファイル自体にエンベッドされているので変更できません。ただし、Epic Games Store と Steam をはじめとするほとんどの PC ストアでは、選択したアイコンをゲーム ショートカットに使用するように構成することができます。
必須または省略可能なコンフィギュレーションで問題が発生した場合は、ブーストラッパーの ログ ファイル の参照が最善策です。
複数のブートストラッパー構成ファイルを使用する
たとえば、SandboxId または DeploymentId の値が異なる本番環境またはテスト環境で同じゲーム配布を使用できる場合、またはユーザーが選択した起動設定に応じて、複数の異なるゲーム実行可能ファイルを使用できる場合など、場合によっては、複数のブートストラッパー構成ファイルを配布し、起動時にそれらを切り替えると便利です。
ゲームの起動時に使用する構成ファイルを指定するには、-anticheat_settings = SecondarySettings.json
の形式のコマンドライン引数を渡します (SecondarySettings.json
は、使用する構成ファイルのファイル名に置き換かえます)。この引数はブートストラッパーによって使用されます。ゲームの実行ファイルに転送されません。
コールバックを登録する
Anti-Cheat Client と Anti-Cheat Server のインターフェースは、接続を維持し、プレイヤーに対するアンチチート プロテクションを強制するために、マルチプレイヤー ゲーム中にコールバック イベントを生成します。最初の保護されたマルチプレイヤー ゲーム セッションを開始する前に設定する必要があります。ただし使用するモードにより異なります。
クライアントサーバー モード
クライアントサーバー モードでは、Anti-Cheat Client と Anti-Cheat Server のインターフェースが必要になります。コールバックを登録するときに、EOS_AntiCheatClient…
および EOS_AntiCheatServer…
の名前の違いに注意する必要があります。
接続されたクライアントとゲーム サーバーにゲームのネットワーキング機能を使用して、チート対策メッセージを送る必要があるとき、トリガーされるコールバックを登録するには、EOS_AntiCheatServer_AddNotifyMessageToClient
および EOS_AntiCheatClient_AddNotifyMessageToServer
を使用します。
EOS_AntiCheatServer_AddNotifyMessageToClient
に関連付けられたコールバックがゲームサーバーでトリガーされた場合、ゲームのネットワーク機能を使用して、不透明なメッセージ データを適切なクライアントに送信する必要があります。次に、メッセージデータを受信したら、EOS_AntiCheatClient_ReceiveMessageFromServer
を呼び出します。
逆に、EOS_AntiCheatClient_AddNotifyMessageToServer
に関連付けられたコールバックがゲーム クライアントでトリガーされた場合、ゲームのネットワーク機能を使用して不透明なメッセージ データをゲームサーバーに送信し、受信時に EOS_AntiCheatServer_ReceiveMessageFromClient
を呼び出す必要があります。
EOS_AntiCheatServer_AddNotifyClientActionRequired
では、不正対策保護が期待どおりに動作しないため、ゲームから除外するなどのアクションを接続されたクライアントに適用する必要があるとき、トリガーされるコールバックを登録します。
これらのコールバックは、これらが指すコードが無効化された場合、対応する関数 EOS_AntiCheatClient_RemoveNotifyMessageToServer
、EOS_AntiCheatServer_RemoveNotifyMessageToClient
、および EOS_AntiCheatServer_RemoveNotifyClientActionRequired
で削除する必要があります。
次のコールバックはクライアントサーバーモードではオプションで、ゲームに追加情報を提供します。
問題行為を制限する (レベルが適切なコールバックとステータスを受け取る前にレベルにスポーンするのを防止するなど) ために、接続されたクライアントが新しい アンチチート認証状態に到達したときにトリガーするコールバックを登録する必要があります。EOS_AntiCheatServer_AddNotifyClientAuthStatusChanged
を使用して、新しい状態に対するコールバックを登録し、コールバックが指すコードが無効になった場合、対応する関数 EOS_AntiCheatServer_RemoveNotifyClientAuthStatusChanged
でこのコールバックを削除します。
ピアツーピア モード
EOS_AntiCheatClient_AddNotifyMessageToPeer
は、アンチチート メッセージをピアに送る必要があるときトリガーするコールバックを登録します。ゲーム独自のネットワーク機能を使用して不透明なメッセージデータを適切なピアに送信し、受信時に EOS_AntiCheatClient_ReceiveMessageFromPeer
を呼び出す必要があります。EOS_AntiCheatClient_AddNotifyPeerActionRequired
は、接続されたピアにアクションを適用する必要がある場合にトリガーされるコールバックを登録します。たとえば、アンチチート保護が機能していないためにゲームから削除するなどです。ピアを除外する必要があるという通知が来た時に、権限のないクライアントで対応する最も簡単な方法は、明確なエラー メッセージとともにゲームから接続を切断することです。
1 対 1 の対戦など小規模のゲーム セッションではこの解決法でうまくいきます。ただし、大規模な場合に、複雑なゲーム ロジックが必要になります。EOS_ANTICHEATCLIENT_PEER_SELF
は特別なハンドルで、ローカル ゲーム クライアントがオンライン プレイに参加できない (ピアにより拒絶される) ことを示すために、ローカル ゲーム クライアントで使用されることを表します。
ピアの認証ステータスが変わったときに、トリガーされるコールバックを登録するには、EOS_AntiCheatClient_AddNotifyPeerAuthStatusChanged
を使用します。新しいピアが登録され、通信が確立した後に、このコールバックをトリガーするのに最大 60 秒かかることがあります。たとえば、このコールバックは、チート対策認証が完全に終わるまで、ピアから一部のアクションだけ許可するように使用されることがあります。
保護されたゲーム セッションの通知
Anti-Cheat インターフェースがアクティブになるのは、保護されたマルチプレイヤー ゲームにプレイヤーが参加しているときだけです。次の API を使用して、保護されたマルチプレイヤー セッションにプレイヤーが参加またはそこから離脱したときに、インターフェースを通知する必要があります。
保護されたゲーム セッションを開始する
ローカル ユーザーが保護されたマルチプレイヤー ゲーム セッションに EOS_AntiCheatClient_BeginSession
を使用して入るとき、Anti-Cheat Client インターフェースが通知される必要があります。
クライアントサーバー モードを使用しているとき、保護されたマルチプレイヤー セッションが EOS_AntiCheatServer_BeginSession
で開始されているとき、Anti-Cheat Server インターフェースも通知される必要があります。
保護されたゲーム セッション中
コールバックは EOS_Platform_Tickregularly
の定期的な呼び出しにより決まります。詳細については、「Platform インターフェース)」を参照してください。
ゲーム クライアントは EOS_AntiCheatClient_PollStatus
を定期的に呼び出し、プレイヤーに Anti-Cheat クライアントの整合性エラーを表示およびログ出力する必要もあります。
これらのメッセージは提供された形式でプレイヤーに表示する必要があります。これにより、オンライン マルチプレイヤー セッションに参加できない理由をプレイヤーが理解しやすくなります。提供されるメッセージは常にローカライズされた形式で表示されます。
この機能は、これらの保護されたセッションで有利となるために利用できる情報をユーザーに公開しません。
専用サーバー (クライアントサーバー モード) では、EOS_AntiCheatServer_RegisterClient
を使用して、保護されたゲーム セッションに参加する各クライアントを登録する必要があります。保護されたゲーム セッションの開始時に、参加する各プレイヤーに対して、さらに保護されたゲーム セッション中にいつでも、ゲームの進行中に参加するプレイヤーに対して、この関数を呼び出します。
ゲーム サーバーでのこれらの呼び出しは、クライアントの EOS_AntiCheatClient_BeginSession
および EOS_AntiCheatClient_EndSession
への呼び出しに対応する必要があります。
たとえば、レベルの移行が開始したときに、クライアントの登録を解除し、移行が終了したときに、再登録するように選択することがあります。同様に各クライアントも保護されたゲーム セッションを終了し、再起動することを確認する必要があります。
保護されたゲーム セッションを離れる、EOS_AntiCheatServer_UnregisterClient
を使用して終了したときに、登録クライアントも登録解除する必要があります。
保護されたゲーム セッションを終了する
ローカル ユーザーが保護されたゲーム セッションを離れるとき、Anti-Cheat Client インターフェースは EOS_AntiCheatClient_EndSession
を使用して通知する必要があります。
ゲーム サーバーが保護されたマルチプレイヤー ゲーム セッションを終了したとき、Anti-Cheat Server インターフェースは EOS_AntiCheatServer_EndSession
を使用して通知する必要があります。
データ機能のイベントを定義する (クライアントサーバー モード)
ゲームプレイ データ機能はオプションで、不正行為防止の目的でゲーム状態に関する追加情報を提供できます。これらは現時点で、アクション/シューティング ゲーム専用で、他のゲームでは利用できません。
たとえば、アンチチート サービスはサーバーからのデータを使用して、シューティング ゲームで不正行為に使える機能を検出できます。クライアントに関係なく利用できます。
共通のビルトイン イベント セットでは、EOS_AntiCheatServer_LogGame…
関数および EOS_AntiCheatServer_LogPlayer...
関数を使用して、ログを出力できます。関連イベントが発生するたびに、これらの関数を呼び出す必要があります。SDK には、これらのイベントを効率的に処理し、生成されるネットワーク トラフィック量を抑えるロジックが含まれます。
ビルトイン イベントの他に、EOS_AntiCheatServer_LogEvent
を、最初の保護されたゲーム セッションの先頭より前に、ゲームのスタートアップで EOS_AntiCheatServer_RegisterEvent
を呼び出すことにより、任意のカスタム イベントを定義できます。可能な場合はビルトイン イベントを使用することをお勧めします。特別に最適化されたメリットがあるためです。
アンチチート検知に対応する
不正行為発生の検出がゲームで生成された場合、Developer Portal の [Sanctions (処罰)] ページに保留中の 処罰 として対象が表示されます。開発者自身の判断で、ゲームのこれらの処罰を見直して、どれをアクティブにするのかを決定する必要があります。
不正行為をするデベロッパーに詳しい検出内容を公開しないために、不正行為の検出に貢献した生のデータは利用できません。不正行為の検出が正しくないことが判明した場合は、関連する処罰は、自動的に削除とマークされ、適切なメッセージが表示されます。
トラブルシューティング
ログ
アンチチート関連の問題を確認するには、ログ データが最適な場所です。
Anti-Cheat インターフェースは、EOS SDK のコンポーネントで、Logging インターフェース を使用して、直接ログ ファイルを作成するのではなく、プログラムでログ出力を生成します。ゲーム コードで、このログ データを、トラブルシューティングに使用できるように、便利な場所に出力する必要があります。
開発中に、問題をトラブルシュートするには、不正行為対策用のログ レベルを VeryVerbose
に設定することをお勧めします。
Service と Anti-CheatBootstrapper は、独自のログファイルを自動的に作成します。
Service
Windows:
%AppData%\EasyAntiCheat\service.log
アンチチート ブートストラッパー
Windows:
モジュール ダウンロード情報:
%AppData%\EasyAntiCheat<Your ProductId><Your DeploymentId>\loader.log
ブートストラッパー ログ:
%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
ランチャーの固有ログ:
%AppData%\EasyAntiCheat\anticheatlauncher.log
一般的なエラー
AuthenticationFailed / Authentication Timed Out (1/2)
クライアント サーバー モードでは、このエラーは、ゲーム サーバーがゲーム クライアントからアンチチート認証メッセージを受信しなかったことを意味します。タイムアウト期間は、EOS_AntiCheatServer_RegisterClient
が呼び出された瞬間に始まり、RegisterTimeout
秒後に終了します。以下は、このエラーの最も一般的な原因です。
ゲーム サーバーとゲーム クライアント間で受け渡されるメッセージが正しく実装されていません。メッセージが文書化されたとおりに渡されていること、およびゲーム独自のネットワーク機能による処理中にメッセージが破損または切り捨てられていないことを確認します。
ゲーム クライアントがブロックロード フェーズにあり、通信できないときに、ゲーム サーバーが
EOS_AntiCheatServer_RegisterClient
を呼び出しました。サーバーがEOS_AntiCheatServer_RegisterClient
を呼び出す前に、クライアントがブロッキング ロード フェーズを終了したことを確認してください。ただし、エクスプロイトを防ぐために、クライアントが意味のあるゲームプレイ アクションを実行できないようにしてください。ゲーム クライアントがアンチチート ブート ストラッパーなしで起動されたため、アンチチート保護がありません。通常の起動フローにアンチチート ブート ストラッパーが含まれていることを確認します。
HeartbeatTimeout
このエラーは、初回認証後、アンチチート データフローが長期間停止したことを意味します。以下は、このエラーの最も一般的な原因です。
ゲームサーバーまたはローカル ピアでパフォーマンスの問題が発生しており、アンチチート メッセージの配信が非常に遅いか、まったく配信されていません。独自のパフォーマンス メトリックをチェックして、ゲーム ロジックが正常に実行されていることを確認します。
クライアントまたはピアが切断されましたが、対応する UnregisterClient 関数が呼び出されませんでした。切断時に UnregisterClient 関数が常に呼び出されることを確認します。
デバッガとアンチチートを使用する
アンチチート プロテクションがアクティブである間、デバッガは機能しません。
通常のゲーム開発タスクでは、アンチチート ブートストラッパー実行可能ファイルを使用しないで、直接ゲームの実行可能ファイルを開始することで、チート対策保護をアクティブにしないで、ゲームを実行することをお勧めします。
このようにゲームを開始すると、アンチチート プロテクションはアクティブにならず、デバッガの動作を妨げません。アンチチートが適切に統合されている場合、この状況で、保護されたマルチプレイヤー セッションに参加することはできません。
外部のクラッシュ ダンプ
Windows で別処理として実行するクラッシュ ダンプ ツールを正しく動作させるには、ゲーム プロセスのメモリを読み取る必要があります。残念ながら、このアクセス レベルは不正行為のために簡単に乗っ取られたり悪用されたりする可能性があるため、通常の状況ではアンチチート プロテクションによって防止されます。
アンチチート プロテクションと互換性をもたせるには、外部のクラッシュ ダンパーは、ダンプをトリガーする異常な状態が認識されるまで Windows プロセスまたはゲーム プロセスへのスレッド ハンドルをメモリ アクセス権で開こうとしてはいけません。異常状態が認識されると、フル アクセス ハンドルを開き、クラッシュ処理の目的でゲーム プロセス メモリに短時間アクセスできます。この間、ゲームプロセススレッドは自動的に一時停止されます。少し遅れて、乱用を防ぐためにゲームプロセスが終了します。
アンチチート プロテクションは、これらの要件を満たすことがわかっているWindows WerFault および Unreal Engine Crash Report Client ダンパーを自動的に認識します。クラッシュ ダンパーも要件を満たしている場合は、実行可能ファイルのファイル名を「CrashReport」で始まるものに設定すると、同じように動作できるようになります。
互換性のない一部のクラッシュダンパー ツールは、ゲーム プロセスが開始するたびに、ゲーム プロセスへのフル アクセス ハンドルをすぐに開くことに注意してください。これらのツールのいずれかを使用しようとすると、前述のロジックにより、ゲームがハングし、開始後すぐに終了します。