問題タブ [anti-cheat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
anti-cheat - (マルチプレイヤー) ゲームでチートを防ぐ方法は?
ゲームを作成している場合は、不正行為者について考え、不正行為を防止する方法を検討する必要があります。
私は、mmo マルチプレイヤー ゲームだけでなく、シングルプレイヤーまたは「自作」の p2p mp ゲームもそうだと思います。
ゲームが完全にサーバークライアントアーキテクチャに基づいている場合、仕事はほぼ完了していると思いますが、ウォールハックなどもあります.
私は自分の P2P ゲームを作ったのですが、しばらくすると詐欺師が現れました。彼らは、チート エンジンを使用し、スピードハックやメモリ ハックを試みたスクリプトキディだけでした。
ほとんどのスピードハック フックは gettickcount です。私は次の簡単な方法でスピードハッカーを選別しました。私は値を追跡しているだけtime()-GetTickCount()で、差が変わると不正行為があります。
メモリの破損は、ハッシュされたコピーをどこかに保持し、常に移動し、常にランダムな値で再ハッシュすることで整理できます。不一致はクラッシュを引き起こします。
チートエンジンを完全に整理するには、次を確認してください。
(友人が私にこれを教えてくれました、私はまだそれをテストしていません。)
これらのトリックは、ほとんどの詐欺師を選別しました。しかし、もちろん、より多くの不正行為のテクニックがあります。このウィキを開いて、別の不正行為のテクニックとそれらを回避する方法について話し合いました。
client-server - タイムスタンプで場所の違いを検証するときにレイテンシの違いを考慮する方法 (アンチチート)?
サーバーがクライアントから移動 (位置) 情報を受信するマルチプレイヤー ゲームがある場合、不正行為対策としてこの情報を確認する必要があります。
これは次のように行うことができます。
これは単純な例で、X 座標のみを考慮しています。ここでの問題は、サーバーが最後の位置情報の更新を受信するとすぐに oldTimestamp が保存されることです。これは、その時点でラグ スパイクがあった場合、古いタイムスタンプがサーバーによる新しい位置情報の更新よりもかなり遅れて受信されることを意味します。これは、時差が正確ではないことを意味します。
例:
- クライアントは言う:私は今5x10の位置にいます
- ラグ スパイク: サーバーはタイムスタンプ 500 でこのメッセージを受信します (通常は 30 前後で到着するはずです)。
- ....1秒の動き...
- クライアントは言う:私は今20x15の位置にいます
- ラグ スパイクなし: サーバーはタイムスタンプ 1530 でメッセージを受信します
サーバーは、これら 2 つの場所の時差が 10:30 であると認識します。ただし、実際の時差は 1,500 です。これにより、アンチチート検出が 1,030 では十分ではないと判断し、クライアントをキックする可能性があります。
可能な解決策: 送信中にクライアントにタイムスタンプを送信させて、サーバーが代わりにこれらのタイムスタンプを使用できるようにします。
問題:この解決策の問題点は、プレイヤーがクライアントを操作して不正なタイムスタンプを送信できることです。そのため、不正行為防止システムが機能しません。これは良い解決策ではありません。
単純に maxPlayerSpeed * 2 の速度を許可することもできますが (たとえば)、これにより、基本的に通常の 2 倍の速さでハックすることができます。これも良い解決策ではありません。
ですから、この「サーバーのタイムスタンプと遅延」の問題を修正して、不正行為対策を価値あるものにする方法について何か提案はありますか?
security - ブラウザベースの xmlhttp/js/perl/php ゲームのチート防止
ブラウザベースのゲームで、何らかのアクションを完了するとしましょう (簡単にするために、誰かがスコアを 100 上げるリンクをクリックするとします)。このリンクをクリックすると、たとえば、increase_score.pl?amount=100単純に送信する誰かからどのような防止策があるかなどの URL があります。このコマンドを実行するように Web サーバーに要求します。
- 実際にリンクをクリックするタスクを実行せずに何度も何度も
- 金額が 100000 のような何かに設定されているサーバーに偽のリクエストを送信します。
私はチェックすることHTTP_REFERERを知っていますが、人々がそれを回避できることを知っています(正確にはわかりません)。2番目のオプションをチェックするいくつかの境界以外は、ちょっと困惑しています。誰も似たような問題を経験したことがありますか? ソリューション?
macros - 自動クリッカーを使用してユーザーをブロックする
ユーザーがマクロを使用して画面上の特定の場所を特定の順序で自動的にクリックし、実際にゲームをプレイしなくてもさまざまなタスクを自動化することで、ユーザーがオンラインゲームをだましているという問題があります。サイト全体にCAPTCHAを塗りつぶして、正直なユーザーのエクスペリエンスを損なうことなく、この種のアクティビティをブロックするために使用できる方法はありますか?
編集:私は言及するのを忘れました、これはウェブサイトベースのゲームであり、フラッシュを使用していません。
javascript - HTML 5 Gaming は Canvas と Javascript を使用しますか? この場合、不正行為を防ぐにはどうすればよいですか?
HTML 5 Gaming は Canvas と Javascript を使用しますか? この場合、不正行為を防ぐにはどうすればよいですか?
たとえば、ユーザーが GreaseMonkey などのツールを使用してスクリプトを変更し、毎回完全なゲーム スコアをサーバーに報告するようにするとどうなるでしょうか?
mouse - マウスを制御できるアプリケーションは?
ユーザーがゲーム (デスクトップまたは Web) でごまかす方法の 1 つは、「ロボット」に画面を監視させ、マウスを動かさせることです。アプリケーションがマウスを制御しているかどうかを監視する方法はありますか (もちろん、透明性とユーザーの許可が必要です)。私は主に Windows アプリに興味がありますが、他の OS についても知っておくと便利な方法があれば教えてください。ありがとう!
artificial-intelligence - オンラインポーカーチートの検出
最近、大規模なポーカーサイトで、発見されたセキュリティの脆弱性を悪用してプレイしているときに、一部のプレーヤーがすべての対戦相手のカードを見ることができる可能性があることが明らかになりました。
ナイーブなチートは信じられないほど速い速度で勝ちます、そしてこれらのチートは通常非常に速く捕らえられます、そして速く捕まえられないならば、彼らは彼らの手の歴史を通して速いスキャンを通して簡単に見つけることができます。
より難しい問題は、詐欺師が知性を示し、呼び出される場所をブラフし、最悪の手でリバーベットをコールするときに発生します。基本的な前提は、他のプレーヤーのカードを見る能力を偽装するために意図的にポットを失うことです。そして彼らはかなり現実的なレートで勝ちます。
与えられた:
- 何百万もの検証済みの完全な情報ハンド履歴のデータセット
- 理論上の無制限のコンピュータパワー
- オマハやリミットポーカーに関する提案は有益かもしれませんが、ゲームノーリミットホールデムを想定してください。
これらの詐欺師を合理的に正確に分類するにはどうすればよいでしょうか。オリジナルの2+2スレッドはアイデアをアピールし、SOコミュニティにはいくつかの有用な提案があるのではないかと思いました。
これは現在のものであり、誰かが創造的な解決策を見つけた場合に世界を改善するのに実際に適用されるという点でも興味深い問題です。特定された詐欺師が発見されたときに本物のプレーヤーが資金を払い戻す可能性が高いからです。
networking - ゲームのネットワークの問題
ゲームに固有のネットワーク設計とトリックを探しています。私はいくつかの問題について知っており、それらのいくつかに対する部分的な解決策がありますが、まだ見えない問題がある可能性があります。これに対する明確な答えはないと思いますが、私は本当に好きな答えを受け入れます。私は4つのカテゴリーの問題を考えることができます。
悪いネットワーク
クライアントから送信されたメッセージは、サーバーに到達するまでに時間がかかります。サーバーはそれらをFCFSで処理することはできません。これは、レイテンシーが高いプレーヤーに対して不公平であるためです。これに対する部分的な解決策はメッセージのタイムスタンプですが、そのためには2つのことが必要です。
- クライアントの時計を信頼できるようになります。(これは不可能だと思います。)
- 測定できる一定のレイテンシ。可変レイテンシーについて何ができますか?
多くのゲームはUDPを使用しているため、メッセージが失われる可能性があります。その場合、彼らはすでに持っている情報に基づいてゲームの状態を推定しようとします。接続が再び機能した後、推定された状態が正しいかどうかをどのように知ることができますか?
MMOゲームでは、サーバーは大量のクライアントを処理します。負荷を分散するための最良の方法は何ですか?ゲーム内の場所に基づいていますか?クライアントのグループをサーバーにバインドしますか?サーバーを介してすべてを送信することを回避できますか?
去るプレーヤー
これが発生したとき、私は2つの異なる動作を見てきました。ほとんどのFPSゲームでは、ゲームをホストしたプレーヤー(私は彼がサーバーだと思います)が他のプレーヤーを離れると、プレイできなくなります。ほとんどのRTSゲームでは、いずれかのプレーヤーが離れた場合、他のプレーヤーは彼なしでプレイを続けることができます。専用サーバーなしでどうやってそれが可能ですか?誰もが完全な状態を知っていますか?彼らはどういうわけかサーバーの役割を移していますか?
情報へのアクセス
次の問題は専用サーバーで解決できますが、専用サーバーがなくても解決できるのではないかと思います。多くのゲームでは、プレーヤーはゲームの完全な状態を知る必要はありません。RTSの戦場の霧とFPSの壁は良い例です。ただし、アクションが有効かどうかを知る必要があります。(たとえば、そこから私を撃つことができますか、それともマップの反対側にいますか?)この場合、クライアントは不明な状態への変更を検証する必要があります。これは、暗号プリミティブを巧みに使用することで解決できるもののように聞こえます。何か案は?
不正行為
上記の問題のいくつかは、信頼できるクライアント環境では簡単ですが、それを想定することはできません。たとえば、80%の通常のユーザー-20%の詐欺師環境で機能するソリューションはありますか?あなたは本当に機能する(そしてカーネルモジュールのようなばかげたものを必要としない)アンチチートソフトウェアを作ることができますか?
私はこの質問といくつかの回答https://stackoverflow.com/questions/901592/best-game-network-programming-articles-and-booksを読みましたが、他の回答は利用できない/制限されたコンテンツにリンクしています。これはプラットフォーム/OSに依存しない質問ですが、特定のプラットフォーム/OS向けのソリューションも歓迎します。
c# - アンチウイルスプロセスの殺害防止?
アプリケーションが強制終了されないようにする方法を探していましたが、たとえばウイルス対策アプリケーションでどのように機能するかを説明する答えは実際には見つかりませんでした。
私が楽しみにしているのは、XNAで作成した単純なオンラインゲームでの不正行為を防ぐためのツール(Gameguard、xTrapに似ています)です。
ユーザーが私のゲームをだますのを防ぐ機能を実行する過程で、AVG、ノートン、その他のウイルス対策アプリケーションがOSと調和して機能し、管理者ユーザーがアプリケーションを閉じることができないが、正常にシャットダウンする方法を考えていました。
2つ目のアプリケーションを使用してアンチヒートアプリケーションを監視しなくても、キルイベントをキャッチして、それが発生したときに少なくともゲームを閉じることができますか?
また、自分のゲームをアンチヒートとその逆のウォッチャーとして使用することも検討していました。一方がオフになるたびに、もう一方もオフになりますが、上記についても理解したいと思います。
私が見たところ、人々はこれらの種類のことを簡単に迂回してそれらの呼び出しを迂回するので、アンチチーターのウォッチャーとして私のゲームを持っていることもそれほど効率的ではないでしょう...
ゲームとアンチヒートアプリケーションのセキュリティとして改善できる点に関連するいくつかの回答、アドバイス、コードがあれば幸いです。
また、ollyなどのデバッガーが接続できないようにする情報もあります。
actionscript-3 - 信頼できる Flash 難読化ツールにはどのようなものがありますか?
ハイスコアをサーバーに送信するゲームを Flash で作成しています。改ざんを防ぐためにサーバー側でいくつかの予防策を講じることを計画していますが、チェーンの弱点は Flash そのものです。不正行為ツールを使用して、プレーヤーはメモリ内の変数を監視および調整できます。
ほとんどの Flash/SWF 難読化ツールは、人々が SWF を (簡単に) 逆コンパイルできないようにすることを目的としていることを認識しています。それらは不正行為防止メカニズムとしてまったく役立ちますか?