問題タブ [anti-cheat]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - オンライン ゲームでのコンピュータの追跡
そのため、ゲーム内のリソースを増やしてアカウントを改善するために複数のアカウントを作成している人々に問題が発生しています。
したがって、私のジレンマは、多くのユーザーがプロキシまたは NATd 情報を使用するため、IP ごとにユーザーが 1 人しかいない場合、一部の正当なユーザーが禁止されることです。
コンピューターに固有の一意の識別子を取得する方法 (Javascript と PHP を使用) はありますか (ハードウェアを変更しないと、コンピューターのハードウェアを変更すると、おそらく識別子が変更されます)。
どんなアイデアやコメントでも大歓迎です
(以下は、ポールからの回答から復活しましたが、場違いで別の人によって削除されました。)
ブラウザベースのゲームなので、クライアントを大きく変更することはできません。hwid を取得することは可能です。しかし、JS や PHP ではどうでしょうか。
転送を防止するためのタイマーと制限を追加することはできますが、完全に停止するわけではなく、IP 例外について電子メールで送信するオプションがあります。しかし、それは遅くて面倒です。複数のアカウントが同じコンピューターからログインできないが、同じIPからログインできるようにする特定のコンピューター(IPベースではない)の特定のIDまたは識別子を生成する決定的なものがあるかどうか疑問に思っています
iphone - iOS環境でも安心の時差
私は、TinyTower のように、時間の経過とともにいくらか改善されたカジュアル ゲームに取り組んでいます。
しかし、TinyTower の最大の欠点 (そしてすべての点で、そのかわいいゲーム) は、チートが簡単すぎることです。ゲームはデバイスの時間に依存しているので、「これは 8 時間で完了します」と表示されたら、時計を 8 時間進めて、物を手に入れてから戻すだけです。
今、これが私のゲームで人々が勝つ方法ではないことを確認する必要があります. システム時刻とサーバー時刻を相互参照できるという考えが 1 つありましたが、オフライン プレイがオプションであるため、接続が開いているとは限りません。
また、OS の時刻が突然最終再生時刻よりも前になった場合に、目に見えないチート疑惑カウンターを獲得できることを示すセンサーをセットアップすることもできます。これらのうちの 3 つと、ゲームがリセットされ、チーターとしてマークされます。
最後のオプションは、単に気にせず、チーターをチーターのままにすることでした。しかし、ホグスコアなどの競争要素を持たせる場合は、これが機能する必要があります。
そこで... 問題は次のとおりです。ユーザーが最後にアプリを開いてからの経過時間を検出する安全で信頼できる方法を知っている人はいますか?
iphone - アプリの実行間で、ユーザーによる iPhone クロックの進行をローカルで検出するにはどうすればよいですか?
カジュアル ゲームでよくあるエクスプロイトは、システム クロックを人為的に進めて、ゲームプレイを先に進めることです。このようなユーザー クロックの進歩は、iOS デバイスのアプリでどのように検出されるのでしょうか?
- ネットワーク通信を含まない
- 時計が進んでいる間、アプリが開いている (実行中または一時停止中) と想定してはなりません
- クロックの進行を検出する必要があります。クロックのロールバックを検出するだけでは不十分です
理想的には、ソリューションが再起動に対して堅牢であることですが、それは要件ではありません。
actionscript-3 - Flash/AIRゲームでコンピュータIDを確認する
1台のコンピューターで複数のクライアント/アカウントを使用してプレーヤーがゲームに参加できないようにするオンラインマルチプレーヤーゲームを作成しています。同じオフィスの人たちが一緒にプレイできるようにしたいので、IPアドレスのサーバー側チェックを単純に行うことはできません。
したがって、サーバーに送信するクライアントで、ある種のコンピューターID/ハッシュを生成したいと思います。これは簡単にハッキングできることは知っていますが、少なくともクライアントソフトウェアを変更できない、または変更しない「詐欺師」を阻止します。
ゲームクライアントでそのようなID/ハッシュを生成する方法はありますか?FlashとAIRで作成されています(ブラウザとデスクトップの2つのバージョンがあります)。値をチェックするので、値はグローバルに一意である必要はありませんIP-address + ID
anti-cheat - このオンライン ハイスコア スキームが悪用される可能性はありますか?
バックグラウンド
オンラインのハイスコア リストを使用するゲームの問題の 1 つは、それらがしばしば悪用される可能性があることです。ゲームは現在のスコアをサーバーに送信し、狡猾なユーザーはプロトコル/スキームを分析して偽のスコアを送信できます。そのため、一部のハイスコア リストが 999999 のスコアでトップになっています。
この問題の一般的な解決策は、何らかの方法でスコアを暗号化し、その上に偽のスコアを認識する他のメカニズムを配置することです。しかし、これを行ったとしても、スコアを送信するのはクライアントであり、クライアントはユーザーのコンピューターに存在し、リバース エンジニアリングされる可能性があります。
私の考え
私は、タスクの実行方法に関する指示 (およびこれらの指示がいつ実行されるか) を使用してプレーヤー/ロボットを構成するゲームを設計/考えています (完成させます。そうです :))。「Go」ボタンが押されると、ゲームは命令を実行します。最後に結果が得られ、成功した場合はスコアが得られます。
では、これはどうでしょうか。スコアを送信する代わりに、実際の命令がサーバーに送信され、そこで同じ実装を使用して実行されます。次に、サーバーがスコアを計算し、ユーザーをハイスコア リストに配置します。
質問
この考えを悪用して誤ったスコアを得る方法はありますか?
これはおそらく新しい考えではないことは理解しています。しかし、それが機能する場合、すべてのユーザー アクションを記録できる他のゲームにも拡張することは不可能ではありません。
objective-c - iPhone のハードウェアとユーザー タイマーが時間の経過とともに同期しなくなる
アプリの実行中にユーザーが時計を進めているかどうかを検出しようとしています。私は現在、2 つのタイマーの変化を比較することでこれを行っています:[NSDate timeIntervalSinceReferenceDate]と mach_absolute_time。
基本的なアルゴリズムは次のとおりです。
- アプリの開始時に、startUserClock (timeIntervalSinceReferenceDate) と startSystemClock (秒に変換された mach_absolute_time) を保存します。
- タイマーの現在の値をそれぞれの開始値と定期的に比較します。
- 差分が異なる場合 (多少の誤差の範囲内)、タイマーが同期していないことを知る必要があります。これは、時計の変更を示しています。理論的には、これが可能なのは、ユーザーが時計を変更した場合のみです。
ただし、mach_absolute_time は timeIntervalSinceReferenceDate よりもわずかに速い速度で成長しているようです。短期的には、これは大きな問題ではありませんが、時間の経過とともに差が大きくなり、多くの誤検出が見られるようになります.
この問題は、ハードウェアに依存しているようです。私が持っている iPad 1 ではまったく表示されませんが、同僚の iPad 2 で表示され、シミュレーターで表示されます。
mach_absolute_time を CACurrentMediaTime (内部で mach_absolute_time を使用) に置き換えることで、mach_absolute_time を秒に変換しても問題がないことを確認しました。timeIntervalSinceReferenceDate を他のタイミング メソッド (つまり、CFAbsoluteTimeGetCurrent) に変更しようとしました。
タイマーが同じ速度で成長するという私の基本的な仮定に何か問題がありますか? 私の考えでは、何かが根本的に間違っていない限り、同期がそれほどずれてはならないということでした。両者は時間を決定しているだけであり、異なる点から始まっているだけです。
これを行うより良い方法はありますか?完全にオフラインのソリューションが必要です。インターネット接続は想定できません。
flash - Authoritative Flash multiplayer game server: twice the work?
I'm working on a puzzle game in Flash. It's a two-player, head-to-head game with some realtime elements. It is not Tetris-like, but the level of player interaction and the rate of movement is similar to, though slightly more complex than, Tetris Battle on Facebook.
Naturally, I would like to match players up over the Internet. I would also like to prevent cheating as much as possible. Because of this, I am researching an authoritative server solution, much like Colin Moock describes in this answer to a similar question. That is, the server runs the authoritative game logic while the client runs a parallel simulation, sending player movements to the server for validation.
My question is this: Doesn't this essentially mean implementing the game logic on both the client and server side? Worse still, the server probably isn't going to run its simulation in Flash/ActionScript, which means you can't share code and you'll be implementing the same logic twice in two different languages. This sounds like a logistical, bug-riddled nightmare. Am I misunderstanding the problem?
actionscript-3 - シングル プレイヤー フラッシュ ゲームのチート エンジンを防ぐにはどうすればよいですか?
私は Facebook でいくつかの小さなフラッシュ ゲームを持っています。チートエンジンで不正行為を防ぐにはどうすればよいですか? 私の swf ファイルは、スコアを php でデータベースに送信します。チート エンジンを使用してフラッシュ ゲームのハイスコアをハッキングしてほしくありません。これらの問題を回避する最善の方法は何ですか?
前もって感謝します..
ios - ゲームでの「時間変更」の不正行為の防止
重複の可能性:
iOSには、ユーザーが変更できない使用可能な時計がありますか?
時間のかかるタスク(つまり、「動物が繁殖するまで10時間」)がある多くのiOSゲームでは、「設定」に移動して時間を変更し、タスクの完了を高速化できることを知っています。私が開発しているゲームでは、ユーザーにこれをさせたくないので、この種の不正行為を防ぐシステムを実装しようとしています。私はこれについて多くのことを考えましたが、解決策を思い付くことができません。基本的に、私の質問は、ユーザーの不正行為を防ぐために、システムクロック(簡単に操作できる)に依存せずに時間を追跡するにはどうすればよいですか?
java - Gamecih でチートを防ぐには?
バックグラウンド
私はかなり長い間、Android ゲームでプレイヤーがチートをしているという問題を抱えていました。厳格なシングルプレイヤー ゲームでは、これは大きな問題にはなりませんが、私のゲームにはマルチプレイヤー バトルとグローバル ハイスコア リストが含まれているため、正当なプレイヤーが不正行為のためにプレイを停止する原因となっています。
彼らがどのようにだますか
詐欺師は、 Gamecihと呼ばれる root ユーザー向けのアプリを使用します。Gamecih を使用すると、ユーザーはアプリを一時停止し、変数の値を変更してから、アプリを再開できます。つまり、私の場合、彼らはゲームを一時停止し、「健康」を 74 兆に変更してから、マルチプレイヤーの全員からがらくたを追い出します。これは、Gamecih を使用して Fruit Ninja (私のゲームではありません) をチートする方法を示すビデオです。
考慮された方法
- コードの難読化。難読化は変数の値を変更せず、変数名のみを変更するため、これは機能しません。これは、詐欺師が現在のヘルスと同じ値を持つ変数を見つけて、その変数を変更できることを意味します。
- コードの難読化 + ゲッターとセッターの値の変更。このように、健康は実際には実際の健康価値を表していません。getter メソッドでは、return health*10; のようなことを行います。セッターでは health=input/10; を実行します。もちろん、これはもっと複雑になる可能性があります。
私が欲しいもの
考慮された方法 2 を使用する必要があると主張することもできますが、繰り返しますが、ハッキングを防止するものではなく、ハッキングを難しくするだけです。理想的には、人々が Gamecih を使用して不正行為を行っていることを検出し、「Darn you, you nasty hacker」というポップアップを表示して、アプリケーションを閉じたいと考えています。プレイヤーがオフラインでもプレイできるようにしたいので、サーバーに依存するソリューションは望んでいません。可能であれば、コードの難読化も避けたいと考えています。