QQ坦白说好友分析

最近QQ推出了坦白说栏目,允许给一个人匿名发送一个印象,然后别人回复了你的话,你们两个就可以聊天了,并且他不知道你,你却知道他,和QQ空间秘密不一样的是,秘密是双方都是匿名的,并且只能通过留言的方式来聊天,而坦白说是一方匿名,可以即时聊天。

收到的消息如图所示

通过抓包,我们可以抓到这个是一个网址

https://ti.qq.com/honest-say/my-received.html

直接访问这个地址,会直接跳到手机QQ下载页面,因为没有cookie和UA

带上QQ空间的cookies,和手机的UA访问

可以看到这个网页列表了,在浏览器调试里面找到这段网址

https://ti.qq.com/cgi-node/honest-say/receive/mine?_client_version=0.0.7&_t=1523761349720&token=1592905018

这是一段json数据,里面有很多段坦白说数据,这个正式我们需要找的数据,可以看到里面有一段

fromEncodeUin:“*S1*7K4zNKnqoecl”

那么这个就是重头,好友的QQ

不过这个东西是一段不知道什么样的数据,如何解密呢?

我们可以让指定的好友给我们发送坦白说,通过对比后发现,这个是有规律的。前面的*S1*, 是固定的,每个QQ都会有这个数据,那么剩下的就好办了,多几个QQ就对比出来了。

使用java 哈希表来做这个最好了。

那么最终获取就告一段落了。

那我们直接访问这个https://ti.qq.com/cgi-node/honest-say/receive/mine?_client_version=0.0.7&_t=1523761349720&token=1592905018

不就能获取了吗,仔细研究一下知道了,里面有两个参数,一个是t,一般来说t都是代表time,应该是时间戳,通过寻找js代码查看

看得到,t的确是时间戳,token,是通过获取cookies里面的skey数据来计算的,其实看到这儿我就已经知道了,很明显,这个就是gtk数据了,使用下面的java数据即可计算

 public static String getQzoneGtk(String skey){
        int hash = 5381;
        for(int i = 0, len = skey.length(); i < len; ++i){
            hash += (hash << 5) + (int)(char)skey.charAt(i);
        }
        return (hash & 0x7fffffff)+"";
    }

两个都有了,就可以直接提交了获取数据了。但是,直接获取不会返回数据,而会返回一段json~~

{
"code":2333333,
"msg":"皮这一下你很开心么ヽ( ̄▽ ̄)?"
}

带上cookies访问即可获取数据了。

后续

我做成了一个安卓版本的成品,大家可以访问github下载

https://github.com/ghboke/tanbaishuo

暂无评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注