QQ牧场 pastureKey 关键算法,大伙一起研究吧!2010年3月25日
2010-03-25 20:11
344 查看
今天基本每个QQ都收到TX的情书,QQ牧场验证增加了pastureKey。于是找了找算法,还真找到,额!TX这次醒目了,混淆了所有命名。晕,混淆了还容易找一点。。。。不废话了,大伙来看flash里面的代码吧!
很明显上面这个变量的值是一个函数的返回值,那么就要找类_-LF,翻阿翻阿,终于找到了。。。
哦哦,下面这个方法又是一个类的方法_-1H._-C0,CommonData.serverTime这个很明显就是时间了,好,我们继续找关键类
翻几下又找到了
唉,不会flash的一些关键字看得累阿,又有一个关键的类_-6B,咱们继续找阿
好了,所有的关键代码都找到了,先收藏起来先,那天有空转成C#.Net或者VB.Net的,跟大家一起分享,别丢砖头阿!!
在这希望懂flash的高手帮俺翻译一下转成C#.Net或者VB.Net,大伙慢慢研究,下班了。。。。
哦,差点忘记给大伙测试的数据了,看下面
farmTime 1269515019
pastureKey 54b510366bf0fe149f0cf0092ffbfb214db59346
哪位高手翻译的代码能将上面的farmTime计算得出pastureKey的值,麻烦给个链接!!!
var pastureKey:* = _-LF._-Sr();
很明显上面这个变量的值是一个函数的返回值,那么就要找类_-LF,翻阿翻阿,终于找到了。。。
哦哦,下面这个方法又是一个类的方法_-1H._-C0,CommonData.serverTime这个很明显就是时间了,好,我们继续找关键类
public static function _-Sr() : String { return _-1H._-C0(CommonData.serverTime); }
翻几下又找到了
public class _-1H extends Object { public static var _-TP:ByteArray; public function _-1H() { return; }// end function private static function _-UM(param1:ByteArray) : Array { var _loc_2:* = param1.position; param1.position = 0; var _loc_3:* = new Array(); var _loc_4:* = param1.length * 8; var _loc_5:int; var _loc_6:int; while (_loc_6 < _loc_4) { // label _loc_3[_loc_6 >> 5] = _loc_3[_loc_6 >> 5] | (param1.readByte() & _loc_5) << 24 - _loc_6 % 32; _loc_6 = _loc_6 + 8; }// end while _loc_3[_loc_4 >> 5] = _loc_3[_loc_4 >> 5] | 128 << 24 - _loc_4 % 32; _loc_3[(_loc_4 + 64 >> 9 << 4) + 15] = _loc_4; param1.position = _loc_2; return _loc_3; }// end function private static function f(param1:int, param2:int, param3:int, param4:int) : int { if (param1 < 20) { return param2 & param3 | ~param2 & param4; }// end if if (param1 < 40) { return param2 ^ param3 ^ param4; }// end if if (param1 < 60) { return param2 & param3 | param2 & param4 | param3 & param4; }// end if return param2 ^ param3 ^ param4; }// end function private static function _-Uz(param1:int) : int { if (param1 < 20) { return 1518500249; }// end if if (param1 < 40) { return 1859775393; }// end if if (param1 < 60) { return 2400959708; }// end if return 3395469782; }// end function private static function _-CE(param1:Array) : ByteArray { var _loc_11:int; var _loc_12:int; var _loc_13:int; var _loc_14:int; var _loc_15:int; var _loc_16:int; var _loc_17:int; var _loc_2:int; var _loc_3:int; var _loc_4:int; var _loc_5:int; var _loc_6:int; var _loc_7:* = param1.length; var _loc_8:* = new Array(80); var _loc_9:int; while (_loc_9 < _loc_7) { // label _loc_11 = _loc_2; _loc_12 = _loc_3; _loc_13 = _loc_4; _loc_14 = _loc_5; _loc_15 = _loc_6; _loc_16 = 0; while (_loc_16 < 80) { // label if (_loc_16 < 16) { _loc_8[_loc_16] = param1[_loc_9 + _loc_16]; } else { _loc_8[_loc_16] = _-6B._-MW(_loc_8[_loc_16 - 3] ^ _loc_8[_loc_16 - 8] ^ _loc_8[_loc_16 - 14] ^ _loc_8[_loc_16 - 16], 1); }// end else if _loc_17 = _-6B._-MW(_loc_11, 5) + f(_loc_16, _loc_12, _loc_13, _loc_14) + _loc_15 + int(_loc_8[_loc_16]) + _-Uz(_loc_16); _loc_15 = _loc_14; _loc_14 = _loc_13; _loc_13 = _-6B._-MW(_loc_12, 30); _loc_12 = _loc_11; _loc_11 = _loc_17; _loc_16++; }// end while _loc_2 = _loc_2 + _loc_11; _loc_3 = _loc_3 + _loc_12; _loc_4 = _loc_4 + _loc_13; _loc_5 = _loc_5 + _loc_14; _loc_6 = _loc_6 + _loc_15; _loc_9 = _loc_9 + 16; }// end while var _loc_10:* = new ByteArray(); new ByteArray().writeInt(_loc_2); _loc_10.writeInt(_loc_3); _loc_10.writeInt(_loc_4); _loc_10.writeInt(_loc_5); _loc_10.writeInt(_loc_6); _loc_10.position = 0; _-TP = new ByteArray(); _-TP.writeBytes(_loc_10); _-TP.position = 0; return _loc_10; }// end function private static function _-IM(param1:String) : Array { var _loc_2:* = new Array(); var _loc_3:* = param1.length * 8; var _loc_4:int; var _loc_5:int; while (_loc_5 < _loc_3) { // label _loc_2[_loc_5 >> 5] = _loc_2[_loc_5 >> 5] | (param1.charCodeAt(_loc_5 / 8) & _loc_4) << 24 - _loc_5 % 32; _loc_5 = _loc_5 + 8; }// end while _loc_2[_loc_3 >> 5] = _loc_2[_loc_3 >> 5] | 128 << 24 - _loc_3 % 32; _loc_2[(_loc_3 + 64 >> 9 << 4) + 15] = _loc_3; return _loc_2; }// end function public static function _-TV(param1:ByteArray) : String { var _loc_2:* = _-1H._-UM(param1); var _loc_3:* = _-CE(_loc_2); return _-6B._-Zl(_loc_3.readInt(), true) + _-6B._-Zl(_loc_3.readInt(), true) + _-6B._-Zl(_loc_3.readInt(), true) + _-6B._-Zl(_loc_3.readInt(), true) + _-6B._-Zl(_loc_3.readInt(), true); }// end function public static function _-C0(param1:int) : String { var _loc_6:int; var _loc_2:String; var _loc_3:* = _loc_2.substr(param1 % 10, 100); var _loc_4:* = _-IM(param1 + _loc_3); var _loc_5:* = _-CE(_loc_4); return _-6B._-Zl(_loc_5.readInt(), true) + _-6B._-Zl(_loc_5.readInt(), true) + _-6B._-Zl(_loc_5.readInt(), true) + _-6B._-Zl(_loc_5.readInt(), true) + _-6B._-Zl(_loc_5.readInt(), true); }// end function public static function _-EQ(param1:String) : String { var _loc_7:uint; var _loc_2:* = _-1H._-IM(param1); var _loc_3:* = _-CE(_loc_2); var _loc_4:String; _loc_3.position = 0; var _loc_5:int; while (_loc_5 < _loc_3.length) { // label _loc_7 = _loc_3.readUnsignedByte(); _loc_4 = _loc_4 + String.fromCharCode(_loc_7); _loc_5++; }// end while var _loc_6:* = new Base64Encoder(); new Base64Encoder().encode(_loc_4); return _loc_6.flush(); }// end function } }
唉,不会flash的一些关键字看得累阿,又有一个关键的类_-6B,咱们继续找阿
public class _-6B extends Object { private static var _-bY:String = "0123456789abcdef"; public function _-6B() { return; }// end function public static function _-Zl(param1:int, param2:Boolean = false) : String { var _loc_4:int; var _loc_5:int; var _loc_3:String; if (param2) { _loc_4 = 0; while (_loc_4 < 4) { // label _loc_3 = _loc_3 + (_-bY.charAt(param1 >> (3 - _loc_4) * 8 + 4 & 15) + _-bY.charAt(param1 >> (3 - _loc_4) * 8 & 15)); _loc_4++; }// end while } else { _loc_5 = 0; while (_loc_5 < 4) { // label _loc_3 = _loc_3 + (_-bY.charAt(param1 >> _loc_5 * 8 + 4 & 15) + _-bY.charAt(param1 >> _loc_5 * 8 & 15)); _loc_5++; }// end while }// end else if return _loc_3; }// end function public static function _-Hh(param1:int, param2:int) : uint { var _loc_3:* = 32 - param2; return param1 << _loc_3 | param1 >>> 32 - _loc_3; }// end function public static function _-MW(param1:int, param2:int) : int { return param1 << param2 | param1 >>> 32 - param2; }// end function }
好了,所有的关键代码都找到了,先收藏起来先,那天有空转成C#.Net或者VB.Net的,跟大家一起分享,别丢砖头阿!!
在这希望懂flash的高手帮俺翻译一下转成C#.Net或者VB.Net,大伙慢慢研究,下班了。。。。
哦,差点忘记给大伙测试的数据了,看下面
farmTime 1269515019
pastureKey 54b510366bf0fe149f0cf0092ffbfb214db59346
哪位高手翻译的代码能将上面的farmTime计算得出pastureKey的值,麻烦给个链接!!!
相关文章推荐
- 基于纹理的图像检索算法研究
- 关于二维码分块上色(彩色二维码)的算法研究
- 故障诊断专家系统研究之五-----推理机制及可信度算法
- Regular Expression算法研究
- SQL 去除某个字段的重复信息 QQ、微信附近的人实现算法
- 刚开始学c#!有一起研究的朋友没?
- 算法:AOE网(Activity On edge Network)与关键路径简介
- 经典算法研究系列:十、从头到尾彻底理解傅里叶变换算法、下
- QQ协议的研究
- Halocn---MvTec--Halcon机器视觉软件包几位算法研究人员相关的主页
- 加拿大在音频压缩算法和处理技术上有相当的研究和应用
- 移动QQ代码研究之网络操作
- 无限级目录树最优算法的新研究
- SSD中一种地址映射算法研究
- SSD中一种地址映射算法研究
- 程序员面试、算法研究、编程艺术、红黑树4大系列集锦与总结
- 程序员面试、算法研究、编程艺术、红黑树、数据挖掘5大系列集锦
- 十三个经典算法研究与总结、目录+索引
- 关键路径的概念和算法
- 计算几何---多边形三角剖分算法研究与实现