QQ尾巴病毒的Visual C++实现探讨

分类: 电脑病毒   出处:iocblog整理  更新时间:2008-10-05   添加到收藏  

        自2003起,qq尾巴病毒可以算是风光了一阵子。它利用ie的邮件头漏洞在qq上疯狂传播。中毒者在给别人发信息时,病毒会自动在信息文本的后边添上一句话,话的内容多种多样,总之就是希望信息的接收者点击这句话中的url,成为下一个中毒者。

  下面我将要讨论的,就是qq尾巴病毒使用的这一技术。由于病毒的源代码无法获得,所以以下的代码全是我主观臆断所得,所幸的是效果基本与病毒本身一致。

  粘贴尾巴
(文章来源 www.iocblog.net)
  首先的一个最简单的问题是如何添加文本。这一技术毫无秘密可言,就是通过剪贴板向qq消息的那个richedit“贴”上一句话而已。代码如下:

tchar g_str[] = "欢迎来我的小站坐坐:http://dev.yesky.com";
// 函数功能:向文本框中粘贴尾巴
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);
 // 粘贴文本
 sendmessage(hrich, wm_paste, 0, 0);
}

  钩子

  好了,那么下面的问题是,这段文本应该在什么时候贴呢?网上有一些研究qq尾巴实现的文章指出,可以用计时器来控制粘贴的时间,类似这个样子:

void cqqtaildlg::ontimer(uint nidevent)
{
pastetext(hrich);
}

  这的确是一种解决的手段,然而它也存在着极大的局限性――计时器的间隔如何设置?也许中毒者正在打字,尾巴文本“唰”的出现了……

  然而病毒本身却不是这样子,它能够准确地在你单击“发送”或按下ctrl+enter键的时候将文本粘贴上。2003年1月份我的一台p2曾经中过毒,由于系统速度较慢,所以可以很清楚地看见文本粘贴的时机。

  讲到这里,我所陈述的这些事实一定会让身为读者的你说:钩子!――对,就是钩子,下面我所说的正是用钩子来真实地再现“qq尾巴病毒”的这一技术。

  首先我对钩子做一个简要的介绍,已经熟悉钩子的朋友们可以跳过这一段。所谓win32钩子(hook)并不是铁钩船长那只人工再现的手臂,而是一段子程序,它可以用来监视、检测系统中的特定消息,并完成一些特定的功能。打个比方来说,你的程序是皇帝,windows系统充当各省的巡抚;至于钩子,则可以算是皇上的一个钦差。譬如皇帝下旨在全国收税,然后派了一个钦差找到山西巡抚说:“皇上有旨,山西除正常赋税外,加收杏花村酒十坛。”(-_-#……)正如皇帝可以用这种方法来特殊对待特定的巡抚一样,程序员也可以用钩子来捕获处理windows系统中特定的消息。

[1] [2] [3] 下一页