2011-02-10 8 views
1

Google Maps JS API v3を使用して、「この衛星/航空写真にどのような場所や記念碑があるかを推測する」タイプのブラウザ内ゲームを作成しています。スクリーンショットをとることはできません。具体的にはPermission Guidelines for Google Mapsで禁止されているようです。ローギングフルーツ:JavaScriptの値を難読化する

しかし、私は不正行為から保護する必要がある - あなたは不正ユーザーはこのデータだけを取得するソースを表示する必要があることを意味する、google.maps.LatLngとズームレベルto the map constructorに合格する必要があります。

<script type="text/javascript" 
    src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 
    function initialize() { 
    var myOptions = { 
     center: new google.maps.LatLng(55, 145), /* this */ 
     zoom: 10, /* and possibly this */ 
     mapTypeId: google.maps.MapTypeId.SATELLITE, 
    } 
    var map = new google.maps.Map(document.getElementById("map_canvas"), 
            myOptions); 
    } 
</script> 

マップを壊すことなく(例えば、centerや操作機能setZoom()など)、匿名関数でマップを初期化する(オブジェクトがグローバル名前空間に表示されないようにする)ことはできません。

これはもちろん、ブラウザ内のクライアントサイドの信頼できないJavaScriptです。私はタグの多くを読んでおり、私はスクリプトを弾丸にすることを試みているわけではありません(結局のところゲームです)。 Bruce Schneierが書いているように、1337 Java5kryp7 haxz0rz - 「kid sister encryption」に対して難読化を合理的に難しくする必要があります。 lowest-hanging fruitを削除することで、Base64エンコーディングよりも難しいものはmost cheatersになります。スマートでJSデバッガを使用できると判断された場合、Google Maps APIに平文で値を渡す必要があります。大規模で起こることは考えにくい(不正行為を防ぐために、コードに関連しない他の方法もあるだろう)。

私はvariousminimizersobfuscatorsを試してみたが、それらは主に(この場合は「秘密」ではありません)コードを扱います、変数の値は、まだそのまま示しています。

@ Pointyの提案では、HTTPリクエストを厳密にチェックし、そのうちの1つはURLの緯度/経度を送信します。それは残念ですが、このリクエストは他の多くのリクエストの間に発生しますので、すぐに気付かれることはありません。幸いなことに、目標はそれをより堅くにすることだけです。


TL; DR:私はJavaScriptで三つの値を難読化する必要があります。私は防弾鎧、くしゃみのガードを探しているわけではありません。私は何を使うべきですか?

+1

平文の値はURLで外出する必要はないのですか?すべての人は、TamperDataをインストールして、すべてのHTTPトラフィックの進行を監視する必要があります。 – Pointy

+0

@Pointy:1)マップタイル(要求される)は物理的な場所と1対1の相関を持ちますが、返されるJSONデータの位置も、場所と密接に関連していますが、さらに2)ユーザーの90%の知識を超えていることが私の主張です。私が言ったように、私は、10歳の自称 "l33t haxx0r"を止めるための防弾対策は必要ありません。 – Piskvor

+0

それはあなたのゲームとあなたの時間です:-)私の主張は、Firebugや何かを使うよりもTamperData(またはそのようなもの)を使用することが、POSTボディと同様にすべてのリクエストとレスポンスヘッダを表示するので、はるかに簡単です。 – Pointy

答えて

0

obsfucationで時間を無駄にしないでください。コード(yuicclosure)を圧縮してください。あなたが言ったように、コードは@クライアント側を実行し、何もobsfucatingのポイントはありません。

例えば、このような何か:あなたが明示的に '隠す' データにしたい場合は、closure online

で遊ぶことができます

for(var a=0;a<10;a++)alert(a); 

for (var secret = 0; secret < 10; secret++) { 
    alert(secret); 
} 

はこのに 'closured' を取得しますセグメント:いくつかの形式で圧縮/ '暗号化'すると、JavaScript implementation of Gzipがそれを助けるかもしれません。

+0

提案していただきありがとうございます、私はobfuscatorsで私の結果を編集しました。しかし、一般的には無益ですが、難読化のポイントがあります。それは__limited knowledge__にあります:多くの人がCtrl + Uとvgrepを使って緯度/経度ペアのようなものを得ることができます。 JSデバッガをセットアップすることができる人は少なくなるでしょう(はい、Chromeに組み込まれていますが、これを知っていますか?)。一般的なバイクロックは、知識の豊かな泥棒が10秒で開くので、同様に "役に立たない"価値は抑止力にある(誰もが自転車の泥棒であると知っているわけではない)。 – Piskvor

+0

Gzipは有望に見えますが、それを調べます。 – Piskvor

1

単純に縮小するのではなく、コードベース全体を難読化することをお勧めします。このようにして、ユーザがどの変数が緯度/経度値を探すかを知ることは非常に困難です。

Dojo Toolkitは、完全な難読化のために、クローズ・コンパイラーを拡張モードで使用することができます。 JavaScriptライブラリーを使用している場合でも、IPを保護するためにコード全体を難読化する必要がある場合は、Dojoを考慮する必要があります。

http://dojo-toolkit.33424.n3.nabble.com/file/n2636749/Using_the_Dojo_Toolkit_with_the_Closure_Compiler.pdf?by-user=t

+0

うーん、興味深いね、ありがとう。 – Piskvor