1. 程式人生 > >【協議分析】PC QQ協議聊天內容破解

【協議分析】PC QQ協議聊天內容破解

背景
QQ,一個通訊工具,號稱擁有N億,現在註冊QQ已經是10位數了,如果QQ註冊的號碼是不斷遞增的話,那麼QQ應該已經被註冊了至少10億次。在中國,只要你是經常上網的網民,手中必須得有一個QQ號,當然你也可以沒有,但你的朋友、同學、親戚、同事全都有,大家都通過QQ進行溝通,你不用,要溝通多不方便啊。
作為一個通訊工具,必定涉及到網路通訊協議。由於騰訊基於QQ這個產品承載了很多業務,要將協議全部分析完全就需要相當大的工作量了,而且沒有這個必要。今天就拿QQ中最基本的聊天協議進行分析一下。
協議
QQ協議首選的傳輸層協議是UDP,如果UDP不可用,那麼會再嘗試使用TCP進行傳輸。UDP使用的埠是8000(0x1F40),TCP使用的埠是443(0x1BB)。
QQ協議中每個通訊包都有一個協議頭部,如圖:

使用結構體可以這樣表示:
typedef struct _QQ_DATA_HEAD
{
uchar ucFlag;
ushort usVer;
ushort usCmd;
ushort usSeq;
uint  uiSender;
} QQ_DATA_HEAD, *PQQ_DATA_HEAD;

在進行協議還原的時候,我們最關心的就是協議頭部的命令字,需要根據不同的命令字,來進行相應的處理,獲得金鑰解密聊天內容。
登入過程
這裡我們通過分析QQ金鑰交換過程來分析QQ的登入過程,這個過程很重要,最後得到的SessionKey將作為後面聊天記錄解密的金鑰。這裡只列出關鍵的項,這些命令在QQ2012 Beta3以前的版本中也存在,但命令編號和解密資料存放的位置都有很大變化:
命令字      含義
Login verify(0x2608)
C->S向伺服器傳送登陸請求,需要使用密碼進
行運算解密的報文中包含對第2步的解密金鑰。
Login verify reply(0x2608)
S->C伺服器返回的報文,使用第1步獲得的密
鑰進行解密,可以獲得解密第3步的金鑰。
Login session(0x2808)
S->C伺服器返回的報文,使用第2步獲得的密
鑰進行解密,可以獲得SessionKey,這個
SessionKey就是後面用來解密聊天記錄所使用
的金鑰。

Login verify(0x2608)
相當重要!獲取SessionKey首先得解密該報文。但是要解密該報文,必須先知道登入QQ使用者的密碼,而使用者密碼只有使用者自己知道(也許TX也知道),第三方一般情況下是不知道的。資料傳輸過程中使用的加密演算法是TEA演算法。
說到QQ密碼獲得,大概有這麼幾種方式:1、通過鍵盤記錄記錄使用者輸入(需要編寫驅動);2、使用dll注入,hook關鍵函式,截獲使用者輸入的密碼;3、獲得本地儲存的密碼hash,進行暴力破解(需要使用者記住密碼的情況)。這裡不多說了。
  LoginVerify報文經過兩次加密的:
LoginVerifyUdppacket = Key2 + Tea(Key2, Tea(Key1, PlainUdpPacket))
Key1 = MD5(MD5(Password)+QQ)
可以看出Key2是包含在包裡的,我們可以先使用Key2解密獲得報文1,再使用Key1解密獲得明碼的報文,明碼的報文中我們獲得了login_verify_key。這裡的Key1是QQ使用者密碼的QQ號碼經過兩次MD5獲得的。
Login verify reply(0x2608)
這個報文是傳送報文1後伺服器返回的報文,使用login_verify_key解密該報文,可以得到login_verify_reply_key。
Login session(0x2808)
這個報文是伺服器發回來的,2和3中間還有一些報文,都不是獲得SessionKey所必需的,不做說明了。使用login_verify_key可以解密這個報文,獲得session_key。

回想一下:要獲得session_key,密碼才是關鍵,有了密碼才能解密LoginVerify報文,然後解密後續的報文。其步驟為:
Password->verify_key->verify_replay_key->session_key。
聊天記錄解密
使用上面的session_key即可解出聊天記錄,具體不做說明了。
例項程式
根據上面登入過程編寫了一個例項程式,截幾個屏吧:


鄭重宣告:本程式編寫純屬個人對技術的愛好,絕不含惡意程式碼,請勿將本程式用於非法目的。
剛發現360會誤報,如需測試請先關閉殺軟。

相關推薦

協議分析PC QQ協議聊天內容破解

背景 QQ,一個通訊工具,號稱擁有N億,現在註冊QQ已經是10位數了,如果QQ註冊的號碼是不斷遞增的話,那麼QQ應該已經被註冊了至少10億次。在中國,只要你是經常上網的網民,手中必須得有一個QQ號,當然你也可以沒有,但你的朋友、同學、親戚、同事全都有,大家都通過QQ進行溝通,你不用,要溝通多不方便啊。 作為

協議分析HTTP響應頭中的2種編碼方式介紹

href intro feo 發送 文檔 bsp firefox cep 目前 HTTP 1.1中有兩個實體頭(Entity-Header)直接與編碼相關,分別為Content-Encoding和Transfer-Encoding。 先說Content-Encodin

網路協議-3TCP/UDP協議

TCP報頭格式: 一共20個位元組; 源、目標埠號欄位:各佔2個位元組,18位元。TCP協議通過使用”埠”來標識源端和目標端的應用程序。埠號可以使用0到65535之間的任何數字。在收到服務請求時,作業系統動態地為客戶端的應用程式分配埠號。在伺服器端,每種服務在"眾所周知"的埠”(

網路學習TCP/IP協議(1)

什麼是TCP/IP? 上帝創造了人類,雖然都是人但是語言不一樣,交流起來也是很不明白,當我們中國人與外國人交流的時候就需要一種共同的交流方式比如【漢語】,協議顧名思義則是商量謀劃而制定的規則 TCP\IP中文譯為傳輸控制協議\因特網互聯協議,TCP\IP不是一個

Inno Setup新增許可協議,並預設選中我同意按鈕

[Setup] ; xkfile.txt檔案不能為空 LicenseFile=C:\Documents and Settings\Administrator\桌面\smqh\xkfile.txt

親測關於HTTP協議~

如果有一點點基本的開發者工具基礎知識,我們知道:Elements是用來檢視網頁結構的,也就是可以看到整體的HTML語言;Console是控制檯,Network是請求想相應狀態。 1)一個Name就是一個介面,XHR一般這麼過濾。Header裡面的RequestURL就是前端呼叫後端的介面; 2)上圖中的i

Objective-COC中協議(Protocol)的基本概念和用法

協議(Protocol)的基本概念        協議的宣告看起來比較類似於Java中一個類的介面,但是和介面不同的是:協議沒有父類也不能定義例項變數。 協議是一種特殊的程式設計結構,用於宣告專

IP分析合並信號concat,拆分總線slice

信號 com images logs 合並 這一 -1 image mage 一般都是把幾個零散的中斷信號合並成bus,連到系統中斷總線上。 比如出個GPIO[31:0]來控制bram的幾個控制信號,分配如下: GPIO[24] - clk (可以直接指定[24]這

幹貨QQ群起家的情趣商城站長之路

網站今天分享我之前利用Q群做網站流量變現23萬的經歷。魚塘理論,各位都了解。有了自己的魚塘,你想什麽時候吃魚,你就可以抓,反正餓不死。就像這次微信血封發單號一樣,老是在別人的地盤抓“經濟建設”,確實太沒什麽安全感了!從電商專業畢業之後,對網站seo啥的基本玩法,也略有領教,算是入門。講真,大學裏的玩意確實脫節

CONTINUE...?構造/分析

def tails pro elong %s specific ber exce ace CONTINUE...? Time Limit: 1 Second Memory Limit: 65536 KB Special Judge DreamGrid h

取證分析Wannacry樣本取證特征與清除

english version class ros cpu占用率 .exe crypt 重要 解析 一、取證特征 1)網絡域名特征 http://www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com 2)文件特征 母體文件 ms

取證分析The Art of Memory Forensics-Windows取證(Virut樣本取證)

文件 explorer 父進程 所有 ddr png 筆記 特定 sni 1、前言 The Art of Memory Forensics真是一本很棒的書籍,其中使用volatility對內存進行分析的描述可以輔助我們對更高級類的木馬進行分析和取證,這裏對書中的命令進行了筆

取證分析Linux信息搜集

相關信息 查看系統 hist PC 系統用戶 啟動項順序 print 內核版本號 uname ## 1、取證工具 - LiME 內存獲取工具 - volatility 內存分析工具 ## 2、機器信息收集 #sysinfo 16 # # 查看當前登錄用戶 who

情感分析北航課題組 筆記二

樣本 數學運算 ica 存儲 wid seed sci 進階 space 主講:莊老師 數據處理利器—— Numpy 簡介   優點     運算快     封裝好   數據存儲     可存儲為一維數組、二維數組、多維數組    Numpy, Pandas, S

取證分析用linux命令xxd來獲取dump檔案資訊獲得flag

題目連結:https://blog.csdn.net/xiangshangbashaonian/article/details/82747394 拿到一道CTF題目  notepad++開啟如下所示 [email protected]:~/Desktop$ fi

移動開發關於一對一視訊聊天直播技術(七):直播雲 SDK 效能測試模

本篇是《一對一視訊直播技術詳解》系列的最後一篇直播雲 SDK 效能測試模型,SDK 的效能對最終 App 的影響非常大。SDK 版本迭代快速,每次釋出前都要進行系統的測試,測試要有比較一致的行為,要有效能模型作為理論基礎,對 SDK 的效能做量化評估。本文就是來探討影響 SDK 效能的指標並建立相應的效能模型

資料分析電商平臺數據分析

目錄 電商模式 年度重複購買率 轉化率 年均購買率 購物車大小 棄買率 客戶獲取成本 平均每位客戶營收 關鍵詞和搜尋詞 推薦接受率 病毒性 郵件列表點入率 線下線上相結合 運送時間 庫存可供率

Coinness分析BTC上行遇阻,短時上漲壓力較大

昨日收盤價在6400美元上方,還算是穩的,但在今早5、6點左右,短時內迅速下挫。目前BTC在6200上方徘徊,短時上漲受限。 昨天W還說BTC這輪反彈像小朋友騎車,騎一會就要回頭看一眼。現在就是正在回頭看,但僅僅是看看,路還是要向前看的。技術面來分析,BTC在早間的下挫只是暫時的。 從日線圖

有限元分析網格形狀和網格尺寸對結果的影響

本文研究了網格形狀和網格尺寸對計算結果的影響。 現研究一個矩形截面的杆件(如圖1.1),對其末端施加兩種等效的載荷:在末端面施加remote force 100N的力,如圖1.2所示。對杆件進行2種網格形狀劃分,分別是六面體網格和四面體網格,如圖1.3所示;另對其進行3種尺寸劃分,分

有限元分析force+moment組合和remote force的等效性

本文研究force +moment組合和remote force這兩種邊界條件(載荷)的等效性。由力的平移定理可知沿某點的力可轉化為力矩+力的合力。 現研究一個矩形截面的杆件(如圖1.1),對其末端施加兩種等效的載荷:在末端面施加remote force 為100N的力;在末端面施加