マルチプレイヤーゲーム1vs1でのクライアントサイドの不正行為


8

私は単純なカードゲームを開発しています。そこでは、他の人間のプレイヤーに対してあなたを置くマッチメイキングシステムがあります。これは、使用可能な唯一のゲームモードであり、他の人間に対する1vs1であり、AIはありません。

不正行為をできるだけ防ぎたいです。私はここで同様の質問をたくさん読んだことがあり、クライアントを信頼できないこと、そしてすべての検証をサーバー側で行わなければならないことをすでに知っています。私はサーバー(とにかくマッチメイキングに必要)を用意し、サーバー側で検証を行うつもりですが、サーバー側のすべてを確認したい場合、これにより、サーバーは現在のすべてのゲームの状態を追跡でき、すべてのアクションを確認してください。そのサーバーをサポートするための資金やインフラがありません。

私の考えは、クライアントに対戦相手が行ったアクションの一部をチェックおよび検証させ、違法なアクションを見つけた場合は、サーバーに不正行為を通知し、サーバーにそれを検証させることです。これでもサーバーは現在のすべてのゲームを追跡する必要がありますが、クライアント側ではチェックできないいくつかの項目(デッキのカードの順序など)のみをチェックし、実際には間違っている場合にのみ他の項目をチェックするだけで、リソースを節約できます。

*(不正行為を許可せずにチェックできる人のみ!たとえば、プレイしたカードが手元にあるかどうかを確認できないため、手元にあるすべてのカードを知る必要があります)

要約すると、私の質問は:これは実行可能なアプローチですか?これを行うリソースを実際に節約するのでしょうか、それともこのメッセージを交換するためのサーバーとクライアントの余分な複雑さは価値がないのでしょうか?同様のアプローチを成功または失敗させたゲームを知っていますか?

読んで答えてくれてありがとう


もちろん、それらのクライアント
サイドの

はい、アイデアは、すべてのアクションではなく、クライアントサイドのチェックのみをチェックすることで、いくつかの検証を保存しています。しかし、フィリップが言ったように、おそらく時期尚早の最適化
ガルシアナバロン

回答:


8

ゲームの複雑さに応じて、アクションが合法かどうかを確認するには、ゲームの大部分をバックトラックする必要がある場合があります。例:プレーヤーAは、リソースXがないため、プレーヤーBは現在そのカードをプレイできないと言っています。PlayerBは十分なResourceXを持っていると言います。誰が正しいのですか?見つけるには、最初から最後までもう一度ゲーム全体をシミュレートして、プレーヤーBが現在持っているResourceXをカウントします。したがって、「ファール」と叫んだときにプレーヤーのアクションを確認するだけでは、実際にはそれほど最適化されない可能性があります。

しかし、その努力は本当に価値があるのでしょうか?

ここでは時期尚早の最適化のケースがあると思います。私はあなたが今何をしているのか正確にはわかりませんが、カードゲームは通常、サーバー側の計算コストがそれほど高くありません。

カードゲームは通常、コンピューターのサポートなしでプレイできるように設計されているため、ゲームの仕組みは通常、人間が実行できるほど計算が簡単です*。また、人間のプレイヤーは通常、移動に数秒かかるため、サーバーにとっては永遠のようです。つまり、サーバーはゲームごとに数秒ごとに実行する軽量タスクしかありません。予想される同時プレーヤーの数はわかりませんが、非営利的な趣味のプロジェクトの規模にある限り、見つけることができる最も安価なサーバーでさえ、それを処理することはできないでしょう。もちろん、効率的にプログラミングする方法を知っていることが前提です。

*)プレイヤーの意思決定を除外する限り。ほとんどのゲームは、理想的な勝利戦略を理論的に計算できるという前提に基づいて構築されていますが、計算は非常に複雑で、プレーヤーやコンピューターでさえ計算できないため、直感を使用する必要があります。しかし、AIを必要とせず、プレーヤー対プレーヤーのみを必要とするので、これはこの質問の範囲外です。しかし、それはまた別の不正行為の側面についても考えさせます。プレイヤーが意思決定を支援するプログラムを使用することを検討しましたか?対戦相手が特定のカードを手に持っている正確な確率を彼らに告げるもののように?


私はあなたが正しいと思います、私は実際に過負荷になる前にサーバーに過負荷をかけないようにしています。あなたが同じ質問で私の質問に答えたという事実(それは本当に価値のある努力です)はかなりうまくまとめています
ガルシアナバロン

他のビジターの場合、実際にゲームコードとインターフェイスしない限り(そして場合によってはそれでも)、「確率」のヘルプを提供する外部プログラムを検出する機能は基本的にゼロであることに注意してください。
時計じかけのミューズ

4

「不正行為をできる限り防ぎたい」と語った。-それで私たち全員と言います。:)

おそらく、より賢明なアプローチは、合理的で一般に効果的な不正行為防止策を超える時間を無駄にしないことです。

それらは次のとおりです。プレーヤーが不正なアクションを実行できるようにするバグをダブルテストし、暗号化されたデータのみ(httpsまたはカスタム暗号化を介して)を送信し、ハッキングをより困難にするためにアプリ自体を暗号化します。それでおしまい。

プレイヤーは他の何よりもゲームのバグをだまします。

プレーヤーが実際に不正行為をするのに十分な気があるかどうかを待つために、開発面でより優れた方法をとるだけかもしれません。アプリが比喩的な「上位500チャート」になく、不正行為が完全に単純ではない(バグ)場合、プレーヤーは、IPストリームの変更やハッキングなど、他の手段で不正行為をしようとする時間を無駄にするほど気になりません。アプリ。

もちろんここでリアルマネーと実際の賞品を扱っているのでなければ。

アプリが成功し、不正行為が問題になる場合は、そのときに取り組む必要があります。しかし、現時点では猫とネズミのゲームになり、不正行為者は常に勝つでしょう。

基本的に私が言っていることは、再現可能なバグによって不可能であるか、アプリがあまり人気がない場合、プレーヤーの100%はチートしないということです。アプリが非常に人気になった場合、想像もできないような方法で不正行為をするプレイヤーは1%未満です。

チートに関する限り、明らかなチート(バグ、アプリとIPストリームの両方の暗号化)から身を守り、実際に知ったチートにのみ反応して、直接対処する必要があります。本当に必要なのは、すべてのプレーヤーのアクションをログに記録し、サーバーで確認してもらい、かなり頻繁に発生している違法なアクションを見つけた場合は、その理由を調べてください。バグ、エクスプロイト、テクニカルハックの可能性があります。

最も重要な不正防止対策は、プレーヤーが実際に不正行為を行うこと、およびその方法を学ぶことです。


ありがとう、とても良い答えです。悪用可能なバグを抱えながら最高の反熱ソリューションを作成するために時間を費やしても意味がありません。私はすべてのゲームが保護を必要とするコアな事柄の前に働き、その後現れる問題を修正します。
ガルシアナバロン2013年

0

ここで他の問題が発生していると思います。プレーヤーが(ネットワークトラフィックをシミュレートすることによって)通常のクライアントになりすましていて、間違った検証によってゲームを破壊するために使用している場合はどうなりますか?

継続的なバグ/エクスプロイトの修正と禁止につながる、防弾クライアントシステムを構築する代わりに、サーバーシステムを簡略化しようと思います。私はあなたのゲームメカニックについて十分に知りませんが、サーバー上の情報を最小限に抑えることができるかもしれません。

一般に、あなたが話しているクライアントは、コードをデプロイすることができ、ゲームメカニックがそれをデプロイするように感じられると想定する必要があります。そして、これはクライアント側の検証をほぼ不可能にします


0

それはあなたが不正行為と見なすものに少し依存します。ツールを使用して動きを作成/計算していますか?プレイ中にカードのデッキを変えるのですか?最初に取り組むのは難しいでしょう。2番目の方法では、各ユーザーにカードを挿入して、両側に表示されるハッシュコードを作成することを検討できます。最後に、サーバーはプレイされたカードと残っているカードでハッシュを計算できます。ハッシュが一致しない場合、ユーザーは不正を行っています。ルールが守られなかった場合は、サーバーでもこれを確認できます。これは、リソースを節約するユーザーリクエストで実行できます。カードに関する情報はありません。ハッシュの生成をもう少しユニーク/複雑にするために、ハッシュにユーザー名を含めることができます。

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