g_tk

Qzone抓包时有个参数 g_tk ,分析JS后发现是根据 skey 生成的。

skey就是登陆cookies里面的一项

找到生成 g_tk 的JS函数如下:

function getGTK(str){
   var hash = 5381;
   for(var i = 0, len = str.length; i < len; ++i)
   {
   hash += (hash << 5) + str.charAt(i).charCodeAt();
   }
   return hash & 0x7fffffff;
}
  • PHP(>=7.2):
function getGTK($skey){
  $hash = 5381;
  for($i=0;$i<strlen($skey);++$i){
   $hash += ($hash << 5) + mb_ord($skey[$i]);
  }
  return $hash & 0x7fffffff;
}
  • PHP(<7.2):
function getGTK($skey){
  $hash = 5381;
  for($i=0;$i<strlen($skey);++$i){
   $hash += ($hash << 5) + utf8_ord($skey[$i]);
  }
  return $hash & 0x7fffffff;
}
function utf8_ord($c) {
  switch(strlen($c)) {
    case 1:
    return ord($c);
    case 2:
    $n = (ord($c[0]) & 0x3f) << 6;
    $n += ord($c[1]) & 0x3f;
    return $n;
    case 3:
    $n = (ord($c[0]) & 0x1f) << 12;
    $n += (ord($c[1]) & 0x3f) << 6;
    $n += ord($c[2]) & 0x3f;
    return $n;
    case 4:
    $n = (ord($c[0]) & 0x0f) << 18;
    $n += (ord($c[1]) & 0x3f) << 12;
    $n += (ord($c[2]) & 0x3f) << 6;
    $n += ord($c[3]) & 0x3f;
    return $n;
  }
}
  • Python:
def getGTK(skey):
   hash = 5381
   for i in skey:
       hash = hash + (hash << 5) + ord(i)
   return hash & 0x7fffffff

qzonetoken

window.g_qzonetoken = (function(){ try{return "252a5e6d261fff02b02d333d663f09f6f4e3701fd7c78618529d674e1d433401c5722ede";} catch(e) {var xhr = new XMLHttpRequest();xhr.withCredentials = true;xhr.open('post', '//h5.qzone.qq.com/log/post/error/qzonetoken', true);xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');xhr.send(e);}})();

提取出来发现似乎是个定值,多次尝试后发现每次登录的qzonetoken都不同,可能是后端生成的,所以建议登录后GET一下主页,然后用正则提取出来使用。这里提供一种正则。

/window.g_qzonetoken = \(function\(\)\{ try\{return "(.+?)";\}/

相关文章

  • Qzone模拟登录

最后修改:2019 年 10 月 01 日 09 : 41 AM
如果觉得我的文章对你有用,请随意赞赏