当前位置:首页 > 叨叨念念 > QQ空间token参数加密计算g_tk、bkn

QQ空间token参数加密计算g_tk、bkn

叨叨念念 / 星之宇 / 2023-8-24 21:15 / 浏览:281 / 评论:0

QQ空间很多地方需要使用token作为url参数才能成功获取数据,那么如何计算token(g_tk、bkn)就成了必须要解决的问题。


1、查找token加密文件

浏览器访问QQ空间,并用开发者工具抓包数据,先通过token字符串全局搜索token可能出现在的文件或者js,然后通过详细查看获知getACSFToken函数是生成token的关键,并打开具体的js文件,interface_mini.js和qzfl_v8_2.1.65.js都有该加密算法。

466-1.png


2、分析加密机制

从该文件中找到了加密代码,那么改造成PHP代码就很简单了。以下是JS代码:

    QZONE.FrontPage.getACSRFToken = function(e) {
        var t;
        if ((e = QZFL.util.URI(e)) && (e.host && 0 < e.host.indexOf("qzone.qq.com") ? t = QZFL.cookie.get("p_skey") : e.host && 0 < e.host.indexOf("qq.com") && (t = QZFL.cookie.get("skey"))),
        !t)
            try {
                t = parent.QZFL.cookie.get("p_skey") || ""
            } catch (e) {
                t = QZFL.cookie.get("p_skey") || ""
            }
        for (var n = 5381, o = 0, i = (t = t || (QZFL.cookie.get("skey") || QZFL.cookie.get("rv2"))).length; o < i; ++o)
            n += (n << 5) + t.charAt(o).charCodeAt();
        return 2147483647 & n
    }


3、PHP重写加密机制

function getbkn($skey) {
    $n = 5381;
    $len = strlen($skey);
    for($i=0;$i<$len;$i++){
        $n += ($n<<5) + ord($skey[$i]);
    }
    return 2147483647 & $n;
}


PHP位运算说明

1、$a<<$b:Shift left(左移),表示将$a中的位向左移动$b次(每一次移动都表示“乘以2”)

2、$a&$b:And(按位与),表示 将把$a和$b中都为1的位设为1。

目前有 0 条评论

    • 昵称
    • 邮箱
    • 网址