BloggerAds廣告

相關文章

2011年2月16日 星期三

在ActionScript裡防止以Cheat Engine 修改數值

年一個專案中客戶竟然想到要用Cheat Engine 來試
結果數值事無忌憚地被修改


煩擾了一星期總算有點微目,小弟在這裡分享一下


是次的測試環境為:


Windows XP SP3
Flash CS3 ActionScript 3 FlashPlayer 9
Cheat Engine 5.5


我們要測試的是myNum這個數
我用最正路的方法define myNum, 並以一個textField 來顯示
做了一個button來改變myNum:
var txtDisplay:TextField = new TextField();
var storage:Object = new Object();
var myNum:int = 0;


txtDisplay.autoSize = TextFieldAutoSize.LEFT;
txtDisplay.appendText(myNum.toString());


addChild(txtDisplay);


btn.addEventListener(MouseEvent.CLICK, btn_click);


function btn_click(e:MouseEvent) {
myNum++;
txtDisplay.text = myNum.toString();
}


遺憾地
這個寫法小弟只用了三次高階搜尋就能找出並鎖住myNum了


那解決方法呢??
其實不難
我的做法就是把myNum塞進object 就可以了:
var txtDisplay:TextField = new TextField();
var storage:Object = new Object();
storage.myNum = 0; 就是把myNum塞進一個object裡


txtDisplay.autoSize = TextFieldAutoSize.LEFT;
txtDisplay.appendText(storage.myNum.toString());


addChild(txtDisplay);


btn.addEventListener(MouseEvent.CLICK, btn_click);


function btn_click(e:MouseEvent) {
storage.myNum++;
txtDisplay.text = storage.myNum.toString();
}


同樣, Cheat Engine 三次高階搜尋就能找出myNum的值, 不過已經鎖不住myNum了~ : D
小弟亦以2bytes 及4bytes低階搜尋測試, 前者結果一樣, 後者五十多個怪怪的result, 改不了


有朋友或者會問, AS2 呢??
這個很有趣
我把profile 調成ActionScript2 FlashPlayer 8
並以下面的code 測試
var myNum:Number = 0;
var txtDisplay:TextField = this.createTextField("txtDisplay", 0,0,0,0,0);


txtDisplay.autoSize = true;
txtDisplay.text = myNum.toString();


btn.onRelease = function(){
myNum++;
txtDisplay.text = myNum.toString();
}
結果不論高階或是低階, 2bytes 或4bytes , 也都搜尋不到myNum
因為AS2對數字只有Number可用, 是個浮點數 , 故小弟還測試過以Float truncated搜尋, 結果一樣都是搜尋不到myNum
若然各位高手有破解之法或更好的預防方法, 還望賜教

沒有留言 :

張貼留言