天天看點

漫談WebQQ 協定

閱讀目錄       

1,WEBQQ的登陸協定

2,傳說中的心跳包

3,獲得群,好友,

4實戰(盜号-外挂-廣告)

要說怎麼突然研究起WEBQQ,也是比較偶然的機會,因為前一份工作專注于B2C商城的開發,

經常,自己寫點工具,模拟一個HTTP請求來進行秒殺之類的,然後聯想到QQ的農場,牧場

有很多輔助的小工具,自己開始研究WEBQQ,時間大概是2個雙休,4天.

1,WEBQQ登陸協定

工具:火狐+firebug

1, 進入WEBQQ, 

http://web.qq.com/

,

通過工具分析,可以知道,通過WEB登陸,會首先GET一個請求過去

http://check.ptlogin2.qq.com/check?uin=236773862&appid=1003903&r=0.14233942252344134

,我們隻詳細分析下這一個請求,看看,這個請求到底攜帶了什麼樣的資料

請求頭部這些内容,就是等會,模拟HTTP送出需要的,

這個GET請求傳回ptui_checkVC('0','!W61','\x00\x00\x00\x00\x9b\x8f\xdb\xab');這樣的字元串,其中第一個字元串,’0’代表不需要驗證碼,’!w61’這個資料,是等會登陸需要的,

第3個參數沒用,

我輸入密碼登陸,監控到這樣一個請求

http://ptlogin2.qq.com/login?u=236773862&p=C678AF49F29847C34BA8165EDE59C5A7&verifycode=quhw&webqq_type=10&remember_uin=1&login2qq=1&aid=1003903&u1=http%3A%2F%2Fweb.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&h=1&ptredirect=0&ptlang=2052&from_ui=1&pttype=1&dumy=&fp=loginerroralert&action=8-38-447467&mibao_css=m_webqq&t=3&g=1

這個不用多說了,接着用C#進行模拟就行了,其中厘清哪些是不變的就行了

String loginUrl = "http://ptlogin2.qq.com/login?u=" + qq + "&p=" + md5pass + "&verifycode=" + verifyCode + "&webqq_type=10&remember_uin=1&login2qq=0&aid=1003903&u1=http%3A%2F%2Fweb2.qq.com%2Floginproxy.html%3Flogin2qq%3D1%26webqq_type%3D10&h=1&ptredirect=0&ptlang=2052&from_ui=1&pttype=1&dumy=&fp=loginerroralert&action=6-25-303994&mibao_css=m_webqq&t=1&g=1";

不用多說了吧, md5pass這個是密碼加密後的一個參數

加密的方式,就是QQ号,密碼的明文,還有就是驗證碼,如果沒有驗證碼就是,’!w61’這個參數,至于如何加密的,其實也非常簡單,騰訊的加密肯定在用戶端加密然後傳輸的,找到相應的JS檔案,然後改寫成C#版本就行了,至于第三個參數,就是驗證碼或者是’!w61’了,

ptuiCB('0','0','http://web2.qq.com/loginproxy.html?login2qq=1&webqq_type=10','0','登入成功!', 'Zr');

登陸成功後,傳回這樣的一個格式,一旦登陸成功,我就可以拿到COOKie了

有了COOKIE,可以取出PTWEBQQ,和Skey,因為接着還會有一個POST包過去

http://d.web2.qq.com/channel/login2

其中這個POST請求需要PTWEBQQ,我們構造一下,POST過去

String postData = String.Format("r=%7B%22status%22%3A%22online%22%2C%22ptwebqq%22%3A%22{0}%22%2C%22passwd_sig%22%3A%22%22%2C%22clientid%22%3A%22{1}%22%2C%22psessionid%22%3Anull%7D&clientid={2}&psessionid=null", this.ptwebqq, this.clientid, this.clientid);

                String login3 = QQ.getHtml(channelLoginUrl, "post", postData);

其中clientid是個随機數,自己定義就行了,那麼到此,登陸就完成了,我們看一下界面

1,心跳包

顧名思義,心跳包,就是維持一個長連接配接,讓WEBQQ保持線上的一種機制,.這個心跳包非常簡單

http://d.web2.qq.com/channel/poll2

隻需要每隔幾秒,或者寫一個死循環也可以,,

這個位址POST

這樣一段資料,就可以了,其中必要的參數,在登陸的時候可以全部拿到,這裡值得一說的是,當POST這個資料過去後,伺服器會等大概30秒左右的時間,如果30秒,QQ沒有收到任何資訊,那麼它會自動傳回,如果有資訊會攜帶資訊傳回

實際上,這個心跳包弄清楚後,後面基本就沒難度了,自己完全可以寫一個簡單的QQ,,難道這就是所謂的長連接配接??

1,獲得群和好友

      獲得群和好友,然後模拟HTTP請求,就可以聊天了。。。這裡簡單的說

對這個位址POST,然後會傳回一個JSON,自己解析吧,後面已經沒有技術含量了,體力活了

1,實戰

我記得騰訊有很多遊戲。。。同樣的方法,先寫個簡單的3366外挂,其實很簡單,就是一個get請求過去,分數什麼的自己寫吧,,把外挂上傳,其實盜個什麼QQ号的,沒一點技術含量,,

自己嘗試了下,。。。在比如說

等等吧,盜來的QQ号,有什麼用??呵呵,我個人都是拿來上傳我的外挂,然後盜更多的号,其實研究WEBQQ或者PCQQ協定的人,都是為了打廣告,我至今難于忘記,那個賣鐵觀音茶的廣告,幾乎每個人的群裡都會有這麼一個廣告。。,不光是QQ.新浪微網誌刷粉也可以這樣搞,本人精力有限,連寫這篇文章,都是趕出來的,有興趣的同僚,可以找我要源碼,或者一起研究都可以

BY 

gitdnn