オンラインマルチプレイヤーゲームで不正行為を防止または軽減する方法は何ですか?[閉まっている]


19

パンクバスターは不正行為を防ぐためだけに存在しますが、パンクバスター対応ゲームでは不正行為が一般的です。Modern Warefare 2は、独自のサーバーを実行したり、MODを作成したりするエンドユーザーから真剣にロックされており、不正行為は常に発生しています。

各クライアントがPC上で実行されているマルチプレイヤーゲームの場合、不正行為を削減または排除するにはどうすればよいですか?



1
これは完全な答えではないため、1つとしてリストしませんが、従来のアンチチート方法に加えて、プレーヤーアカウントにある程度の価値を追加すると役立つと思います。たとえば、新しいプレーヤーがゲームの残りの部分にアクセスするのに十分な経験を得るまで「noob」サーバーに追いやられた場合、ハッカーが毎回禁止された後にアカウントのレベルを再設定することは大きな苦痛になります。おそらくそれを乗り越えることができるハッカーがまだいるでしょうが、アカウント/マッチメイキングサーバーを保護することは、クライアントを保護するよりもはるかに簡単です。
ルイスウェイクフォード

回答:


18

チートの作成方法、チートを作成する主な方法の1つ、アプリケーションにラッチして変更する他のプロセスに焦点を当てます-他のすべてのプロセスを列挙し、メモリ操作メソッドとキーボード/マウスエミュレーションをフックできますメソッド。

Wallhacksは通常、プロセスとDirectX / GLライブラリの間にコードを挿入して、マテリアルの透明度を設定し、それらが透けて見えるように作成します。シーングラフ/カリングシステムにコードを追加して、他のプレーヤー/有用なエンティティが壁の後ろにいる場合は、それらを明確に描画しないようにすることができます(そのように不正行為を防ぐため)。

マルチプレイヤーに参加していて、クライアント/サーバー間でパケットが変更されないようにしたい場合は、独自のアルゴリズムを介して送信しているデータのチェックサムを作成し、反対側でこれをチェックすることが効果的です。(おそらく、これをさまざまなQAの目的のために実行することになります)。

同じことは、ほとんどのメモリ内リソースにも当てはまり、フレームの先頭でチェックサムを作成し、さまざまな段階でそれを検証すると、かなり便利なメモリ操作検出が得られます。

これはかなり複雑なトピックですが、うまくいけばあいまいに受け入れられる方向にあなたを設定します。


または、壁の後ろにあるオブジェクト(まだハッキングされる可能性があります)を隠すよりも優れており、そのプレーヤーの位置に関する情報をクライアントにまったく提供しません(または、良好な3Dサウンド効果に必要な情報のみ)
Bart van Heukelom

17

最も極端なソリューションでは、基本的にクライアントを信頼しません。MMOなどのゲームの場合、ユーザーはサーバーを実行せず、ゲームプレイロジックはサーバー側で処理されます。クライアントに「私はX個の体力がある」または「X個の弾薬がある」などと言う権限を決して与えないでください。


4
専用サーバーを実行するためのリソースが実際にある場合、それは素晴らしいことですが、それを見るのは非常に単純な方法です。ほとんどの場合、クライアントで多くのロジックを実行し、サーバーでロジックの最小限のサブセットを実行し、基本的なルールを強制するために時々同期します。また、ウォールハックやメモリ操作などのクライアント側のチートをすべて防止して、クライアントを欺いて有用な情報などを明らかにするわけではありません
ロブアシュトン

10

ロジックが高価で、サーバーサイクルを節約するためにほとんどクライアントで実行する必要があるシステムがある場合、確率的チート検出システムを実装できます。数分ごとに、数人の異なるプレーヤーを選択して、サーバーを綿密に検査し、一貫性をチェックします。不正行為者がごまかしを短いまれな期間に制限することはめったにないため、最終的に捕まえられます。

これのもう1つの利点は、開発のための迅速なターンアラウンドサイクルがないことです-サーバーがあなたに注意を払うのに平均10時間のゲームプレイが必要な場合、それはあなたが見たいと思うたびに10時間のターンアラウンドサイクルです何かが機能した場合。そして、もしそれがうまくいっならば、彼らはサーバーが彼らにサムスアップを与えたのか、それとも彼らに近づいていないのかわからないので、それはさらに長いです。


+1パフォーマンスの観点から見ると、これらのような確率論的アプローチは、より広範な問題であるIMOに対する唯一の現実的な答えです。OnLiveとは別に、つまり、米国のみをターゲットにしている場合。
エンジニア

5

一人称シューティングゲーム向けの多くの種類のエイムアシストハックもあり、これらはグラフィックライブラリ呼び出しにフックすることでも機能します。Counter-Strike / HL1のOGCフックには、壁を透明にする以外にも多くのオプションがありました。

敵の位置情報が、広く利用可能なコードを持つ下位レベルのライブラリに渡される場合、それらの呼び出しをフックし、位置、スケール、回転などのデータを使用して、発射に最適なベクトルを正確に計算できます。その敵に。PunkBusterのようなアンチチートシステムには、メモリとプロセスの監視に加えて、ヒューリスティックタイプの検出(このプレーヤーが完全なショットを取得する頻度、180のデグレを回ってワンショットキルを獲得する頻度など)が含まれることがよくあります。

最終的に、マルチプレイヤーゲームで不正行為を防止するタスクは、猫とマウスのゲームです。新しいチートが開発されると、新しいアンチチート手法が作成され、新しいアンチチート技術を回避するために新しいチートが構築されます。

Tetradが彼の応答で述べたように、「ゲームのセキュリティ」の唯一の厳格なルールは、クライアントにできるだけ少ない情報を提供し、クライアントをできるだけ少なくすることです。ただし、ゲームの種類によって要件が異なるため、これらのルールを順守できるかどうかに影響を与える可能性があります。

FPSゲームでは、ゲームプレイの速度が非常に速いため、この正確な瞬間について知っておくべきデータのみをクライアントに提供することはできません。クライアントに角を曲がった敵がいると伝えず、プレイヤーが角を曲がった場合、突然その情報を数ミリ秒で送信するか、プレイヤーが敵に殺されないようにする必要があります今まで見た。

現在利用可能なこれらの問題の唯一の「修正」は、おそらくOnLiveでしょう。このサービスは、データセンターで安全に実行されているクライアントからのみオーディオおよびビデオコンテンツを配信するため、不正行為の唯一の手段は、着信ビデオストリームを分析し、それに基づいてアクションを実行できる人間のAIを本質的に作成することです-ある場合、詐欺師は最大です。


3

上記の答えはすべて素晴らしいですが、別の部分を追加します。

一部のゲームには非常に堅実なリプレイ機能があり、ゲーム終了後のすべてのゲームのリプレイをコンパクトな形式で保存し、さまざまなプレイヤーの視点、リアルタイムの統計UIなど、さまざまな方法でそれを見ることができます。

私がよく知っている例:Starcraft 2. Blizzardがハッカーをブロックする方法の1つは、ゲームのリプレイとして不正行為の証拠を受け取ることです。

FPSでの使用例は次のとおりです。ゲームをプレイし、他の人がウォールハックでだまされたのではないかと疑った場合、リプレイを見てから、通常のリプレイビジョンで見ることができなかったでしょう。あなたに会って、手g弾を隅に投げたり、何でも。

その後、彼にリプレイを報告し、彼に対する証拠が十分であれば、彼は禁止されます。私の知る限り、これを行う企業は、深刻な証拠、または禁止前に同じ行動の複数の証拠源のみを取得します。

したがって、これは反デバッグ手法ではなく、不正行為の便利な人間による証明を可能にするユーザーレポートシステムです。


0

これは完全な答えではないかもしれませんが、ここでいくつかの情報を提供しています。不正行為を防ぐ最良の方法の1つは、難読化またはC / C ++の使用です。これにより、人々はクライアントコードを変更できなくなります。


そこには多くの難読化解除機能があることに言及する価値があります。また、.Net(C#、XNA)ゲームはReflectionを使用して変更できます。私が知っていることから、C / C ++はコードの改ざんを困難にする1つの方法だと思います。
user1306322

うん。私のポイントは、難読化によって簡単に逆コンパイルされたコードが判読不能になるのを防ぎ、C / C ++をコンパイルするのは簡単ではないということです。どちらも良いオプションです。
LiquidFeline

また、頻繁にゲームにパッチを適用し、実行可能ファイルのバイナリオフセットを変更したり、ランダムなNOPを挿入したりすると、ハックが十分に長く生き残れなくなります
...-SirKnigget

@CPP_Person:実際、Cは非常に簡単にコンパイルできることで有名です。C ++の場合はまったく別の問題です。これは実際、コンパイラーの観点から見るとかなり複雑な言語です。ただし、特定のプログラミング言語をコンパイルするのは簡単です-良いコンパイラを書くのではなく、チートツールを書くのを防ぎたい-とにかく既存のC ++コンパイラを使用します-作るコンパイルを難しくするよりも、逆コンパイルを難しくすることのほうがはるかに興味深いようです。
カイゼルディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.