相干校内开心农场farmKey的算法
有关校内开心农场farmKey的算法
看了一下午Flash,把开心农场中farmKey的代码全搜集出来了,由于没有接触过Flash编程,请教各位高人各个部分和函数大概的意思~
研究过开心农场的朋友应该都看过,在flash中进行动作与服务器交互的时候,是以get方式提交,提交的数据中包含farmKey和farmTime两个比较重要的验证参数,如下代码:
代码有点乱……是直接从Flash中得到的,可以看到:
var _timeValue:* = MData.getInstance().mainData.serverTime;
var farmTime:* = String(_timeValue);
而mainData.serverTime;是从如下函数计算的:
最后计算farmKey,farmKey的计算函数是:
var farmKey:* = MD5.hash(_timeValue + SecurityKey.encodeKey);
可以看到farmKey是farmTime+一个安全码的MD5值,安全码的产生代码如下:
这是一个完整的farmKey的产生过程。
我的问题是,产生安全码,也就是encodeKey()的过程是怎样的?虽然代码摆在眼前了,但是没有学过flash,不知道如何解释,Bitmap,String,new KEYJPG(),这些变量或函数的意义是什么?
最重要的:
_loc_2 = _loc_1.bitmapData.getPixel32(3, 5).toString(23);这句话是什么意思?
谢谢各位~
------解决方案--------------------
_loc_2 = _loc_1.bitmapData.getPixel32(3, 5).toString(23);这句话是将(3, 5)这点的像素点的值转化为23进制数
------解决方案--------------------
在happyfarm.swf里面有一张图片,反编译就能找到,这张图片的(3,5)这点的颜色值,搞成0xFFrrggbb的格式,其中rr、gg、bb分别是这点的三色值,然后把这个数转成23进制,就是encodeKey
看了一下午Flash,把开心农场中farmKey的代码全搜集出来了,由于没有接触过Flash编程,请教各位高人各个部分和函数大概的意思~
研究过开心农场的朋友应该都看过,在flash中进行动作与服务器交互的时候,是以get方式提交,提交的数据中包含farmKey和farmTime两个比较重要的验证参数,如下代码:
private function request(param1:String, param2:Object, param3:Function, param4:int = 60000, param5:Boolean = false, param6:String = "text") : void
{
var url:* = param1;
var value:* = param2;
var handlerFun:* = param3;
var timeout:* = param4;
var reload:* = param5;
var dataFormat:* = param6;
var _timeValue:* = MData.getInstance().mainData.serverTime;
var farmKey:* = MD5.hash(_timeValue + SecurityKey.encodeKey);
var farmTime:* = String(_timeValue);
url = url + ("&farmKey=" + farmKey + "&farmTime=" + farmTime + "&inuId=" + SessionKey.value);
HTTPRequest.getInstance().postRequest(url, value, [此处直接递交了一个函数,太长,剪掉], timeout, reload, dataFormat);
return;
}
代码有点乱……是直接从Flash中得到的,可以看到:
var _timeValue:* = MData.getInstance().mainData.serverTime;
var farmTime:* = String(_timeValue);
而mainData.serverTime;是从如下函数计算的:
public function get serverTime() : Number
{
if (_serverTime == 0)
{
return Math.floor(new Date().getTime() / 1000);
}// end if
return _serverTime + (Math.floor(getTimer() / 1000) - _clientTime);
}// end function
最后计算farmKey,farmKey的计算函数是:
var farmKey:* = MD5.hash(_timeValue + SecurityKey.encodeKey);
可以看到farmKey是farmTime+一个安全码的MD5值,安全码的产生代码如下:
public static function get encodeKey() : String
{
var _loc_1:Bitmap;
var _loc_2:String;
if (_encodeKey != "inu")
{
return _encodeKey;
}// end if
_loc_1 = new KEYJPG();
_loc_2 = _loc_1.bitmapData.getPixel32(3, 5).toString(23);
return _loc_2;
}// end function
这是一个完整的farmKey的产生过程。
我的问题是,产生安全码,也就是encodeKey()的过程是怎样的?虽然代码摆在眼前了,但是没有学过flash,不知道如何解释,Bitmap,String,new KEYJPG(),这些变量或函数的意义是什么?
最重要的:
_loc_2 = _loc_1.bitmapData.getPixel32(3, 5).toString(23);这句话是什么意思?
谢谢各位~
------解决方案--------------------
_loc_2 = _loc_1.bitmapData.getPixel32(3, 5).toString(23);这句话是将(3, 5)这点的像素点的值转化为23进制数
------解决方案--------------------
在happyfarm.swf里面有一张图片,反编译就能找到,这张图片的(3,5)这点的颜色值,搞成0xFFrrggbb的格式,其中rr、gg、bb分别是这点的三色值,然后把这个数转成23进制,就是encodeKey