程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> “QQ尾巴”病毒是如何制作的VC

“QQ尾巴”病毒是如何制作的VC

編輯:vc教程

  2003這一年裡,QQ尾巴病毒可以算是風光了一陣子。它利用IE的郵件頭漏洞在QQ上瘋狂傳播。中毒者在給別人發信息時,病毒會自動在信息文本的後邊添上一句話,話的內容多種多樣,總之就是希望信息的接收者點擊這句話中的URL,成為下一個中毒者。下圖就是染毒後的QQ發送的消息,其中中毒者只打了“你好”兩個字,其它的就全是病毒的傑作了。 

  下面我將要討論的,就是QQ尾巴病毒使用的這一技術。由於病毒的源代碼無法獲得,所以以下的代碼全是我主觀臆斷所得,所幸的是效果基本與病毒本身一致。 

  注:考慮到安全方面的原因,本文某些地方用了*號來代替正確代碼。 

  粘貼尾巴 

  首先的一個最簡單的問題是如何添加文本。這一技術毫無秘密可言,就是通過剪貼板向QQ消息的那個RichEdit“貼”上一句話而已。代碼如下: 

TCHAR g_str[] = "歡迎來我的小站坐坐:http://titilima.nease.net"; 
// 函數功能:向文本框中粘貼尾巴 
void PasteText(HWND hRich) 

HGLOBAL hMem; 
LPTSTR pStr; 
// 分配內存空間 
hMem = GlobalAlloc(GHND   GMEM_SHARE, sizeof(g_str)); 
pStr = GlobalLock(hMem); 
lstrcpy(pStr, g_str); 
GlobalUnlock(hMem); 
OpenClipboard(NULL); 
EmptyClipboard(); 
// 設置剪貼板文本 
SetClipboardData(CF_TEXT, hMem); 
CloseClipboard(); 
// 釋放內存空間 
GlobalFree(hMem); 
// 粘貼文本 
***********(*****, **_*****,*,*); 
}  
  鉤子 

  好了,那麼下面的問題是,這段文本應該在什麼時候貼呢?網上有一些研究QQ尾巴實現的文章指出,可以用計時器來控制粘貼的時間,類似這個樣子: 

void CQQTailDlg::OnTimer(UINT nIDEvent) 

PasteText(hRich); 
}  

  這的確是一種解決的手段,然而它也存在著極大的局限性——計時器的間隔如何設置?也許中毒者正在打字,尾巴文本“唰”的出現了…… 

  然而病毒本身卻不是這樣子,它能夠准確地在你單擊“發送”或按下Ctrl+Enter鍵的時候將文本粘貼上。2003年1月份我的一台P2曾經中過毒,由於系統速度較慢,所以可以很清楚地看見文本粘貼的時機。 

  講到這裡,我所陳述的這些事實一定會讓身為讀者的你說:鉤子!——對,就是鉤子,下面我所說的正是用鉤子來真實地再現“QQ尾巴病毒”的這一技術。 

  首先我對鉤子做一個簡要的介紹,已經熟悉鉤子的朋友們可以跳過這一段。所謂Win32鉤子(hook)並不是鐵鉤船長那只人工再現的手臂,而是一段子程序,它可以用來監視、檢測系統中的特定消息,並完成一些特定的功能。打個比方來說,你的程序是皇帝,Windows系統充當各省的巡撫;至於鉤子,則可以算是皇上的一個欽差。譬如皇帝下旨在全國收稅,然後派了一個欽差找到山西巡撫說:“皇上有旨,山西除正常賦稅外,加收杏花村酒十壇。”(-_-#……)正如皇帝可以用這種方法來特殊對待特定的巡撫一樣,程序員也可以用鉤子來捕獲處理Windows系統中特定的消息。 

  • 首頁
  • 上一頁
  • 1
  • 2
  • 3
  • 4
  • 下一頁
  • 尾頁
  • 共4頁
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved