在上一课中 易语言+HttpWatch分析并编写DZX1.51论坛管理器第九课——首次进入开心农场篇(三) 重点说了要获取 farmKey 那就应该看关键的链接“http://kxnc.manyou.yeswan.com/images/v3_3” 因新截取的 HttpWatch 通信数据较以前又有所变化,此链接需更正为“ http://happyfarm.manyou.yeswan.com/images/v3_3” 先把这数据上传给大家以便参考:
顺便发个截图,这样更容易看数据:
我们要获取开心农场的数据关键链接就是:
http://happyfarm.manyou.yeswan.com/api.php?mod=user&act=run&farmKey=56f91388226b614138030c6bcd0de45a&farmTime=1413683645&inuId=
而在上面的链接中 farmKey 和 farmTime 在前面所截取的 HttpWatch 通信数据中没搜索到,那就应该分析 js 或 Flash(或swf) 文件,而出现过的 my_iframe.js 中没有找到和他们相关的数据,于是就重点分析 swf 文件 。从http://happyfarm.manyou.yeswan.com/images/v3_3_1/happyfarm.swf?v=hf50
开始所出现过的Flash文件名分别为:happyfarm.swf、loading.swf、newSign.swf、commonualUI.swf、maininterface.swf、matterandcursor.swf、newUI2.swf、defaultbg.swf、Main.swf 和 Farm.swf。如果您是新手的话建议全部下载到本地进行分析,如果您稍有点经验的话通常可直接下载 happyfarm.swf、Main.swf 和 Farm.swf 来分析我们要的数据。下载到本地后用 闪客精灵 或其它Flash分析工具来分析,运行 闪客精灵 后把其中一个Flash文件加载进来,如果在“导出”窗口中出现“动作”那说明内部有相关 AS 代码可参考,否则就不用看了,断定为资源文件(图片或动画或声音)。如图所示:
接着在“搜索”框中输入我们要搜索的内容 farmKey 并单击“搜索所有AS文件”,如图
如果能搜索到那么在“标签信息”会出现搜索结果,如果不能搜索到那就不用再分析当前Flash文件了
上面几步是给新手看的,大鸟就略过了……
在上面的搜索结果中不难发现Flash文件中的重要代码:
不难看出上面的关键几句代码:
[Actionscript3] 纯文本查看 复制代码 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);
lastTime = getTimer();
removeEventListener(Event.ENTER_FRAME, timing);
addEventListener(Event.ENTER_FRAME, timing);
HTTPRequest.getInstance().postRequest(url, value, function (param1:Object) : void
{
var _data:Object;
var loadStr:String;
var data:* = param1;
try
{
loadStr = dataToString(data);
if (/^[\{\[].*""^[\{\[].*/.test(loadStr) == false)
{
loadStr = "{\"errorType\":\"PHPError\",\"errorContent\":\"" + loadStr + "\"}";
}
_data = JSON.decode(loadStr);
}
catch (e:Error)
{
trace("FRequest: " + e);
}
if (_data.hasOwnProperty("errorType") && _data["errorType"] == "session")
{
MData.getInstance().mainData.sessionTimeout = _data["errorContent"];
}
else if (_data.hasOwnProperty("errorType") && _data["errorType"] == "antilose")
{
MData.getInstance().mainData.recoverMoment = _data["recoverMoment"];
WControl.open(new Obsession3hrWindow());
}
handlerFun(_data);
return;
}// end function
, timeout, reload, dataFormat);
return;
}// end function
farmKey 是_timeValue + SecurityKey.encodeKey 通过 MD5.hash 加密所得
farmTime 是_timeValue 通过 MData.getInstance().mainData.serverTime 所得,这里是获取服务器时间,这里就不难了
重点看下farmKey 如何计算的:
var _timeValue:* = MData.getInstance().mainData.serverTime;
var farmKey:* = MD5.hash(_timeValue + SecurityKey.encodeKey); 第一、先取得服务器当前时间;
第二、时间值再加上 SecurityKey.encodeKey (注:在当前Flash文件中没搜索到相关数据,初步估计是调用Flash文件时所传递的参数值);
第三、调用MD5中的hash加密。
同样在 闪客精灵 中搜索hash,找到 hash 的相关代码如下:
现在我们已经知道 farmKey 和 farmTime 的计算,那就用编程实现就可以,另外上面是在 Farm.swf 里分析出来的,也可以在Main.swf里分析得到同样的计算。
本次课另外还引用了Flash技术实现了开心农场展示,主要是以便以后在自动操作时可以看到农场的动作情况,如图所示:
本课就到这,接下来就是编写代码了……
|