?

免費教程_免費網賺教程_破解版軟件-寂涯網絡學習基地

當前位置: 主頁 > 系統綜合 > qq相關 > qqspy逆向實現 QQ 聊天監控

qqspy逆向實現 QQ 聊天監控

時間:2011-11-19 11:02來源:未知 整理:寂涯網絡 點擊:

 QQ 自從 2009 開始,在窗口上做了很多手腳,使得許多聊天監控軟件都失效了。主要是
以前那些聊天監控軟件使用的是窗口消息,偏偏 QQ 的窗口是畫上去的,以前的注入窗口然
后調用 GetWindowText的辦法壓根就不行了。不過后來大家為了解決這個問題,就采用了一
些很通用但是效果不大好的手法。比如說我在網吧看到一種辦法,就是每隔一段時間,對
QQ 聊天窗口模擬按鍵,應該是采用的“全選、復制、粘貼(到某處)”的辦法,但是這個實
在是太影響“用戶體驗”了,而且明顯就能看出來。當然還有一種就是網上一些小軟件,采
用“拍照”的方式,其實就是截圖,這個效果也好不了多少,CPU 占用高不說,使用者體驗
也不好。不過這些都是無奈之舉,直到后來有款流傳的QQSpy出來。
 QQSpy 采用的明顯就技術得多了,主要是利用的 QQ 庫里面的函數,從 QQSpy 的經驗可
以學到,以后分析 QQ 函數應該“特別關注”KernelUnit.dll 和 AppUnit.dll,這兩個庫里
面有許多豐富的函數,有的從名字就能看出個大概。QQSpy 的指明了方向:SaveMsg
(Util::Msg::SaveMsg)。
SaveMsg 這個函數就是記錄聊天信息的函數。例如我們和別人聊天,還是別人和我聊天,
都會通過這個函數。群里面的聊天函數名字也是它,不過是一個重載版本。QQSpy的辦法就
是采用的 HOOK SaveMsg函數,從SaveMsg函數中讀到聊天內容,對方以及己方的QQ號,然
后通過一些輔助函數的處理。這里的輔助函數其實也是來自于QQ提供的庫。
我們先來看看QQSpy最重要的實現函數,SaveMsg的 HOOK:
  

BOOL  __cdecl NewSaveMsg_1(LPCWSTR lpStr, 
         DWORD dTo_Num, 
         DWORD dFrom_Num, 
         DWORD data3, 
         struct ITXMsgPack * TXMsgPack, 
         struct ITXData* TXData )
{
 long lSelfQQNum = TrueGetSelfUin();
 //調試打印輸出,時間
 time_t Time;
  struct tm *local;
 WCHAR wszStringTime[20] = {0};

 Time = (time_t)TrueGetMsgTime(TXMsgPack);
local = localtime(&Time);
 swprintf(wszStringTime,L"%0.2d:%0.2d:%0.2d",
local->tm_hour,local->tm_min,local->tm_sec);
LPWSTR lpName1 = NULL,lpName2 = NULL;
 if (TrueGetPublicName)
 {
  TrueGetPublicName(&lpName1, dFrom_Num);
  TrueGetPublicName(&lpName2, dTo_Num);
 }
 WCHAR wszStringBuffer[MAX_PATH] = {0};
 //發消息人是自己
  if(lSelfQQNum == dFrom_Num)
 {
 
 swprintf(wszStringBuffer,L"%ws(%d) %ws",lpName1,dFrom_Num,wszStringTime
);

 
 
  OutputDebugStringW(wszStringBuffer);
 }
 //發消息人不是自己
 if(lSelfQQNum != dFrom_Num && dTo_Num == lSelfQQNum)
 {
 
 swprintf(wszStringBuffer,L"%ws(%d) %ws",lpName1,dFrom_Num,wszStringTime
);
  OutputDebugStringW(wszStringBuffer);
 }
 CString strBuffer;
 LPWSTR *lpBuffer =(LPWSTR
*)TrueGetMsgAbstract(strBuffer.GetBufferSetLength(4096), TXMsgPack);
 //調試打印輸出,內容
 OutputDebugStringW(*lpBuffer);
  return OldSaveMsg_1(lpStr, dTo_Num, dFrom_Num, data3, TXMsgPack, TXData);
}
 我并沒有完全按照原版的還原,至少信息是用調試信息打印的,所以要看需要調用
DebugView。這里面幾個函數說明一下:
(1)  函數GetPublicName就是通過傳入的QQ號,可以顯示出昵稱。
(2)  函數 GetMsgTime 就是獲得聊天時間的,QQ 聊天的時間不是本地讀的,是服務器傳
的,最好的證明就是你把本地時間改了也不會對聊天時間有什么影響。
(3)  主要函數 GetMsgAbstract,就是將 TXMsgPack 類的數據轉為 WCHAR,這個函數完全
參考的 QQSpy 寫的。
然后,我將該函數HOOK之后,與某人聊天,情況如下圖 1所示:
  

  效果至少比網吧的那個潛在的聊天監控“體驗起來”還是好多了。另外,這個方法,即

本頁地址 http://www.ionrce.tw/qqxiangguan/20111119633.html

百度搜索更多

谷歌搜索更多

頂一下
(0)
0%
踩一下
(2)
100%
------分隔線----------------------------
?
評價:
昵稱: 驗證碼:點擊我更換圖片
推薦內容
贊助商
贊助商
?

關于本站免責聲明視頻更新google百度地圖視頻地圖RRS訂閱

如有什么問題請在本站留言,或發郵件到 hxt167#foxmail.com

内蒙古十一选五基本走势图手机版