マルチプレイヤーネットワークゲームでは、ユーザーがハッキングされたクライアントアプリではなく、公式のクライアントアプリケーションに接続していることを確認するためのテクニックは何ですか?
これを行う確実な方法はおそらくないと思いますが、むしろ問題を軽減するために使用できる手法に興味があります。
Webベースのゲームに使用できる技術に特に興味がありますが、ほとんどの技術は一般的に適用できると思います。
ありがとうございました!
マルチプレイヤーネットワークゲームでは、ユーザーがハッキングされたクライアントアプリではなく、公式のクライアントアプリケーションに接続していることを確認するためのテクニックは何ですか?
これを行う確実な方法はおそらくないと思いますが、むしろ問題を軽減するために使用できる手法に興味があります。
Webベースのゲームに使用できる技術に特に興味がありますが、ほとんどの技術は一般的に適用できると思います。
ありがとうございました!
回答:
これは興味深い問題ですが、ここで間違った質問をしていると思います。ハッキングされたクライアントアプローチの検出から始めましょう。
クライアントがユーザー側で実行される場合、彼はあなたのコードでやりたいことを何でもすることができます(それは彼にとっては複雑すぎますが、ラインにもっと賢い人が常にいるでしょう)。クライアントとサーバー間のメッセージのハードコーディング暗号化、クライアント証明書の作成、またはクライアントにチェックサムの計算を行わせるなど、できることはすべて、十分な時間が与えられ、逆コンパイルおよびクラックされます。私はドングルが付属しているソフトウェアを見ましたが、このドングルはアプリケーションのコードの一部でしたが、実行できるようにするために、ドングルが最初にアプリのCRCをチェックしました。また、ソフトウェアの更新を行う場合は、ドングルを再送信する必要があります。
それに加えて、ユーザーは、たとえばマウスの動きやクリックをシミュレートすることにより、ご自身のクライアントをごまかすことができます。
だから質問は-ボットプレーヤーを検出する方法ですか?
ここにはいくつかのオプションがあります-クリック間の時間の測定、マウスの動きの速度の測定-マウスはポイントAからポイントBに何度も正確に移動し、まったく同じ座標にヒットしますか?ユーザーの移動は繰り返し可能ですか?ユーザーが収集していたリソースが使い果たされた場合、ユーザーは他の行動に移るか、それとも何時間も待機しますか?結局のところ、パターン認識コードを書くことになります。
マルチプレイヤーネットワークゲームでは、ユーザーがハッキングされたクライアントアプリではなく、公式のクライアントアプリケーションに接続していることを確認するためのテクニックは何ですか?
私はこれがこれにアプローチする正しい方法だとは思いませんし、少なくともあなたが心配するべきことではありません。
クライアント固有の情報のみをすべてのクライアントに送信するようにしてください(たとえば、クライアントはモンスターが何をドロップできるかを知る必要はなく、殺した後に情報を送信するだけで、指定したクライアントにのみ送信します)
サーバー側でほとんどの計算を行います(位置決めなど)。クライアントは独自の計算を行っていますが、アクションだけでは自分の値を送信できません。サーバーは、このアクションが有効であるかどうか、およびゲームにどのように影響するかを確認する必要があります。
1と2は通常、予測と組み合わされます。クライアントとサーバーは、特定の動作を予測しようとします。たとえば、クライアントはプレーヤーを移動しますが、x秒またはmsごとに移動します。サーバーによる修正を受け取る
クライアントではなくアカウントに対してユーザーに課金します。これにより、ユーザーはクラックされたバージョンを手に入れる可能性がありますが、アカウントなしではプレイできません。
2を使用すると、マネーハック、ポジションハック、ウォールハックなどがないことを確認できますが、多くの企業にとってボットは常に問題でした。ブリザードのような大企業であっても、問題を抱えています。できることは、アカウントごとの再生可能時間を制限することです。これにより、誰かが1か月あたり540時間を超えてオンラインになれないようにします。XPをファーム化するために、モンスターの色の値+マウス入力を使用したボットを覚えています。別の方法は、他の実行中のアプリケーションとメモリアクセスをチェックする追加のプログラムを提供することですが、これはいくつかの新しい問題をもたらします。
編集:
初心者向けの非常によく書かれた記事:http : //gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/
「公式クライアント」が実行されていることを保証する真の確実な方法はありません。このようなメカニズムは、検証コードが何らかの「秘密」をサーバーに送り返すことに依存しますが、十分な時間があれば、リバースエンジニアリングを行うことができます。これは基本的に、ハッキング対策ソフトウェアがクライアントに問題がないことをサーバーに伝えたときに起こることです。
編集:上記について少し詳しく説明するために、クライアント側を検証するコードを検討してください。それには2つの非常に難しい仕事があります:元のコードが使用されていることを確認し(そして元のコードに動的に/実行時(!)に干渉するものは何も存在しません)、この方法でこの結果をサーバーに返しますこの通信を偽造できないこと。最初の部分はめちゃくちゃ難しいのですが、2番目の部分はまったく不可能です。
クライアントとサーバーの両方を定期的に更新できる場合は、クラッカーが追い付かないように、シークレットを定期的に切り替えることができます。ただし、可能性としては、シークレットのエンコード/実装方法を変更しない限り、非常に迅速に再度解読できます。だから基本的に、それはあなたとそれをクラックしたい人との間の軍拡競争です。
その部分を受け入れて、私たちにできることは他にありますか?無限の計算能力と帯域幅を備えた完璧な世界では、クライアントとサーバー間で状態を単純に継続的に転送し、サーバーでクライアントで起こっていることの完璧なシミュレーションを実行できます。このモデルを使用して、クライアントが行っていると主張しているアクションを検証できます。これは、人間またはボットのどちらがプレイしているかを検出しませんが、クライアントが壁を介して起こっているショット、または他の考えられないアクションを主張しているかどうかを検証できます。
サーバー上に十分なデータがあることは、不規則な動作を検出する最初のステップでもあります-おそらく人間にとっては速すぎることを目指します。明らかに、完全なシミュレーション状況は一般に実行可能ではありませんが、何らかの種類の縮小された推定モデルは、多くの状況。
ゲームのタイプを指定しないので、RPG / MMOゲームに強く傾倒します。しかし、これの多くはFPS、戦略、およびアクションゲームに適用でき、実際に適用されます。Blizzardのような大規模なマルチプレイヤーゲーム会社がゲームでこの問題に対処する方法は次のとおりです。
その後、彼らはゲームに登場します(可能であれば、Starcraft 2のような同じゲームではそうではありません)。または、少なくともそれが処理されるべき方法です。Blizzardはこれについてはかなり良いですが、歴史的に他のMMO企業はそうではありませんでした。
非自明なボットの確認は簡単ではありませんが、従うべきいくつかの基本的なルールがあります
問題は、ゲームの人気が高まり、ボットがゲーム内の退屈を減らすのに実り多いほど、人々がこれらのボットを使用して作成する可能性が高くなることです。また、マウスの移動速度を制限し、クリックにランダムな人為的変化を加え、ボットに人間の速度でミスをさせたり、メニューの一部を開いたり閉じたり、間違ったボタンを押してからウィンドウを閉じたり、キーボードを切り替えたり、人間が手の疲労を軽減するために行うマウスの働き。(あなたはそれを実現することすら知らない)
したがって、誰かまたはボットが非常に長い間繰り返し何かをしている最後のステップは、実際に人間のmodがプレイヤーに近づいて話しかけることです。彼らがそこにいて、人間の答えで応えるなら、彼らは人間です。通常、MODはプレイヤーにしばらく停止するか、どこかに従い、他のアクションを実行するように要求しますが、時間の経過とともにフープはより複雑になります。
タンゲット
もちろん、最終的に誰かが本物の人間と見分けがつかないボットを作成し、チューリングテストに合格します。そして、まさにそれを目指しているボットライターがたくさんいます。
私自身、プログラミングを始めてウルティマオンライン用の役に立たないボットを作成し、町に立ち、NPCを模倣するというアイデアに非常に魅力を感じていました。コマンドは非常にシンプルなので、簡単に作成でき、キーを押すだけでさまざまな方向に移動でき、チャットログの名前を確認し、AIのWebバージョンを介してALICEにメッセージをパイプします。私はどれを覚えていないし、おそらくもう存在しないでしょう。
/正接
ポイントは、どこに線を引くかを決める必要があるということです。システムがボットと特定した人と話すためにモデレーターの軍隊を買う余裕がない場合は、コミュニティに人をボットとしてマークさせてから、時間をかけて十分な時間を置いてからプレーヤーを約1時間キックする方が良いでしょう。禁止ではなく、ただ蹴ります。ほとんどのプレーヤーの本当の問題は、ボットが他の人間のプレーヤーが使用できるリソースを独占することです。Ragnarok Onlineの問題のようにMobが不足している場合、アイテムをすくい取る(またはしない)ときに敵の周りを歩き回り、クリアするボットは一般的であり、他の人のためにゲームを台無しにします。そのため、管理軍のコストをそのように回避できます。
最後に、ゲーム空間の現実としてボットと共に生活し、ボットの使用を奨励することもできます。これには、ボット、トレーナー、ヘルパープログラムの最終的かつ一般的な使用を中心にゲームを設計する必要があります。約10年前にこれを行ったMMOがあったと言いたいのですが、どのMMOだったかは思い出せません。MMOはひどく重く、プレイヤーの95%がいつでもキーボードから離れてコミュニティを破壊したため、ゲームの終わりを告げました。このルートに行く場合は注意してください。
特にブラウザのようなゲームでは、反復的なタスクを実行することでユーザーが勝つことができるゲーム機能を使用しないでください。反復的なタスクを引き起こすゲーム機能は、他のユーザーに時間がないため怒っているだけでなく、ゲームを簡単にボタブルにします(そして、あまり楽しくありません!)
与えられたゲーム機能がボタブルになる可能性がある場合、とにかくゲームにその機能があるのはなぜですか?? この機能は、ユーザーにボットを構築するように明確に呼びかけています。
このゲームは、プレイヤーに合理的な量のエンターテイメントを提供することによって、通常は重要な選択肢のセットによってプレイされることを意図しています。この能力は、人間をボットから切り離すという、自明ではない選択に直面することを決定します。最終的には、ボットを検索する代わりに、ボットを実装できるゲームを検索し、それを自分で実装して全員が使用できるようにします。そうすることで、退屈なタスクを実行することを避けることでゲームプレーヤーの時間を節約できます。また、ルートからボットと戦う間、ボットできるゲーム機能がない場合、ボットはどうすればよいでしょうか。
私の一番下の行は、ゲームがボタブルにならないために必要な複雑さの最小量にしきい値があるということです。最終的にユーザーエクスペリエンスを向上させる重要な選択肢を追加することにより、ゲームをそのしきい値より上に設定します。
とにかく、このパラダイムは現在ではもはや適用されないかもしれません...しかし、私はまだこれが良いゲームを作るものだと信じています。
既存の答えはすでに良いですが、私はあなたのチェックが(例:必ずクライアントが浮気されていないことを確認するために、ゲーム全体のサーバー側を実行している)高価であればあることを指摘したかった、そしてあなただけのそれを行うことを選択することができますのいくつかを時間。
たとえば、特定の地域または特定のプレーヤーによるアクション(ある時間後にランダムに変化する)のみをチェックしたり、アクションのキューを作成して、検証するアクションをランダムに選択したり(他のアクションを無視)することができます。誰が不正行為をする可能性が高いのか(基本的に最も成功している人を探す)の発見的方法を考え出し、サーバー上でのアクションを検証します。
サーバーがアクションを検証しているときとそうでないときにサーバーが渡さないことを確認します。アクションを実行する準備が整うまで、常に標準の応答を送信します(検証中とそうでない場合に応答を送信するのに時間がかかることで、それを放棄しないでください)。
これにより、余裕のあるサーバーの電源のみを使用して、不正行為に対する非常に優れた保護を得ることができます(明らかに、すべてのアクションの検証に近づくほど不正行為からの保護が向上します)。
最も簡単な方法は、本質的にクライアントをダム端末にすることです。すべてがサーバー上で行われ、クライアントはサーバーにコマンドを送信するだけです。このようにして、サーバーはすべてを完全に制御します。
ただし、サーバーはより多くの計算を実行する必要があるため、これはおそらく最適なケースではありません。また、ユーザーエクスペリエンスは不鮮明になります。したがって、実行するロジックをクライアントに任せるほど、ユーザーエクスペリエンスは向上しますが、セキュリティは低下します。だから、あなたが受け入れられる中間点を見つける必要があります。
また、クライアントに「知っておくべき」情報のみを送信します。たとえば、敵プレイヤーが壁の後ろにいる場合、その情報をクライアントに送信しないでください。そうしないと、ハッキングされたクライアントがこの情報を識別できます(wallhackを参照)。
編集:私は質問を誤解しました。「メッセージを送信してプレーヤーに10億ゴールドを生成できるハッキングされたソフトウェア」ではなく、「海賊版/ハッキングされたキーを防ぐ」と解釈しました。
最近のほとんどのゲームには、データベースのアカウントに関連付けられた値があります。これは、クライアントがサーバーに送信できるものはすべて変更できるためです。これはおそらく最も簡単で効果的な方法です。
高速インターネットとP2Pファイル転送の普及により、企業はクライアントにローカルに保存されているcdキーから、サーバー上のアカウントにリンクされているキーに切り替えました。誰でもクライアントをダウンロードできるため、「公式」または「非公式」のクライアントソフトウェアはありません。ただし、プレイできるアカウントがある場合にのみプレイできます。
また、ソフトウェアの物理的なコピーの作成にそれほど費用をかける必要がないため、これは会社にとってもメリットがあります。