私はキャンバスに基づいてHTML5ゲームを書いて、私は問題があります。HTML5ゲーム - 変数の変更から保護する方法
私はそのようなVAR使用:
var score = 0;
// another code
++score;
をしかし、ユーザが(例えば放火犯、またはクロムエディタで。)そのVARを編集することができます - スコアがハッキング。
アイデア?
私はキャンバスに基づいてHTML5ゲームを書いて、私は問題があります。HTML5ゲーム - 変数の変更から保護する方法
私はそのようなVAR使用:
var score = 0;
// another code
++score;
をしかし、ユーザが(例えば放火犯、またはクロムエディタで。)そのVARを編集することができます - スコアがハッキング。
アイデア?
これを避けるためにできることはありません。コードを難読化することで難しくすることはできますが、それでもスコアをハックすることは可能です。
スコアを2倍にしてループやいくつかの関数でゲームロジック外で変更されたかどうかを確認するだけで、ユーザーは両方の変数を見つける必要があります。
2番目のスコア値が別のスコア値の2倍の場合は、現在のスコアとすべての変数スコアを比較することでさらにスコアが高くなります。
あなたはクラスのコンストラクタ内のローカル変数、それが入手しにくいのですその方法として、スコア変数を置くことができます:それは、コードをハックすることがもちろん可能だが、それは全くないようだ
function MyClass() {
var score = 0;
this.somethingHappened = function() {
if (someondition) {
score++;
}
}
this.getScore = function() {
return score;
}
}
グローバル変数を変更するだけで簡単です。
クライアント側で実行されるすべてのコードを実際に保護することはできません!
したがって、変数の内容を保護することはできません。 Guffa氏のように、ハッキングするのが難しくなるだけです。
そうです、あなたができることは、難読化、圧縮、ポインタの追加などで難易度を変えることです。デコードが難しくコメントを削除するのが難しくなるので、簡単にjsスクリプトをハックします – PauAI
Javascriptはクライアント側で実行されます。クライアント上で発生したことは、それによって制御することができます。その周りに道はない。あなたのコードを難読化しようとすることはできますが、それだけでチートの仕方を見つけるのが少し難しくなります。十分に決定された人を止めることはできません。
チートプルーフであるゲームを設計する唯一の方法は、サーバー上のすべてのゲームの仕組みを行うことです。これは技術的にははるかに挑戦的ですが、ユーザーが接続不良に遭遇したときのゲーム体験を損ない、さらに多くのサーバー容量が必要なため追加のリソースが必要になりますが、それは唯一の方法です。
ところで、私たちはゲーム開発に関する質問のための姉妹サイトhttp://gamedev.stackexchange.comを持っています。あなたはそこでより良い答えを得るかもしれません。
jsのおかげでプライベートとパブリックのVARについてのクロックフォードの記事を参照してください。私はhttp://www.javascriptobfuscator.com/を使用し、正常に動作します。 – Sekhmet