ネットワークゲームで非公式クライアントを防ぐためのテクニックはありますか?


22

マルチプレイヤーネットワークゲームでは、ユーザーがハッキングされたクライアントアプリではなく、公式のクライアントアプリケーションに接続していることを確認するためのテクニックは何ですか?

これを行う確実な方法はおそらくないと思いますが、むしろ問題を軽減するために使用できる手法に興味があります。

Webベースのゲームに使用できる技術に特に興味がありますが、ほとんどの技術は一般的に適用できると思います。

ありがとうございました!


一部の人々は、一般化されたクラウドゲームが間近に迫っていると考えています。この質問を完全に解決します。
ローランクーヴィドゥ

回答:


13

これは興味深い問題ですが、ここで間違った質問をしていると思います。ハッキングされたクライアントアプローチの検出から始めましょう。

クライアントがユーザー側で実行される場合、彼はあなたのコードでやりたいことを何でもすることができます(それは彼にとっては複雑すぎますが、ラインにもっと賢い人が常にいるでしょう)。クライアントとサーバー間のメッセージのハードコーディング暗号化、クライアント証明書の作成、またはクライアントにチェックサムの計算を行わせるなど、できることはすべて、十分な時間が与えられ、逆コンパイルおよびクラックされます。私はドングルが付属しているソフトウェアを見ましたが、このドングルはアプリケーションのコードの一部でしたが、実行できるようにするために、ドングルが最初にアプリのCRCをチェックしました。また、ソフトウェアの更新を行う場合は、ドングルを再送信する必要があります。

それに加えて、ユーザーは、たとえばマウスの動きやクリックをシミュレートすることにより、ご自身のクライアントをごまかすことができます。

だから質問は-ボットプレーヤーを検出する方法ですか?

ここにはいくつかのオプションがあります-クリック間の時間の測定、マウスの動きの速度の測定-マウスはポイントAからポイントBに何度も正確に移動し、まったく同じ座標にヒットしますか?ユーザーの移動は繰り返し可能ですか?ユーザーが収集していたリソースが使い果たされた場合、ユーザーは他の行動に移るか、それとも何時間も待機しますか?結局のところ、パターン認識コードを書くことになります。


4
ボットチェックテクニックは、ボットアクションの周囲にいくつかのノイズを追加することで、数分で破られます。
AsTeR

これに+1。予防が不可能であることを考えると(そして、誰かが実際にドライバーをハッキングすることさえできれば、その事実を強調するはずです)、代わりに間違いなく検出に焦点を合わせる必要があります。また、ゲームの周りに構築される合理的なコミュニティは、それ自体を取り締まる可能性が高いため、それを支援するツールを提供するためにいくつかの作業を行うこともできます。
マキシマスミニマス

2
プログラムによる防止だけでは不可能です。だから、WoWのようなゲームには、反復的なことをしている人をチェックアウトし、彼らが人間であることを証明する質問をする管理者がたくさんいます。
DampeS8N

1
@AsTeRこれらは正しい方向に進むためのアイデアのほんの一部でした。この問題にさらに深く取り組む数多くの記事とプレゼンテーションがあります。たとえば、次のようなものです:iis.sinica.edu.tw/~swc/pub/bot_trajectory.html-
カミル

5
「だから質問は-ボットプレーヤーを検出する方法ですか?」私は同意しません、ボットなしでチートする方法は複数あります。たとえば、クライアントに多くの情報を取得させたり、クライアントを信頼させたりします。
マツマン

9

マルチプレイヤーネットワークゲームでは、ユーザーがハッキングされたクライアントアプリではなく、公式のクライアントアプリケーションに接続していることを確認するためのテクニックは何ですか?

私はこれがこれにアプローチする正しい方法だとは思いませんし、少なくともあなたが心配するべきことではありません。

  1. クライアント固有の情報のみをすべてのクライアントに送信するようにしてください(たとえば、クライアントはモンスターが何をドロップできるかを知る必要はなく、殺した後に情報を送信するだけで、指定したクライアントにのみ送信します)

  2. サーバー側でほとんどの計算を行います(位置決めなど)。クライアントは独自の計算を行っていますが、アクションだけでは自分の値を送信できません。サーバーは、このアクションが有効であるかどうか、およびゲームにどのように影響するかを確認する必要があります。

  3. 1と2は通常、予測と組み合わされます。クライアントとサーバーは、特定の動作を予測しようとします。たとえば、クライアントはプレーヤーを移動しますが、x秒またはmsごとに移動します。サーバーによる修正を受け取る

  4. クライアントではなくアカウントに対してユーザーに課金します。これにより、ユーザーはクラックされたバージョンを手に入れる可能性がありますが、アカウントなしではプレイできません。

2を使用すると、マネーハック、ポジションハック、ウォールハックなどがないことを確認できますが、多くの企業にとってボットは常に問題でした。ブリザードのような大企業であっても、問題を抱えています。できることは、アカウントごとの再生可能時間を制限することです。これにより、誰かが1か月あたり540時間を超えてオンラインになれないようにします。XPをファーム化するために、モンスターの色の値+マウス入力を使用したボットを覚えています。別の方法は、他の実行中のアプリケーションとメモリアクセスをチェックする追加のプログラムを提供することですが、これはいくつかの新しい問題をもたらします。

編集:

初心者向けの非常によく書かれた記事:http : //gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/


ええ、私たちが気にするべきことはそれだけではないことに同意します。これらのことの大部分は既に行っていますが、クライアント側で公開されている要素の一部は避けられません。
UpTheCreek

@UpTheCreek一番関心のあることを教えてください。ボット、データの変更、保護が必要なクライアントまたはクライアントから送信される情報の種類。既にお気づきのように、クライアントを安全にクラックすることは簡単な作業ではありませんが、懸念事項の根本に立ち向かうことで少し改善できるかもしれません。

私たちにとっては、サーバー側のチェック/シミュレーションとサーバーコストのバランスを取る場合です。必要なものをすべて含めることはできません。私はこれについてかなり考えましたが、クライアントをよりよく保護するための巧妙なトリックがあるかどうかを見たかったです:)クライアントはjavascriptベースであるため、ユーザーがハッキングするのは通常よりも簡単だと想像できます!
UpTheCreek

4

「公式クライアント」が実行されていることを保証する真の確実な方法はありません。このようなメカニズムは、検証コードが何らかの「秘密」をサーバーに送り返すことに依存しますが、十分な時間があれば、リバースエンジニアリングを行うことができます。これは基本的に、ハッキング対策ソフトウェアがクライアントに問題がないことをサーバーに伝えたときに起こることです。

編集:上記について少し詳しく説明するために、クライアント側を検証するコードを検討してください。それには2つの非常に難しい仕事があります:元のコードが使用されていることを確認し(そして元のコードに動的に/実行時(!)に干渉するものは何も存在しません)、この方法でこの結果をサーバーに返しますこの通信を偽造できないこと。最初の部分はめちゃくちゃ難しいのですが、2番目の部分はまったく不可能です。

クライアントとサーバーの両方を定期的に更新できる場合は、クラッカーが追い付かないように、シークレットを定期的に切り替えることができます。ただし、可能性としては、シークレットのエンコード/実装方法を変更しない限り、非常に迅速に再度解読できます。だから基本的に、それはあなたとそれをクラックしたい人との間の軍拡競争です。

その部分を受け入れて、私たちにできることは他にありますか?無限の計算能力と帯域幅を備えた完璧な世界では、クライアントとサーバー間で状態を単純に継続的に転送し、サーバーでクライアントで起こっていることの完璧なシミュレーションを実行できます。このモデルを使用して、クライアントが行っていると主張しているアクションを検証できます。これは、人間またはボットのどちらがプレイしているかを検出しませんが、クライアントが壁を介して起こっているショット、または他の考えられないアクションを主張しているかどうかを検証できます。

サーバー上に十分なデータがあることは、不規則な動作を検出する最初のステップでもあります-おそらく人間にとっては速すぎることを目指します。明らかに、完全なシミュレーション状況は一般に実行可能ではありませんが、何らかの種類の縮小された推定モデルは、多くの状況。


+1。ここに来て、秘密を頻繁に変更するという考えに言及しました。つまり、ハッカーは仕事を繰り返す必要があります。複雑な秘密はそれをさらに良くします。サーバーの送信内容に基づいて変化するもの。
キロタン

4

ゲームのタイプを指定しないので、RPG / MMOゲームに強く傾倒します。しかし、これの多くはFPS、戦略、およびアクションゲームに適用でき、実際に適用されます。Blizzardのような大規模なマルチプレイヤーゲーム会社がゲームでこの問題に対処する方法は次のとおりです。

  1. すべての計算とゲームアクションをサーバー側で実行します。クライアントは単なるダム端末とグラフィックエンジンです。そのため、プレーヤーが別のクライアントを使用している場合、ゲームの用語では実際には問題ではなく、ゲームの物理をごまかすことはできません。
  2. クリックイベントやマウスの動きの完全な繰り返しなどの明らかなコンピューターアクションを探して、明らかなボットプログラム/クライアントをチェックします。
  3. 自明でないボットプログラム/クライアントをチェックし、ゲーム内のモデレーターに問題を警告します。

その後、彼らはゲームに登場します(可能であれば、Starcraft 2のような同じゲームではそうではありません)。または、少なくともそれが処理されるべき方法です。Blizzardはこれについてはかなり良いですが、歴史的に他のMMO企業はそうではありませんでした。

非自明なボットの確認は簡単ではありませんが、従うべきいくつかの基本的なルールがあります

  • わずかな違いで、同じアクションを何度も繰り返し実行しているプレーヤーを探します。これは、MMOのリソースノードに座って再スポーンするときにファーム化するか、FPSのヘルスパックと弾薬パックの間をサークルで実行し、特定のパスから逸脱せず、常に同じ銃を使用する場合があります。(FPSの準最適なボットはまれですが、一部の現代のFPSのようなプレイヤーの才能よりもゲームの数が重要である場合、ゲームに登るにはしごがある場合、ボットは再び貴重になります)
  • RTSで同じラッシュまたは戦略を繰り返し実行するプレイヤーを探しています。Starcraftには、ボットによって実行された場合にほぼ無敵の特定のビルド順序があります。
  • 膨大なリソースを収集し、1つのアイテムを限りなく磨き上げているプレイヤーを探しています。これはウルティマオンラインの大きな問題でした。

問題は、ゲームの人気が高まり、ボットがゲーム内の退屈を減らすのに実り多いほど、人々がこれらのボットを使用して作成する可能性が高くなることです。また、マウスの移動速度を制限し、クリックにランダムな人為的変化を加え、ボットに人間の速度でミスをさせたり、メニューの一部を開いたり閉じたり、間違ったボタンを押してからウィンドウを閉じたり、キーボードを切り替えたり、人間が手の疲労を軽減するために行うマウスの働き。(あなたはそれを実現することすら知らない)

したがって、誰かまたはボットが非常に長い間繰り返し何かをしている最後のステップは、実際に人間のmodがプレイヤーに近づいて話しかけることです。彼らがそこにいて、人間の答えで応えるなら、彼らは人間です。通常、MODはプレイヤーにしばらく停止するか、どこかに従い、他のアクションを実行するように要求しますが、時間の経過とともにフープはより複雑になります。

タンゲット

もちろん、最終的に誰かが本物の人間と見分けがつかないボットを作成し、チューリングテストに合格します。そして、まさにそれを目指しているボットライターがたくさんいます。

私自身、プログラミングを始めてウルティマオンライン用の役に立たないボットを作成し、町に立ち、NPCを模倣するというアイデアに非常に魅力を感じていました。コマンドは非常にシンプルなので、簡単に作成でき、キーを押すだけでさまざまな方向に移動でき、チャットログの名前を確認し、AIのWebバージョンを介してALICEにメッセージをパイプします。私はどれを覚えていないし、おそらくもう存在しないでしょう。

/正接

ポイントは、どこに線を引くかを決める必要があるということです。システムがボットと特定した人と話すためにモデレーターの軍隊を買う余裕がない場合は、コミュニティに人をボットとしてマークさせてから、時間をかけて十分な時間を置いてからプレーヤーを約1時間キックする方が良いでしょう。禁止ではなく、ただ蹴ります。ほとんどのプレーヤーの本当の問題は、ボットが他の人間のプレーヤーが使用できるリソースを独占することです。Ragnarok Onlineの問題のようにMobが不足している場合、アイテムをすくい取る(またはしない)ときに敵の周りを歩き回り、クリアするボットは一般的であり、他の人のためにゲームを台無しにします。そのため、管理軍のコストをそのように回避できます。

最後に、ゲーム空間の現実としてボットと共に生活し、ボットの使用を奨励することもできます。これには、ボット、トレーナー、ヘルパープログラムの最終的かつ一般的な使用を中心にゲームを設計する必要があります。約10年前にこれを行ったMMOがあったと言いたいのですが、どのMMOだったかは思い出せません。MMOはひどく重く、プレイヤーの95%がいつでもキーボードから離れてコミュニティを破壊したため、ゲームの終わりを告げました。このルートに行く場合は注意してください。


3
最後の段落で、SOEのStar Wars Galaxiesは、かなり堅牢なゲーム内スクリプト/マクロ言語を備えたMMOの例でしたが、ボットの問題はあまりありませんでした。最終的に起こったのは、より退屈なゲーム内の必需品のいくつかがスクリプト化されたことです(たとえば、ほとんどのスターポートには、完全に自動化されたヒーラーバフボットの前にプレイヤーの列がありました)。も。これはすべてゲームに大幅に追加されたIMOであり、それを殺したのは、警告やコミュニケーションがほとんどまたはまったくない、信じられないほど悪い決定とゲームの変更でした。
GAThrawn

3

特にブラウザのようなゲームでは、反復的なタスクを実行することでユーザーが勝つことができるゲーム機能を使用しないでください。反復的なタスクを引き起こすゲーム機能は、他のユーザーに時間がないため怒っているだけでなく、ゲームを簡単にボタブルにします(そして、あまり楽しくありません!)

与えられたゲーム機能がボタブルになる可能性がある場合、とにかくゲームにその機能があるのはなぜですか?? この機能は、ユーザーにボットを構築するように明確に呼びかけています。

このゲームは、プレイヤーに合理的な量のエンターテイメントを提供することによって、通常は重要な選択肢のセットによってプレイされることを意図しています。この能力は、人間をボットから切り離すという、自明ではない選択に直面することを決定します。最終的には、ボットを検索する代わりに、ボットを実装できるゲームを検索し、それを自分で実装して全員が使用できるようにします。そうすることで、退屈なタスクを実行することを避けることでゲームプレーヤーの時間を節約できます。また、ルートからボットと戦う間、ボットできるゲーム機能がない場合、ボットはどうすればよいでしょうか。

私の一番下の行は、ゲームがボタブルにならないために必要な複雑さの最小量にしきい値があるということです。最終的にユーザーエクスペリエンスを向上させる重要な選択肢を追加することにより、ゲームをそのしきい値より上に設定します。

とにかく、このパラダイムは現在ではもはや適用されないかもしれません...しかし、私はまだこれが良いゲームを作るものだと信じています。


1
+1不正行為に対する唯一の効果的な方法は、そもそも不正行為が効果的でない方法でゲームを設計することです。
ビースト

私の最後の文章は正しかった。なぜなら、誰もそれを可能性とは考えていなかったのに驚いたからだ…
ホルヘ・レイタオ

2

既存の答えはすでに良いですが、私はあなたのチェックが(例:必ずクライアントが浮気されていないことを確認するために、ゲーム全体のサーバー側を実行している)高価であればあることを指摘したかった、そしてあなただけのそれを行うことを選択することができますのいくつかを時間

たとえば、特定の地域または特定のプレーヤーによるアクション(ある時間後にランダムに変化する)のみをチェックしたり、アクションのキューを作成して、検証するアクションをランダムに選択したり(他のアクションを無視)することができます。誰が不正行為をする可能性が高いのか(基本的に最も成功している人を探す)の発見的方法を考え出し、サーバー上でのアクションを検証します。

サーバーがアクションを検証しているときとそうでないときにサーバーが渡さないことを確認します。アクションを実行する準備が整うまで、常に標準の応答を送信します(検証中とそうでない場合に応答を送信するのに時間がかかることで、それを放棄しないでください)。

これにより、余裕のあるサーバーの電源のみを使用して、不正行為に対する非常に優れた保護を得ることができます(明らかに、すべてのアクションの検証に近づくほど不正行為からの保護が向上します)。


1

まあ、私は「究極の解決策」があるとは思わない。データパッケージをエンコードし、パッケージを受信するサーバーにいくつかのルールを与えることができます。たとえば、最大の現実的/許可される動きは+1で、高速化のために5以上に設定する詐欺師/ハッカーとは異なります。ハッカーが他のプレイヤーよりも優れているために何ができるかを考え、ルールを設定してください。


0

最も簡単な方法は、本質的にクライアントをダム端末にすることです。すべてがサーバー上で行われ、クライアントはサーバーにコマンドを送信するだけです。このようにして、サーバーはすべてを完全に制御します。

ただし、サーバーはより多くの計算を実行する必要があるため、これはおそらく最適なケースではありません。また、ユーザーエクスペリエンスは不鮮明になります。したがって、実行するロジックをクライアントに任せるほど、ユーザーエクスペリエンスは向上しますが、セキュリティは低下します。だから、あなたが受け入れられる中間点を見つける必要があります。

また、クライアントに「知っておくべき」情報のみを送信します。たとえば、敵プレイヤーが壁の後ろにいる場合、その情報をクライアントに送信しないでください。そうしないと、ハッキングされたクライアントがこの情報を識別できます(wallhackを参照)。


-1

編集:私は質問を誤解しました。「メッセージを送信してプレーヤーに10億ゴールドを生成できるハッキングされたソフトウェア」ではなく、「海賊版/ハッキングされたキーを防ぐ」と解釈しました。

最近のほとんどのゲームには、データベースのアカウントに関連付けられた値があります。これは、クライアントがサーバーに送信できるものはすべて変更できるためです。これはおそらく最も簡単で効果的な方法です。

高速インターネットとP2Pファイル転送の普及により、企業はクライアントにローカルに保存されているcdキーから、サーバー上のアカウントにリンクされているキーに切り替えました。誰でもクライアントをダウンロードできるため、「公式」または「非公式」のクライアントソフトウェアはありません。ただし、プレイできるアカウントがある場合にのみプレイできます。

また、ソフトウェアの物理的なコピーの作成にそれほど費用をかける必要がないため、これは会社にとってもメリットがあります。


私はあなたを投票したのではありませんでしたが、私にはこれは本当に保護を提供していません。許可されたユーザーだけが接続できるようにすることについて話しているように聞こえますが、これは簡単に対処できます。しかし、問題は、メッセージングをリバースエンジニアリングし、自分のハッキングされたクライアントを作成する有効なアカウントを持っている人を止めるものがないことです。
UpTheCreek

-1これは質問に答えません。オンラインアカウントを持っているからといって、たとえばゲーム内のアクションを自動化するハッキングされたクライアントとの接続を妨げることはありません。すごい完全にオンラインベースであり、それはまだ常にハッキングされます。このブリザードを防ぐために、「問題のある」チート対策ソフトウェアを使用しています。これは、問題の問題に対処する例です
-dreta

おっしゃるとおりです。私は質問を誤解しました。
オーリンマクレガー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.