手把手教你寫QQ聊天機器人之smartQQ登陸協議逆向

前邊的文章介紹了逆向、協議抓包、抓包工具的詳細使用方法等知識。需要了解的朋友點頭像去翻看下之前的文章。

smartQQ的前身是webqq,webqq大概是10年11時間騰訊推出的,當時webqq功能很全,支援帳號密碼登陸,登陸後會擠掉客戶端QQ。在13年14年的時候,騰訊下線webQQ,具體原因不詳,可能是webQQ的介面相對簡單透明,被很多第三方軟體利用並濫用QQ服務。後來由smartQQ替代、smartQQ和微信網頁版很像,登陸需要手機掃碼,不再支援帳號和密碼登陸。

本文會帶大家研究學習一下如何利用smartqq協議寫一個自己的QQ聊天機器人,以加深大家對逆向協議的理解。對這方面感興趣的朋友可以關注,哪裡寫的不對還請技術大神在評論區指出。

分析登陸流程:

首先開啟抓包軟體Fiddler,按照上一篇文章進行設定,準備抓包。

然後在瀏覽器開啟smartQQ(web2。qq。com)

手把手教你寫QQ聊天機器人之smartQQ登陸協議逆向

smartQQ

這裡首先簡單分析下登陸原理。網頁給出一個動態的二維碼,讓手機QQ去掃描。然後還有一個網路請求在不斷的監控你是否成功掃描了二維碼,如果成功,那麼直接轉到登陸成功的頁面。

登陸流程很簡單,我們要自己程式設計的話,首先要讓自己的程式也可以生成上圖這個二維碼。那麼我們去Fiddler裡看下,哪個包是生成二維碼的?

手把手教你寫QQ聊天機器人之smartQQ登陸協議逆向

手把手教你寫QQ聊天機器人之smartQQ登陸協議逆向

透過逐條檢視或者理解url包含的單詞字義,結合請求連結的響應內容,我們確定紅圈這個請求是生成二維碼的請求。

請求連結為:https://ssl。ptlogin2。qq。com/ptqrshow?appid=501004106&e=2&l=M&s=3&d=72&v=4&t=0。78603778152708&daid=164&pt_3rd_aid=0

我們要自己程式設計去模擬這個請求的話,我們需要搞清楚請求連結是什麼,請求方式是get還是post,請求頭包含什麼,請求連結裡各引數是否固定,如果不固定,演算法是什麼?

透過抓包我們找到這個請求是get,請求連結如上,透過對比多次請求的連結發現引數幾乎固定,只有t是一個隨機小數。然後看下請求頭

手把手教你寫QQ聊天機器人之smartQQ登陸協議逆向

發現攜帶了大量Cookie,所以我們要模擬這個請求,必須先搞清楚這些cookie 是哪個請求下發下來的,繼續在Fiddler裡尋找

手把手教你寫QQ聊天機器人之smartQQ登陸協議逆向

https://xui。ptlogin2。qq。com/cgi-bin/xlogin?daid=164&target=self&style=40&pt_disable_pwd=1&mibao_css=m_webqq&appid=501004106&enable_qlogin=0&no_verifyimg=1&s_url=http%3A%2F%2Fweb2。qq。com%2Fproxy。html&f_url=loginerroralert&strong_login=1&login_state=10&t=20131024001

我們找到上圖這個請求Set了很多Cookie,所以我們的程式要先去模擬這個請求,拿到Cookie後再去模擬生成二維碼的請求。

分析這個連結的各個引數,透過Fiddler的Composer模擬提交除錯,發現以上引數都可以固定,不需要特別去逆向每個引數的生成方式。請求頭也相對乾淨,不包含cookie,所以這個連結可以作為我們程式的一個初始化請求。

下面開始程式設計,實現以上2個請求,我呢工作中主要使用java和c#,下面的程式碼使用python,不甚熟悉,有錯誤的地方還請大神們指出。原始碼在文章末尾會給出下載連結

手把手教你寫QQ聊天機器人之smartQQ登陸協議逆向

手把手教你寫QQ聊天機器人之smartQQ登陸協議逆向

手把手教你寫QQ聊天機器人之smartQQ登陸協議逆向

手把手教你寫QQ聊天機器人之smartQQ登陸協議逆向

突然停電。沒辦法繼續寫監控是否登入成功和上傳原始碼,今天就先寫到這裡,明天會再發一篇接著寫完整個登入流程。覺著有用的童鞋請關注下。