腾讯QQ空间g_tk算法
在百度搜索g_tk,只得到幾個可憐而且不完整的答案,因此,我首次在源始時代公開一下QQ空間的g_tk算法。其實g_tk只是QQ空間對日志進行操作的時候,所采取的一套安全機制,如果g_tk字符串的值不對的話,請求是沒有辦法提交的,因此,很多剛剛涉及HTTP協議技術的人想對QQ空間這尊大佛動手腳的話,只能望而卻步。下面我以VB為例,在這里詳解一下g_tk的計算方法。
其實g_tk校驗是通過skey值來算出來的,弄過QQ登錄的人可能都知道,在登錄成功之后,cookies里都會返回skey值,通常是以@開頭,并且帶有一串看似無規則的大小寫字母混合,總共10位。下面我們先來抓包看看,g_tk到底用在了哪里,我們以轉載日志為例來抓包,上圖:
完整數據包內容如下:
POST /cgi-bin/blognew/blog_quote HTTP/1.1Accept: */*Accept-Language: zh-cnReferer: http://b.qzone.qq.com/proxy.htmlIf-Modified-Since: 0Content-Type: application/x-www-form-urlencodedAccept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Tablet PC 2.0)Host: b.qzone.qq.comContent-Length: 65Connection: Keep-AliveCache-Control: no-cacheCookie: pt2gguin=o0138001655; ptcz=0b25a27219dd08bcfe38fc85365593dadb1a2a99cac9f1abfd5fb31a7052f89b; pvid=6724688319; flv=10.0; adid=138001655; adSP=GHTsOtSHTIJdDIr9+GXVoaFY59pet/LONpbU1rA0yPY=_837_326830_1290874683_; adVer=3121; ac=1,030,006; ptui_qstatus=2; uin=o0138001655; skey=@sZmfEEBdt; ptisp=ctc; ssid=s8226120880; login_time=B46BD5B3A93F9EC5226847DB4AE9A71589641475FCCEBBC9; __Q_w_s__appDataSeed=1; randomSeed=220115
uin=138001655&fromuin=715746717&blogid=1286714133&g_tk=1423927145
我們可以看到,數據包主體部分最后一個參數就是g_tk值,一般是一串數字。那這個值到底怎么算出來的呢?
因為我們在網頁登錄QQ的時候,騰訊都會通過cookies里的skey值來計算,用js來算。既然在運算的時候執行了js腳本,那么我們就可以在抓包中獲得。那g_tk是通過什么算法算出來的?其實很簡單,當我們得到skey后,循環取單字符的二進制并取左值.累加之后就得到后面的g_tk值了,這聽上去很復雜,不過算法不用我們自己寫,我們只需要執行在騰訊網頁登錄的時候所執行的那個js腳本就可以了。當然,js不能直接調用,不過既然我寫了這篇文章,就已經是有備而來的,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;
}
那么我們現在還有兩個問題沒有解決:
1.如何獲取登錄后的cookies?
2.如何在VB中執行js代碼并得到返回值?
上面兩個問題其實到了你們手里,我相信也不會是問題了,下面我再通過代碼以及講解,來剖析并解決這兩個所謂的問題。對于HTTP數據包POST/GET,相信看這篇文章的人應該都懂得吧,否則你看了也沒用,那么我們可以設計一個登錄程序,并在登錄之后獲取cookies中的skey值,并計算出g_tk。下面設計個登錄界面:
以下是源碼,請移步到原帖地址(帶源碼下載):
http://www.codeages.com/forum.php?mod=viewthread&tid=43004&extra=page%3D1
作者:水木
出處:http://www.hechunbo.com/
總結
以上是生活随笔為你收集整理的腾讯QQ空间g_tk算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AngularJS 详解Directiv
- 下一篇: 「雕爷学编程」Arduino动手做(32