知识大全 QQ尾巴病毒的发送原理分析

Posted 消息

篇首语:敢说敢作敢为, 无怨无恨无悔。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 QQ尾巴病毒的发送原理分析相关的知识,希望对你有一定的参考价值。

QQ尾巴病毒的发送原理分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

近来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 <> do

begin

WndText:=GetWndText(hCurrentWindow);

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

begin

Result:=hCurrentWindow;

Exit;

end;

hCurrentWindow := GetWindow(hCurrentWindow GW_HWNDNEXT);

end;

Result:= ;

end;

  二 如何找到 发送 按钮窗口句柄

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

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

来获得 发送 按钮的句柄

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

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

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

来获得

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

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

// 获得窗口文本

function GetWndText(hWnd: HWND): String;

Var

Ret:LongInt;

mText:PChar;

Buf:Integer;

begin

Ret:=SendMessage(hWnd WM_GETTEXTLENGTH )+ ;

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 Buf);

finally

FreeMem(mText Length(Text));

end;

end;

  六 如果让 发送 按钮自动点击

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

SendMessage(btnWnd WM_LBUTTONDOWN MK_LBUTTON );

SendMessage(btnWnd WM_LBUTTONUP );

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

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

  八 全部源代码如下

unit Unit ;

interface

uses

Windows Messages SysUtils Variants Classes Graphics Controls Forms

Dialogs StdCtrls ExtCtrls;

type

TForm = class(TForm)

Timer : TTimer;

Button : TButton;

Edit : TEdit;

Label : TLabel;

Button : TButton;

procedure Timer Timer(Sender: TObject);

procedure Button Click(Sender: TObject);

procedure Button Click(Sender: TObject);

private

Private declarations

public

Public declarations

end;

var

Form : TForm ;

implementation

$R * dfm

// 获得窗口文本

function GetWndText(hWnd: HWND): String;

Var

Ret:LongInt;

mText:PChar;

Buf:Integer;

begin

Ret:=SendMessage(hWnd WM_GETTEXTLENGTH )+ ;

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 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 <> do

begin

WndText:=GetWndText(hCurrentWindow);

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

begin

Result:=hCurrentWindow;

Exit;

end;

hCurrentWindow := GetWindow(hCurrentWindow GW_HWNDNEXT);

end;

Result:= ;

end;

// 定时处理

procedure TimerProc;

var

qqWnd txtWnd btnWnd:HWND;

Msg:String;

begin

qqWnd:=GetQQWnd;

if qqWnd= then Exit;

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

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

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

Msg:=GetWndText(txtWnd);

Msg:=Msg+# +# + 欢迎光临绿荫网络// lvyin net ;

SetWndText(txtWnd Msg);

SendMessage(btnWnd WM_LBUTTONDOWN MK_LBUTTON );

SendMessage(btnWnd WM_LBUTTONUP );

end;

procedure TForm Timer Timer(Sender: TObject);

begin

TimerProc;

end;

procedure TForm Button Click(Sender: TObject);

begin

Timer Enabled :=not Timer Enabled;

if Timer Enabled then

Button Caption := 停 止

else

Button Caption := 开 始 ;

end;

procedure TForm Button Click(Sender: TObject);

begin

Timer Interval :=StrToInt(Edit Text);

end;

end

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

cha138/Article/program/Delphi/201311/8482

相关参考

知识大全 手机qq接受了电脑qq发送的病毒文件怎么办

手机qq接受了电脑qq发送的病毒文件怎么办如果发现手机已经感染病毒,应立即关机,死机了,则可取下电池,然后将SIM卡取出并插入另一型号的手机中(手机品牌最好不一样),将存于SIM卡中的可疑文件删除后,

知识大全 把病毒软件发送给qq好友后要怎样才能盗取他的qq号

把病毒软件发送给qq好友后要怎样才能盗取他的qq号你好:根据我国的法律法规,盗取别人的QQ也是违法的行为。你现在居然公开在这里问怎么盗取别人的QQ,也真有你的!就目前来说,应该不能盗龋尤其是绑定手机的

知识大全 QQ三国会员 邮件发送附件能发送三国币吗拜托各位大神

QQ三国会员邮件发送附件能发送三国币吗拜托各位大神  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!QQ

知识大全 qq中病毒了怎么办

qq中病毒了怎么办?系统总是乱发文件,要怎么处理?用360杀毒也没用哦!你好楼主,360杀毒启发式技术,拦截未知病毒。360杀毒具有领先的启发式分析技术,能第一时间拦截未知病毒。用360安全卫士扫描电

知识大全 qq中病毒了怎么办

qq中病毒了怎么办?系统总是乱发档案,要怎么处理?用360防毒也没用哦!你好楼主,360防毒启发式技术,拦截未知病毒。360防毒具有领先的启发式分析技术,能第一时间拦截未知病毒。用360安全卫士扫描电

知识大全 qq邮件发的附件能不能每天增补重新发送 怎么样编辑增补

qq邮件发的附件能不能每天增补重新发送怎么样编辑增补?给领导发的邮件附件每天要增加内容前面的QQ邮箱新增撤回邮件功能确实,忙中难免出错,有时候邮件没想清楚就发了,让人后悔不已。现在,QQ邮箱新推出了撤

知识大全 asp.net中利用ashx实现图片防盗链的原理分析

直接分析盗链原理看下面用watch截获的发送的数据GET/Imgashx?img=svn_workgifHTTP/Accept:*/*Referer:AcceptLanguage:zhcnUACPU:

简述点式信息发送设备的工作原理。

  根据点式信息发送设备的安装位置,使用相应的点式发送器。图中编码接点为进站或出站信号继电器接点和方向继电器接点,经编码接点可接通发送器EMBO中监控、转线、开、断等频率信号,经放大,通过电缆进入现场

简述点式信息发送设备的工作原理。

  根据点式信息发送设备的安装位置,使用相应的点式发送器。图中编码接点为进站或出站信号继电器接点和方向继电器接点,经编码接点可接通发送器EMBO中监控、转线、开、断等频率信号,经放大,通过电缆进入现场

简述开关量发送器基本原理

  开关量发送器的基本工作原理是:将被测参数的限定值转换为触点信号并按程序控制系统的要求给出规定电平(也可由程序控制装置的输入部分转换为规定电平),其电源通常由程序控制装置供给。  开关量发送器的检测