低挂水果:JavaScript中的混淆值

时间:2011-02-10 15:18:01

标签: javascript obfuscation

我正在使用Google Maps JS API v3制作一种类型为“猜测这个卫星/航拍视图中的地点/纪念碑/等等”的浏览器内游戏。我不能只截取屏幕截图,因为这似乎是Permission Guidelines for Google Maps特别禁止的。

但是,我需要防止作弊者 - 你必须传递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;我已经阅读了标签的大部分内容,而我并没有尝试使脚本具有防弹性(毕竟它只是一个游戏)。 我只需要对1337 Java5kryp7 haxz0rz - “小妹妹加密”进行混淆,正如Bruce Schneier所说的那样。任何比base64编码更难的东西都会通过消除most cheaters来阻止lowest-hanging fruit - 如果骗子很聪明并且确定足以使用JS调试器,他可以绕过我能做的任何事情(因为我需要传递值)以明文形式提供给Google Maps API,但这不大可能发生(也会有其他与代码无关的方法来防止作弊)。

我已经尝试various minimizersobfuscators,但这些代码主要处理代码(在这种情况下不是“秘密”),变量的值仍然是逐字显示。

在@Pointy的建议中,我仔细检查了HTTP请求,其中一个确实发送了URL中的lat / lon;虽然这令人失望,但这个请求发生在许多其他请求之间,所以它不会立即被注意到。幸运的是,目标只是让更难找到纬度/经度,而不是防弹。


TL; DR:我需要在JavaScript中混淆三个值。我不是在寻找防弹衣,只是打喷嚏。我该怎么用?

2 个答案:

答案 0 :(得分:1)

最好混淆整个代码库,而不仅仅是缩小代码。这样,用户很难知道哪个变量可以查找纬度/经度值。

Dojo Toolkit可以在高级模式下与Closure Compiler一起使用,以进行完全混淆。如果您使用JavaScript库但需要混淆整个代码以保护您的IP,您应该考虑使用Dojo。

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

答案 1 :(得分:0)

不要浪费你的时间陪伴。压缩代码(yuicclosure)并完成它。正如你所说的那样,代码运行@client方面,没有任何意义可以阻止任何事情。

例如,像这样:

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

进入'关闭':

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

你可以玩closure online

如果您想明确“隐藏”数据段:以某种形式压缩/'加密',JavaScript implementation of Gzip可能有助于此。