近日,受同学委托,写一个说说的扫码自动分享工具,虽然没有彻底完工,但是打算记录一下(为了方便,我全部选用了http协议,而非https协议,二者区别就在于http://网址 和https://ssl.网址)

首先是登录协议

获取二维码地址:

http://ptlogin2.qq.com/ptqrshow?pt_clientver=5449&pt_src=1&appid=501004106&e=0&l=M&s=5&d=72&v=4&t=0.1254632154789654

这个t参数是介于0到1之间的16位随机小数

然后有一个时钟,不断检测是否扫描成功或者验证码失效

http://ptlogin2.qq.com/ptqrlogin?pt_clientver=5449&pt_src=1&webqq_type=10&remember_uin=1&login2qq=1&aid=501004106&u1=http://w.qq.com/proxy.html?login2qq=1&webqq_type=10&ptredirect=0&ptlang=2052&daid=164&from_ui=1&pttype=1&dumy=&fp=loginerroralert&action=0-0-51134&mibao_css=m_webqq&t=undefined&g=1&js_type=0&js_ver=10139&login_sig=&pt_randsalt=0

返回一个数组性质的东西,失效了会有中文提示,成功了,在数组里会有一个连接,响应了该连接,才算是登录成功,但是这仅仅是第一次登陆成功,QQ奇葩的还有第二次登录

http://ptlogin4.web2.qq.com/check_sig?pttype=1&uin=203848230&service=ptqrlogin&nodirect=0&ptsigx=464ca09d641cb3e7ba1c7c589ef0ab9a6d62b981a21bfa2e304aced04681be7702ca9002da620a0fa11ac1f176ecfda194ef9cd0ff4729a969a09c5fefdf84e2&s_url=http%3A%2F%2Fw.qq.com%2Fproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&f_url=&ptlang=2052&ptredirect=100&aid=501004106&daid=164&j_later=0&low_login_hour=0&regmaster=0&pt_login_type=3&pt_aid=0&pt_aaid=523005419&pt_light=0&pt_3rd_aid=0

这个协议没有具体分析。

然后是一件分享协议

http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?
url=http://acg12.com/48902
&title=【搜狗输入法皮肤】高坂穗乃果搜狗输入法皮肤 by 伊卡洛斯 —— 来自 ACG调查小队
&desc=
&summary=
&site=
&pics=http://static.acg12.com/uploads/2015/10/20a5ed972ae1b763c5c33a6ebc53e783-320x200.jpg

这是一段分享链接,打开后会下显示

文章

url是被分享的连接地址title题目summary是介绍详情,可为空。pics是发布后显示说说的图片,默认是被分享说说的第一张。其他为空就行。

然后点击那个分享的连接的时候,会响应一个POST包,他响应成功就发布OK了

POST /cgi-bin/qzshare/cgi_qzshareadd_url?g_tk=734162982 HTTP/1.1
Host: sns.qzone.qq.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0
Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=http://acg12.com/48902&title=【搜狗输入法皮肤】高坂穗乃果搜狗输入法皮肤 by 伊卡洛斯 —— 来自 ACG调查小队&desc=&summary=&site=&pics=http://static.acg12.com/uploads/2015/10/20a5ed972ae1b763c5c33a6ebc53e783-320x200.jpg
Content-Length: 1266
Cookie: pgv_pvid=5829597632; pt2gguin=o0203848230; RK=uFsXgAg5PP; ptcz=5ab1a42c74e318c95fdcc210ea5ab65350cd005fe938007de08bff7c0df37d14; QZ_FE_WEBP_SUPPORT=0; ui=36F4BCB1-4AAA-4472-8386-B0E93E64EB3C; pgv_pvi=4564915200; cpu_performance_v8=1; o_cookie=203848230; __Q_w_s_hat_seed=1; __Q_w_s__QZN_TodoMsgCnt=1; ptui_loginuin=203848230; Loading=Yes; dc_vplaying=0; pgv_si=s9532953600; pt_clientip=a4817c80cb83e9cd; pt_serverip=0e590aab402c04ed; ptisp=cnc; uin=o0203848230; skey=@Sg0OTwP6T; p_uin=o0203848230; p_skey=0fQcVgv*FHHoEIpC4pPrD38VZ6AgozTOn9PV7alMHoQ_; pt4_token=vthVysXQR0lY5c6dlX5Aig__
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

where=0
&entryuin=203XXX230
&spaceuin=203XXX230
&title=【搜狗输入法皮肤】高坂穗乃果搜狗输入法皮肤 by 伊卡洛斯 —— 来自 ACG调查小队
&summary=高坂穗乃果是日本二次元偶像计划《LoveLive!》中主要人物之一,是音乃木阪学院校园偶像团体μ's的发起人兼leader。音乃木坂学院二年级生。因为得知了音乃木阪学院即将废校的事...
&token=5381
&sendparam=
&description=
&type=4
&url=http://acg12.com/48902
&site=
&to=
&share2weibo=0
&pics=http://static.acg12.com/uploads/2015/10/20a5ed972ae1b763c5c33a6ebc53e783-320x200.jpg
&fupdate=1
&notice=1=1

协议有好多参数,首先这个网址是http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshareadd_url?g_tk= 然后有一个g_tk 他和下面post的值token是一样的,具体计算方法下面我会讲到,先说一下POST的参数entryuin和spaceuin是一样的,也就是你登录的QQ号码,至于url和pIcs相同,其他照抄即可~

说一下这个token,他是取的Cookies里面的p_skey,然后进行移位、位与等实现的,算法是

getACSRFToken._DJB = function (str) {
var hash = 5381;
for (var i = 0, len = str.length; i < len; ++i) {
hash += (hash << 5) + str.charAt(i).charCodeAt();
}
return hash & 2147483647;
}

然后~为了方便大家,我转换成易语言算法,也方大家便理解

.版本 2

.子程序 _DJB, 文本型
.参数 str, 文本型
.局部变量 hash, 整数型
.局部变量 计次, 整数型

hash = 5381
.计次循环首 (取文本长度 (str), 计次)
    hash = hash + 左移 (hash, 5) + 到整数 (文本替换 (编码_Ansi到Unicode_文本型 (取文本中间 (str, 计次, 1)), 1, 2, ))
.计次循环尾 ()
' 输出调试文本 (到文本 (位与 (hash, 2147483647)))
返回 (到文本 (位与 (hash, 2147483647)))

这样计算出来,就是传说中的t_tk和token了~~

页面下部广告

发表评论

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

*

鲁ICP备17018668号-1