7

私たちの次のプロジェクトの 1 つは、最高のプレイヤーに賞品を贈りたい顧客向けの MS Windows ベースのゲーム (winform GUI と統合された DirectX ディスプレイ コントロールを備えた C# で記述) になる予定です。このプロジェクトは、チャンピオンシップ、はしご、トーナメント、プレイヤー対プレイヤーのアクションなどで、数年間実行することを意図しています。

ここでの主な懸念の 1 つは不正行為です。たとえば、カスタムメイドのボットにゲームをプレイさせることができれば、プレイヤーは劇的な利益を得ることができます (何時間もプレイするというよりも、戦略決定の観点から)。 .

私の質問は、ボットの活動を検出するために必要な技術的な可能性は何ですか? もちろん、プレイ時間数を追跡したり、異常を検出するための戦略を分析したりすることはできますが、この質問に関する限り、次のような詳細を知りたいと思います。

  • 別のアプリケーションが定期的なスクリーンショットを作成するかどうかを検出する方法は?
  • 別のアプリケーションがプロセスメモリをスキャンしているかどうかを検出する方法は?
  • ユーザー入力 (マウスの動き、キーボード入力) が人間によって生成され、自動化されていないかどうかを判断する良い方法は何ですか?
  • 別のアプリケーションがアプリケーションのコントロールに関する情報 (コントロールの位置など) を要求しているかどうかを検出することは可能ですか?
  • チーターが現在のゲームの状態に関する情報を収集し、それらをボットに送り、決定されたアクションをクライアントに送り返すことができる他の方法はありますか?

あなたのフィードバックは大歓迎です!

4

7 に答える 7

7

しばらく前に .net diablo 2 自動化エンジンである d2botnet を書きましたが、気を付けるべきことのリストに追加できるものは、不正な形式/無効/偽造パケットです。このゲームは TCP 経由で通信すると仮定します。通常、パケット スニッフィングと偽造は、ゲーム (オンラインに関係なく) が自動化される最初の方法です。ブリザードが不正なパケットを検出することはわかっているので、d2botnet での実行を避けようとしました。

そのため、無効なパケットを検出するようにしてください。それらを暗号化します。それらをハッシュします。それらが有効であることを確認するために何かをしてください。考えてみれば、送受信されるすべてのパケットが何を意味するのかを誰かが正確に知ることができれば、クライアント ソフトウェアを実行する必要さえないため、プロセス ベースの検出は論点になります。そのため、クライアントが応答方法を知っている必要があるパケットベースのチャレンジ応答を追加することもできます。

于 2008-09-27T09:29:50.460 に答える
5

「詐欺師」が仮想マシン (vmware など) でソフトウェアを実行し、そのウィンドウのスクリーンショットを作成した場合はどうなるでしょうか? あなたがそれに対して防御できるとは思えません。

明らかに「アナログ ギャップ」を防御することはできません。たとえば、詐欺師のシステムは高品質のカメラで外部スクリーンショットを作成します。これは理論的な問題に過ぎないと思います。

たぶん、チェスのサイトを調査する必要があります。チェスにはたくさんのお金があり、彼らはボットも好きではありません - おそらく彼らはすでに解決策を考え出しています.

于 2008-09-27T08:39:54.840 に答える
3

自動化に対する最善の防御策は、研磨を必要とするタスクを持たないことです。

そうは言っても、自動化を検出する最善の方法は、ユーザーを積極的に関与させ、定期的な CAPTCHA のようなテストを要求することです (画像がない場合などを除く)。ユーザーに頻繁に提示される数千の単純な 1 回限りの質問のデータベースを利用することをお勧めします。

ただし、あなたの質問に基づいて、C# で自動化防止機能を実装しないことが最善の策だと思います。特に、ハッカーがリング 0 にアクセスして標準的な方法で検出を回避するだけでよい場合は、適切に作成されたハック/ボットをマネージ コード内から検出する可能性はほとんどありません。すべての Windows API 関数をフックして「不適切な」呼び出しを監視するカーネル モード ドライバーと組み合わせた Warden のようなアプローチ (いつでも更新できるダウンロード可能なモジュール) をお勧めします。ただし、多くの誤検知に遭遇することになるため、自動化されたデータに基づいて禁止システムを構築する必要はありません。禁止する前に、常に人間の目で確認してください。

于 2008-09-27T09:17:44.170 に答える
2

アプリケーションでキーボードとマウスの入力をリッスンする一般的な方法は、SetWindowsHookEx を使用して Windows フックを設定することです。ベンダーは通常、インストール中にソフトウェアを保護しようとします。これにより、ハッカーが自動化したり、アプリケーションのシリアルをクラックしたり見つけたりすることがなくなります。「Key Loggers」という用語を Google で検索してください。この記事では、問題とそれを防ぐ方法について説明しています。

于 2008-09-27T09:40:16.160 に答える
1

PunkBuster やそのようなソフトウェアがどのように機能するかについて、私は深く理解していませんが、これが私が行く方法です:

ReadProcessMemoryWriteProcessMemoryなどのメモリ関連を処理する API 関数への呼び出しをインターセプトします。

プロセスが呼び出しに関与しているかどうかを検出し、ログに記録して、元の関数への呼び出しをトランポリンします。

これはスクリーンショットの撮影でも機能するはずですが、BitBlt 関数を傍受したい場合があります。

関数インターセプトに関する基本的なチュートリアルは次のとおりです: システム API 呼び出しのインターセプト

于 2008-09-27T09:23:29.820 に答える
0

技術的な詳細はわかりませんが、インターネット チェス クラブの BlitzIn プログラムには、プログラム切り替え検出機能が組み込まれているようです。これはもちろん、チェスエンジンをサイドで実行している人を検出するためのものであり、あなたのケースには直接適用できませんが、プロセス X が次の Y サイクルで Z% CPU 時間を超える場合、おそらく実行中のボット。

コンテスト ルールの一部としての「ゲームのプレイ中に他のものを実行してはならない」ということに加えて、これは有効かもしれません。

また、厳格な「理由を問わず、ボットを使用しているといつでも決定し、失格にする可能性がある」というルールも、上記のヒューリスティックなアプローチに役立ちます (貴重な ICC チェス トーナメントで使用されます)。

これらの問題はすべて、上記のルール 1 によって簡単に解決できます。

* how to detect if another application makes periodical screenshots?
* how to detect if another application scans our process memory?
* what are good ways to determine whether user input (mouse movement, keyboard input) is human-generated and not automated?
* is it possible to detect if another application requests informations about controls in our application (position of controls etc)?

クラッカーにとって問題をより困難にする良い方法は、サーバーにゲームの状態の信頼できる唯一のコピーを持ち、クライアントとの間で更新を送受信するだけで、通信プロトコル自体にクライアントの検証を埋め込むことができると思います。 (クラッキングされていないため、検出ルールがまだ有効です)。それと、発見された新しい奇妙な行動を積極的に監視することで、あなたがなりたい場所に近づくことができるかもしれません。

于 2008-09-27T08:59:54.697 に答える
0

Punkbuster、Valve Anti-Cheat、およびその他のアンチチートに関するいくつかの指針を調べる必要があります。

編集:私が言いたいのは、彼らがどのようにそれを行うかを調べることです。彼らがそのものをどのように検出するか。

于 2008-09-27T08:35:30.683 に答える