PokerPirateと呼ばれる新しいオープン ソース ポーカー ボットがあります。私は、Web アプリケーションがポーカー ボットを検出/妨害/打ち負かすことができる創造的な方法に興味があります。(これは純粋に学術的な議論であり、PokerPirate が書かれたのと同じ精神です。)
12 に答える
サーバーサイドの観点からボットを倒す
多くのオンライン ポーカー サイト では、疑わしいアクティビティによってトリガーされるポップアップキャプチャ入力を使用しています。
一部のポーカー サイトでは、プレイ時間とパターンを監視しています (つまり、最悪のシナリオは、プレイヤーが 24 時間 365 日、16 テーブルを連続してプレイする場合です。これが本物の人間である可能性はごくわずかです。(ただし、一部のプレイヤーは非常に大きなハンドをプレイする能力を持っています)。経験の浅い目にはボットのように見えるボリューム)
グリッチをスローします。プレーヤーがボットであると思われる場合は、すべてのトランプ カードの位置を画面上で数ピクセルずらして変更し、1/100 ハンド用に異なる色/デザイン/パターンにして、それらがスローされるかどうかを確認します。スクリーン グラブができない場合、すべての決定でタイムアウトになります。これは、ボットの決定的な証拠です。
タイミングは、コンピュータ プレーヤーが一度に数ミリ秒単位でオプションに応答し、大きな決定について考えるために一時停止しない場合、これは疑わしい可能性があることを示しています
セルフモニタリング。ポーカー ウェブサイト pokertableratings.comのデータは、多くの大規模サイトでマイニングされています。透明性を好む人もいれば、嫌う人もいます。ただし、疑わしいプレーヤーの統計(VPIP パーセンテージ、PFR パーセンテージは、記録可能な多数の定量化可能な統計の一部です) が不正行為の結論につながる場合があるという利点があります。
人工的にインテリジェントな 分類ネットワークは、定量化可能な統計を監視して、不正な不正行為やロボットのプレーヤーを分類できます。
オンライン ポーカーがかなり新しい存在だった頃、一部のポーカー クライアント ソフトウェアが疑わしいプレイヤーのデスクトップのスクリーンショットを作成して、プレイヤーを支援するプログラムが実行されているかどうかを確認するという噂がありました。ただし、(これが事実であったとしても) 2 台のコンピューターを実行して 2 つのタスクを個別に実行することで、これを回避できます。
複数のサイト間で再犯者間で情報を共有することは、 彼らが立派で有能な責任ある人々によって運営されていれば、業界にとって有益です.
一部のボットはおそらく非常に単純な設計ですが、そのプレイ スタイルを発見し、同じ状況でどのように行動するかを確認できれば (これは、非常に基本的な戦略をプレイする洗練されていないボットでのみ可能であることに注意してください)、合理的に迅速に発見できます。
プログラム機能の一貫性のない使用は、プレーヤーが本物であることに傾倒します。たとえば、ゲーム内の多くのポーカー サイトには「自分の番になったらフォールドする」ボタンがあります。悪いハンドが配られ、他のプレイヤーが何をすべきかを決めるのを待っている場合、多くのプレイヤーがこのボタンをチェックします。ボットはこれらのボタンを使用できます。違いは、ボットの使用頻度が極限にあり、おそらく常に使用するか、まったく使用しないかのどちらかであるということです。プレーヤーは通常「自動フォールド」を押すかもしれませんが、最も有利な状況であってもフォールドをクリックすることがあります。たとえば、本物のプレーヤーは通常、オート フォールドを押しますが、今回は押しません。他のプレーヤーが行動することなく、彼らに折り畳まれました。今、彼らは可能な限り最も有利な条件を提示されています. 折り畳みを押すと、最初から自動折り畳みを押す傾向が強かったでしょう。これは一貫性のない/最適化されていない/ランダムな動作であり、人間であることと一致しています。タイミングは、これらの機能がいつクリックされるかを示す他の指標です。これらはすべて指標であり、決定的な証拠ではないことを認識することが重要です。これらの行動指標はすべて簡単にシミュレートできます。
プレイヤーの視点からボットを倒す
PokerTrackerなどのソフトウェアを使用して、できるだけ多くのデータを記録して収集するようにしてください。
演奏スタイルのパターンを特定する試み
ポット/# プレーヤーに比例するベット サイズとハンドの強さの間の関係を見つけようとする
ハンドレンジを計算してみてください。ロー ステークス ボットは、重要な戦略上の懸念となるほど頻繁にブラフを行うことはないでしょう。そのため、非常に正確なハンド レンジを構築することはそれほど難しいことではありません。
データ分析と試行錯誤により、ゲーム内のリークを見つけようとするリーク/パターンが見つかったら、それらを繰り返し悪用し、他の状況を回避します。
人間が適応できる場合、ボットはおそらくそうではなく、人間が傾き、結果指向の思考と欲求不満の連鎖によって重み付けされている場合、ボットはそうではありません. これを有利に利用できます。
したがって、ロボットが意思決定中の実際のタイミング遅延をシミュレートし、合理的で現実的なプレイパターンを作成するのに十分なほど賢い場合、本質的にそれを止めるためにできることは何もありません. いくつかのランダムな条件と単純なバック チャット (ポーカー プレイヤーの用語集は通常かなり限られています) を投入すると、検出するのが非常に難しい AI プレイヤーになります。
検出を回避するためにボットが行う可能性があること
検出を回避するための鍵は、問題をできるだけ多くの角度から考えることにあります。あなたは、非常に小さく制限された世界で、知的な人間の行動をシミュレートしようとしています。実行できる行動シミュレーションのほとんどはかなり明白ですが、ボットが一貫性がなく予測不可能であるほど、ボットが発見される可能性は低くなります。
現実的なプレイスケジュールを作成します (つまり、週に 3 ~ 5 回、1 セッションあたり 4 時間、奇数週は 1 年間のあちこちで休みます)。
別のコンピューターでプログラムを実行して決定を下し、サイトの画面キャプチャが発生した場合に備えてゾンビコンピューターを制御します。
アクションのタイミングをランダム化します (すぐにアクションを実行せず、アクションごとに 0.5 ~ 2 秒待ちます)
大きな決断に時間をかける。決定が境界線にある場合は、決定を計算してから、思考をシミュレートするためにしばらく待ちます。
クライアント ソフトウェア機能のランダムな使用。すべてのテーブルで「ディール ミー アウト ボタン」をクリックしてトイレ休憩をシミュレートし、時々 5 分間休憩します。
シミュレートされたチャット、ポーカー チャットは非常に単純なワンライナーであることが多く、通常はディスカッションやディベートはありません。適切な検出可能な瞬間に、「不運」や「stfu」などの言葉を発します。または、コーダーに自分のボットを監視させ、実行中にチャットに参加させることもできます。
マウスの動きがリアルであることを確認してください。テーブルが 並べて表示されている場合は、左上のテーブルで決定を下さず、すぐに右下のテーブルで決定します。現在、ほとんどのサイト ソフトウェアはキーボード ショートカットを提供しています。
AI 分類器が予期しないことを実行します。たとえば、年に 1 回、単純で複雑でない質問 (「今日ログインできないのを手伝ってください!」または「インターネットがダウンしています!」) で電話をかけます。ポーカー会社は、それを現実的な指標として認識しているほど賢明です。
散発的な負けセッション。傾きをシミュレートすることができ、ボットのプレイが悪く、時々いくらかのお金を失う可能性があります。 誰もがどこかで傾きます。
また、ポーカーのウェブサイトは、ボットがネットワーク上で実行されているかどうかを特に気にしていません。各プレーヤーはレーキで多額の価値があり、理論的には純粋に冷笑的なビジネスの観点から、唯一の欠点は、それが発見された場合の悪い報道になることです。 .
露骨なエクスプロイトが発見された場合でも (Google でCereus ネットワークスキャンダルまたはAbsolute Poker スキャンダルを検索すると、非常に衝撃的です)、ビジネスは存続し、健全な状態を維持しているように見えますが、失われるのは十分な教育を受けた勝者 (少数) だけです。これにより、スキルの低いプレーヤーのネットワークへの割合が増加し、その結果、優れたプレーヤーが戻ってきます。これは古き良きキャッチ 22 です。適切な市場規制のための優れた議論です。
どのゲームにもナッシュ均衡が存在することに注意することが重要です。オンライン ポーカーには、現在の運用方法へのタイムラインがあります。ボットが最終的には数学的に引き継がれるため、将来的に誰もが信頼できるように (ウェブカメラ/voip)、よりソーシャルなもの (ウェブカメラ/voip) に移行する必要があります。優れており、心理的に免疫があります。ポーカーの AI コミュニティは非常に活発で、学界や資本的利益に支えられています。
リミット ポーカーなどの単純なバージョンのポーカーは、小さな検索スペースでほぼ解決されています。ゲームのより複雑なバージョン (ノー リミット バリエーション/ポット リミット オマハなど) が人工プレイヤーに打ち負かされるようになるのは時間の問題です。
結論
洗練されたボットは、業界がよりソーシャルなオンライン ゲーム環境に移行するまで検出できません。これで問題が解決するわけではありませんが、ボットが低レベルで勝つことは確実に難しくなります。PKR、3D、および他のサイトのよりインタラクティブな 1 時間あたりのハンド数が少ないバージョンのリリースにより、プレーヤーにとってマルチテーブルを達成するのが非常に難しい場合、わずかな変化が既に見られます。
この問題は業界の性質にも悩まされており、評判がビジネスモデルにますます統合されている、より大規模で評判の良い Web サイトに固執するもう 1 つの理由です。透明性の欠如と見せかけの透明性は、原因の助けにはなりません。
現在、ボット開発者にとっての本当の課題は、勝利を収めるアルゴリズムを作成することです。これは、見かけほど簡単ではありません。ポーカーをプレイする人は皆、自分のことを優れた、勝者である、またはブレーク イーブン プレイヤーであると考えていますが、これはまったく真実ではありません。だからこそ、人々はお金を失ったとしても、単に運が悪い、または自分のプレイ スタイルが誤解されているという錯覚に陥り、プレイを続けます。人間の心理におけるこの傲慢さと弱さは、プレイヤーに多額の損失をもたらし、ポーカーがまだ利益を上げられる根本的な理由です。
ポーカーは非常に複雑なゲームで、上手になるには何年もかかります (「10 分で習得、マスターするには一生」という古い格言は今でも真実です)。運の要素は、長期的には非常に限られています。
他の職業と同じように、上手になるには、何百時間も勉強し、何千時間も遊ぶ必要があります。経験の浅いプレイヤーが理解できないことを理解し、経験の浅いプレイヤーが気付かないことを見つけます。学習は非常に長い間続き、おそらく私たちが生きていられるよりも長く続きます. 複雑なゲームです。
テレビでハイ ステークスのキャッシュ ゲームを見て、誰かが「それは簡単なコールだ!」と叫ぶのを聞いたことがありますか? したがって、アマチュアはゲームの洗練度を本当に理解したり認識したりしていないことを証明しており、そのレベルでのゲームは依然として最終的に単純であると本当に信じています. そうではありません。ハイ ステークス プレーヤーは (多くの場合) テレビに出演しています 。良い。私たちのアマウアーがその存在を認識できない、複雑なメタゲームもプレイされている可能性があります。アマチュアはチェスの達人の前に立ち、騎士を動かすように叫ぶことはありませんが、ポーカーのダイナミクスは不完全な情報であるため、彼らの心理学は彼らが言っていることを本当に信じさせます. チェスのように、決定は複雑で繊細で、ゲーム全体にとって非常に重要です。ゲームが複雑になるにつれて、対戦相手はそれらを期待するため、些細な決定はもはやそれほど些細なことではなくなります。
ボットやゲームのレベルを上げると、必然的に、より多くの熟練したプレイヤーに出くわすことになります。次に、戦略の複雑さを次のレベルに引き上げる必要があります。これには、テーブル イメージ、レンジ バランシング、洗練されたインテリジェントなブラフ (弱みに対するブラフ、レンジに対するブラフ、イメージに対するブラフなどではありません)が考慮されます。より詳細なハンドレンジ分析を行います。あなたが上に移動すると、それは本当に別のゲームです。
勝者となるボットが作成されれば、間違いなくコーダーは十分なスキル、知識、常識を持っており、検出されない方法でボットを適用できます。これは彼らにとって些細なことです。
だから本当にあなたができることは何もありません。オンラインでプレイする場合は、リスクを理解してください。余裕のある以上のお金を危険にさらすことはありません。支出の正確な記録を維持するようにしてください。そうすれば、見当違いで非現実的で、最終的に自分の能力を過大評価することがなくなります。ストップ ロスを設定し、エッジがない場合、またはエッジがあるかどうかわからない場合は、テーブルを離れてください。もちろん、誰もが勝つことはできません。それがゲームの略奪的で搾取的な性質であり、そこから競争が生まれ、それがゲームを面白くしています。
考慮すべき3つの別々の領域があります。ボットは、テーブルの状態を把握し、決定を下し、その決定をホストに送り返す必要があります。
テーブルの状態を把握するのは、認識可能な形式でネットワークを介して送信されるか、標準のテキストとしてユーザーに表示されると、はるかに簡単になります。まず、画像認識を唯一のオプションにし、次にそれを可能な限り難しくします。カードを3Dで表示し、カードの向きと位置をゆっくりと変更します。カードの前で小さなちらつきや花火をアニメーション化して、特定のスクリーンショットが判読できないようにしますが、それを判断するのにも時間がかかります。
決定を下すこととは何の関係もありません。人間が判断したかどうかを判断しようとするのは、ほとんど情報がないチューリングテストのようなものです。
3Dを再度使用すると、決定を送り返すことが難しくなる可能性があります。パケットを直接送信したり、マウスでボタンをクリックする以外の方法で決定を送信したりするのを難しくします。アクションごとにボタンを少し動かすか、決定を待つ間、ボタンをプレイエリアの周りにゆっくりと浮かせます。ボタンを見つけたり操作したりできるアクセシビリティタイプの機能を無効にします。
PokerPirateは、これまでに作成されたほぼすべてのポーカーボットと同様に、Windowsポーカーアプリケーションで画面をスクレイピングしてマウスクリックをシミュレートすることで機能します。したがって、システムへのリンチピンは、ゲーム内のオブジェクトを認識し、ウィンドウ内でアクションを実行する機能です。ポーカーでは賢いかもしれませんが、これらの基本的な操作にはまだ問題がある可能性があります。
したがって、このボットを阻止する明らかな方法は次のとおりです。
- ゲームの前、または他の要因によってプレーヤーがボットである可能性があることが示唆された場合に、CAPTCHAを実装します。
- テーブルのグラフィックをより複雑にするか、ゲーム全体でテーマを変更します。
- 異常に速いおよび/またはロボットによるマウスの動きとクリックを検出します(人間が数学的に完璧な線でマウスを動かすことは決してありません)。
理想的には、唯一の有効な解決策は、ボットの最も理想的な行動応答を支持するより有利な論理条件の誘惑を提供することによって、関与しているボットを誘惑するハニーポット論理を作成することです。ボットがハニーポットに関与した後は、ボットにタイムアウトが設定されていないと想定して、ボットの条件を継続的にフィードする必要があります。次に、ボットを測定、記録、および調査できます。ボットに加えて、ボットがTORを介して接続していない場合は、ネットワークとセッションのデータを調査用に分離することもできます。
この状況では、ボットを人間と区別するのに適した決定論的考慮事項はそれほど厳しくありませんが、ボットの動作を特定する際の決定論的考慮事項はより厳しくなります。残念ながら、ボットの所有者は、その所有者がハニーポットの状態またはその論理的な考慮事項を認識している場合、そのような識別を防ぐためにボットに変更を加えることができます。
ポーカー ボットを倒すには 2 つの方法があります。ボットを特定してシステムから禁止するか、ポーカーで倒すことができます。ポーカーで彼らを打ち負かすことは、より興味深い学問的な問題です。:-)
ポーカー ボットに打ち勝つ方法については、こちらの記事を参照してください: http://www.cs.cmu.edu/~sganzfri/
ボットの問題は、まともな人間のプレーヤーよりも優れたプレイをするという事実ですか、それとも悪いプレーヤーが現れるのを 24 時間年中無休で待ってから搾り取ろうとすることですか?
また、誰かがポーカーをプレイしているときにコンピューターを隣に置いて、他のコンピューターにアドバイスを求めることは「正当」または「不正行為」でしょうか?
対戦相手について知られていることによってプレーヤーの最適な戦略が影響を受ける場合、リミット ポーカーのソリューション スペースが「解決済み」であるとどのように主張できるかはわかりません。プレーヤーを分析しようとする試みが、どうすれば改善できないほど完璧だと主張できるでしょうか?
スキャンを困難にするために画面をいじることに関する別の考え:
たくさんの異なる色からカードを作ります。人間の目には近いですが、同じではありません。これにより、読むべきものを選ぶのが難しくなります。反対に、人間の目が背景から分離できない色で、偽の書き込みをカードに入れます。
Ajax Control Toolkit NoBotをご覧ください。
NoBot は、いくつかの異なるアンチボット技術を採用しています。
* Forcing the client's browser to perform a configurable JavaScript calculation and verifying the result as part of the postback. (Ex: the calculation may be a simple numeric one, or may also involve the DOM for added assurance that a browser is involved)
* Enforcing a configurable delay between when a form is requested and when it can be posted back. (Ex: a human is unlikely to complete a form in less than two seconds)
* Enforcing a configurable limit to the number of acceptable requests per IP address per unit of time. (Ex: a human is unlikely to submit the same form more than five times in one minute)
多数の一致にアクセスできる場合は、データ マイニングのアプローチを取ることができます。AI のプレイの強さはかなり一貫しているはずですが、人間にはおそらく単純なパターンがあります。つまり、最初の数回のウォームアップ ラウンドで弱くなり、長時間プレイすると強さが低下します。また、より多くのお金がかかっている場合、人間の意思決定時間はおそらく長くなります。
マウスの動きにアクセスできる場合 (または、少なくとも Web アプリの場合でも場所をクリックする場合)、最も洗練されたものを除いて、ボットを認識するのはかなり簡単です。人間はマウスを正確な直線で動かすわけではなく、スピードアップとスローダウンの期間、統計的に説明可能なクリック位置の分布などがあります。
100% の解決策はありません。私が目指しているのは、AI を自分自身に対して使用することでお金を節約する解決策です。PokerPirate の AI のインスタンスをサーバー側で実行し、すべてのゲームで目に見えないプレーヤーとしてプレイします。同じアクションをあまりにも多く実行するプレイヤーがいる場合、そのプレイヤーはおそらく PokerPirate のインスタンスを実行しています。これは、攻撃者が陥る一種のハニーポットまたはトラップです。攻撃者は、ボットの成功率を下げることで、このハニーポットを防御できます。したがって、これは、攻撃者が常にいくらかのお金を盗むことができ、防御者が常にいくらかのお金を節約できるという「いたちごっこ」を生み出しています。
もっと簡単な方法があります。はい。多くの提案は正しく、必要です。しかし、詐欺の約 90% はあまりにも単純な方法で検出されています。
誰かが自分のためにボットを働かせた場合、しばらくすると、2 番目のボットが自分のために働いてくれることを望むでしょう。(別のマシンでもなんでも) しかし: 覚えにくいので、彼は同じパスワードを使用します 2 (<--- 皮肉)
残っているもの: 同じゲーム動作と同じパスワード ハッシュを持つアカウントを確認してください。