QQ空间的g_tk算法简述

JAVASCRIPTAAUTO2014-04-15 23:39

相信写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,用来练手也不错,毕竟这工具开放了不少源码可以学习编程思路,但是官方论坛这个嘛,就只用来查查资料好了,千万不要乱分享乱回复,会被封号的。


原文链接: http://blog.jtwo.me/g_tk-algorithm-of-qzone