はい、ゲームを保護できます。たとえば、詐欺師に方向を間違える非常に難しいパズルを解かせることによって。
コンテキストの例
javascriptに完全に依存し、サーバー側のゲーム状態がないゲームを考えてみましょう。ゲーム中にポイントが収集され、ゲームの終了時に、これらのポイントがサーバーに送信されて、プレーヤーがリーダーボードに配置されます。
リーダーボードの問題
ゲームの最も重要な部分は、誰かがネットワークトラフィックを監視し、必要に応じて変更できることです。サーバー上でゲームの状態を維持することで、ゲームの他のすべての側面を防ぐことができますが、それは私の答えの範囲外です。
「セキュリティキー」の実装
次のようなjavascriptオブジェクトのポイントを追跡することを検討してください。
results = [
{score: 12, epoch_ms: 15236543784, security_key: 6b42535e89f7fb1cc5abbe53d267ee0e},
{score: 4, epoch_ms: 15236542565, security_key: 8af02a3d473d6b9c0a0362cfa59567d8},
{score: 5, epoch_ms: 15236564511, security_key: 40f6611ff3156d935f420eb746ac897f}
];
サーバー側では、security_key
パケット全体でチェックされます{score: ?, epoch_ms: ?}
。失敗した場合は、サーバーから「エラー。セキュリティキーが正しくありません。次回これが発生すると、不正行為によりアカウントが禁止されます。」というメッセージがサーバーから返されます。「ユーザーが常に新しいアカウントを作成できないようにする方法は範囲外です。この答えの、しかしこれを行うための確かに非常に良い方法があります。
セキュリティキーを生成する方法
を生成するコードは次のsecurity_key
ようになります。
result.security_key = your_over_the_top_complicated_algorithm(result, md5(result));
...
function your_over_the_top_complicated_algorithm(result, seed)
{....}
...
現在、は、security_key
非常に長い正規表現などを使用する、非常に難読化された複雑なアルゴリズムで作成されています。それがどのように機能するかを理解しようとしている人は、それを正しく理解するのに少なくとも1週間かかることを確認してください(アルゴリズムを毎週根本的に更新して、リバースエンジニアリングをさらに促進することができます)。
このコードを機能させるには、使用するハッシュアルゴリズム(md5.js
)を実装する既存のライブラリも含める必要があります。ライブラリが別のファイルである限り、これらのハッシュの使用を複雑なアルゴリズムに埋め込むこともできます。
だまされた
秘訣は、詐欺師がその複雑なアルゴリズムを打ち負かす方法を決定しようとしているときresult
に、のような外部の縮小ハッシュ関数への参照として渡されるときですmd5
。ただし、外部md5関数は実際には独自の修正バージョンであるため、少しコードを追加しました。これにより、result.epoch_ms
値のエポックの精度が犠牲になり、スコア(および場合によっては結果オブジェクト内の他の要素)に基づいてハッシュが格納されます。 )。
例えば。が「」epoch_ms
に等しく、「15236564511
」である場合。次に、ラインに沿ってどこかを呼び出して、非常に複雑な関数のシードとして機能するようにします。しかし、その間、その外部md5コードでは...score
5
md5(result)
function md5(r)
{
...
r.epoch_ms=(r.epoch_ms+'').slice(0, -2)+(1234.56*r.score+'').slice(1,3);
// or obfuscated (to prevent searching for terms like 'epoch_ms'):
var _0x5da4=["\x65\x70\x6F\x63\x68\x5F\x6D\x73","\x73\x6C\x69\x63\x65","","\x73\x63\x6F\x72\x65"];r[_0x5da4[0]]= (r[_0x5da4[0]]+ _0x5da4[2])[_0x5da4[1]](0,-2)+ (1234.56* r[_0x5da4[3]]+ _0x5da4[2])[_0x5da4[1]](1,3)
...
}
の最後の2つの数値が、epoch_ms
に基づく単純なハッシュと一致しない場合、サーバーは、が無効であるscore
かのように同じエラーを返します。security_key
これは、誤った方向性の本質的な部分です。
注意してください
このアプローチは簡単に実装できます。トレードオフはありません。問題は、このパズルの解決策が目に見えないところに隠されていることです。誤った方向が失敗し、誰かがmd5.js
ファイルを調べての使用法を探すとすぐにr
、それは「ゲームオーバー」です。
また、私はこれを自分で作成したばかりであり、これがjavascriptベースのWebゲームで詐欺師を止めるのに十分であるかどうかについての個人的な経験がないことにも注意してください。私はこのアプローチの大きな弱点を見落としていたかもしれません。弱点を見つけたらコメントしてください、それは未発達のアイデアなので、いいです:)
これは暗号的に安全ではなく、すべてのアンチチートシステムと同様に、最終的に誰かがそれを理解するでしょう。秘訣は、最小限の実装作業で可能な限り困難にすることだと思います。
これは比較的単純な例ですが、十分な難読化、ステガノグラフィ、厳格な禁止ポリシー(詐欺師は最初の試行で間違いを犯す可能性があります)、さらなる改善、および実装の単純さを備えているため、取った。md5-関数を使用してコードを非表示にすることは、多くのバリエーションの1つにすぎません。あなたは潜在的な詐欺師を誤った方向に向け、やる気を起こさせるための多くの異なる方法を考えることができます。
それはあなたの家への強化されたドアのようなものです。彼らはもはやドアを蹴るだけではなく、入るためにより多くの時間を費やす必要があります。