QQ空间的g_tk算法简述
相信写QQ空间游戏外挂、QQ空间自动发日志等程序的同学不会对这个g_tk感到陌生,要得到g_tk的值,我们需要先找到生成该值的算法。 使用Fiddler抓登录包,然后ctrl+f查找g_tk关键字,这时就会高亮出「/open/store/appcenter/common.js」这个js文件。 把这个js拿到 http://jsbeautifier.org/ 网站进行代码格式化,再去搜索g_tk关键字,就会发现生成函数是getToken,得到下方的代码:
V.util.getToken = function () {
var str = QZFL.cookie.get('skey') || '';
var hash = 5381;
for (var i = 0, len = str.length; i < len; ++i) {
hash += (hash << 5) + str.charCodeAt(i);
}
return hash & 0x7fffffff;
};
下面是我用AAuto重写的算法实现代码:
var getToken = function (param) {
var skey = #param ? param : "";
var token = 5381;
for(i=1 ; #skey ; 1){
token += (token<<5) + (skey[i])
}
return (token & 0x7fffffff);
};
最后吐个槽,现在使用AAuto写的代码都不发官方的论坛了,因为分享这些经验和回复帖子,我都被封不少于5次帐号了(用户名是「将军」),每次都是从头再来(尼马的以为每天都登录论坛,获取几个积分坚持下来容易么)。 就连上次报个疑似BUG(通过论坛最下方的正常途径反馈的),居然直接被管理员封号,原因竟然是留下的联系方式不是真实的,尼马我是报BUG的,让我提交电话号码、邮箱、真实住址、还有真名(就算快递我也只写到小区门口,名字写XX先生),不见管理员自己把他的信息公布出来?邮件和他说明问题,最后居然还污蔑我平时用小号在论坛唱黑,我有那个时间还不如睡个觉!擦! 虽然说,那个管理员写的开发工具不错,比较方便易用,但你的为人就真的不怎么样了。如果我报的问题不是BUG而是新设定,那你直接回复下并删除我提交的BUG单就好了,尼马居然回复的是我没填写真实联系信息,所以就顺手先封号了,不管其他问题。 最后说一下,如果有需要快速开发的同学可以试试AAuto,用来练手也不错,毕竟这工具开放了不少源码可以学习编程思路,但是官方论坛这个嘛,就只用来查查资料好了,千万不要乱分享乱回复,会被封号的。