[英]Low-Hanging Fruit: Obfuscating values in JavaScript
我正在使用Google Maps JS API v3制作一個瀏覽器游戲,類型為“猜測此衛星/鳥瞰圖中的位置/紀念碑/等。” 我不能只是截圖,因為Google Maps權限指南似乎特別禁止使用此截圖。
但是,我需要防止作弊-您必須將google.maps.LatLng和縮放級別傳遞給地圖構造函數 ,這意味着作弊用戶只需要查看源即可獲取此數據:
<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(“姐妹加密”)進行相當困難的混淆 。 任何比base64編碼更難的事情都可以通過消除懸而未決的成果來阻止大多數作弊者 -如果作弊者很聰明並且有足夠的決心使用JS調試器,那么他可以繞開我可以做的一切(因為我需要將值傳遞給Google Maps API (以明文形式),但這種情況不太可能在大規模范圍內發生(還有其他與代碼無關的防止作弊的方法)。
我已經嘗試過各種 最小化器和混淆器 ,但是這些將主要處理代碼(在這種情況下不是“秘密”),變量的值仍逐字顯示。
在@Pointy的建議下,我仔細檢查了HTTP請求,其中一個確實在網址中發送經緯度; 盡管令人失望,但此請求發生在許多其他請求之間,因此不會立即被注意到。 幸運的是,目標只是使找到經緯度變得更困難 ,而不是防彈。
TL; DR:我需要混淆 JavaScript中的三個值。 我不是在尋找防彈裝甲,而是在打噴嚏。 我應該使用什么?
最好混淆整個代碼庫,而不僅僅是縮小代碼。 這樣,用戶將很難知道要查找經緯度值的變量。
Dojo Toolkit可以在高級模式下與Closure Compiler一起使用,以進行完全混淆。 如果使用JavaScript庫,但還需要混淆整個代碼以保護IP,則應考慮使用Dojo。
不要浪費時間進行混淆。 壓縮代碼( yuic , Closure )並完成它。 如您所說,代碼運行@client端,毫無意義。
例如,如下所示:
for (var secret = 0; secret < 10; secret++) {
alert(secret);
}
被“封閉”到這個:
for(var a=0;a<10;a++)alert(a);
如果您想明確地“隱藏”數據段:以某種形式壓縮/“加密”它們,Gzip的JavaScript實現可能對此有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.