QQ农场终于更新啦~~
我将是一名高中生了,前不久去军训,咳,还真苦,倒也学了不少,为期6天,眼看暑假要过去了,我的农场外挂还没有完成,毕竟没有时间啊~ 好了,废话不多说,转入正题,我军训前看了QQ农场的版本,是64,但回来后看了IE缓存,已经是66了,我马上想起一个问题:farmkey算法更新了吗?因为有许多次版本虽然有更新,但farmkey的生成的算法都是没有变的,说干就干,复制了一份Main_v_66.swf,马上反汇编,导出as脚本后,发现真的更新了!在Main_v_66.swf\动作\module\_-NA.as中是这样描述farmkey的生成原理的:
CommonData.getKey = function () : String{ var _loc_1:String = "usuCkmYdicKaNdishitiNuRMouTh"; var _loc_2:* = CommonData.serverTime.toString(); var _loc_3:* = parseInt(_loc_2.substr((_loc_2.length - 1)), 10); var _loc_4:* = _loc_1.substr(_loc_3); return _-dO._-No(_loc_2 + _loc_4); }// end function
在Main_v_64.swf是这样描述的:
CommonData.getKey = function () : String { var _loc_1:String = "FiNalHQKtL6bFaRmSUck"; var _loc_2:* = CommonData.serverTime.toString(); var _loc_3:* = parseInt(_loc_2.substr((_loc_2.length - 1)), 10); var _loc_4:* = _loc_1.substr(_loc_3); return _-1C._-FC(_loc_2 + _loc_4); }// end function
很明显,只是换了个字符串而已,再翻译成Pascal就OK啦,以下代码在Delphi7下面通过:
getKey
1 function GetFarmKey(Time: TDateTime): string;
2 var
3 md5: TIdHashMessageDigest5;
4 temp1: Integer;
5 temp3: string;
6 //temp3: AnsiString; //D2010
7 begin
8 temp1 := DatetimeToUnix(time - 8 / 24);
9 FarmTime := temp1;
10 //Update ==> LHGHqwdsdfgHQKtL6b6gsESuck
11 //Update ==> FiNalHQKtL6bFaRmSUck
12 temp3 := 'usuCkmYdicKaNdishitiNuRMouTh';
13 Delete(temp3, 1, temp1 mod 10);
14 temp3 := IntToStr(temp1) + temp3;
15 md5 := TIdHashMessageDigest5.Create;
16 Result := LowerCase(md5.AsHex(md5.HashValue(temp3)));
17 //Result := LowerCase(md5.HashStringAsHex(temp3)); //D2010
18 md5.Free;
19 end;
呵呵,这个算法也不知道是哪位老兄写的,我只是换了个字符串,当然,我写这篇文章的目的,纯属是为了学习和交流,并无别的意思。毕竟,许多人想写辅助软件,但无从下手,最终信心受挫,有了这些代码,至少也能激起他们学习的兴趣,更何况有利于QQ农场的进步呢!你觉得呢?嘿嘿——道高一尺,魔高一丈啊~!