TA的每日心情 | 擦汗 3 天前 |
---|
签到天数: 2402 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序 : U, ^3 Y+ o( M" O. u2 ?- P9 G
, t( a1 P& i* M1 I; b& W关键字 VB,黑客 + [, u& g0 v6 F6 w) V
' o2 M+ f; e) D( P; r; F9 ]# J3 r0 w C! J, s
: \; \$ [& o; _* a4 f3 k
用VB学做“黑客”程序1 V! Y4 Y- R# X( H* R& f6 }% q
9 v$ ~. K/ o" U. d; ^
X# j6 r$ j+ z* C7 D: c4 M/ v
( R4 \# J! P' A9 y9 A5 A 只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
( w# x1 J7 s) ~/ T4 {. z9 Z5 O1 e* t. v
一、所用控件
5 V; N1 Y- w+ L) m# ]
, x3 P. }' @% `0 V! X 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
0 W" E% h- N1 {* |; c4 d$ M" `( M8 F议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
# q6 ^' U, _, B( G) Y4 T. k
% x7 {) ?9 d" {3 \% _1 [; ] 二、编写客户端程序8 l3 N9 _" k% k; ^0 z; ^0 f9 e
& G& K4 Z6 H6 I$ f9 t 首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:; m; [+ Q3 {; x- \! v: p
0 U8 w8 x1 j% ]+ z private sub cd1_click()
# b$ C% F8 w4 X8 W. o p9 [# t
* H# h/ P( ~# i: ~+ Y# o+ D tcpclient.romotehost=text1.text( t$ b: V* f( o0 N$ n0 Z
6 `/ ^ h7 p4 Q9 \8 g$ a4 s- u
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001) I1 `7 m8 g0 ]/ k% M
1 R( g7 ]2 ?& K* ^
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接* M) n/ R8 h5 N8 A" C) B
, x* K& |. ^- C( c2 M' E cd1.enabled=false
p/ q' T) D+ t1 L7 _: d2 ]: i( a% q6 C+ v, e* h* K' I; L
end sub& q z5 ^6 J7 z- ]4 U
" C. W! i" ~0 ~+ U9 ?
连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
( V6 [5 E. V9 \/ D, o, o
8 p$ P* Z T8 \9 E! m+ v private sub tcpclient_dataarrival(byval bytestotal as long)9 L$ i- ~" r6 y
& ^6 B/ @8 G5 W: s" W! F dim x as string
# {5 D, D- F* i* {1 o$ Q1 A; V+ X
' K5 x$ r" @: a- R( O$ _ tcpclient.getdata x '使用getdata获得发送来的数据' X. R9 x* u2 G3 D6 }( S% M
0 d8 `0 G: w8 Z+ N. l
.......4 T2 n% Q, K! r. |2 x% M; p+ R
- [6 u5 `9 z1 ~1 Y$ I7 p End sub
* h0 q2 t8 e, s/ ` G
6 h3 F1 i) p9 p" z 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。! r7 |& \3 P9 C5 j4 h6 n
8 v' ]9 h0 F9 N: B8 x0 e
三、编写服务器端程序; W2 ^0 V% _9 ~
; F% i8 t6 ~" Q3 j4 z: B 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。& x* N G, R1 V; R g
; M- A' a& Z. y 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:$ c# f. @3 S% p. a
/ A1 w+ H* [) S% y4 X/ C& v
'在窗体的load事件中对tcpserver控件进行初始化
7 G7 t: c( q3 l* x6 A2 x8 R# G* h, Q" A
private sub form_load()
" |- S( @2 @! u& n' K2 y) r0 S2 x% O8 V% U8 j' G& M/ S
tcpserver.localport=1001
6 ~# D& K- Z0 C% k, N* R3 M! B0 r4 d% I6 c0 J+ p, M
tcpserver.listen '把服务器置于监听检测状态
- |0 q- i' c s3 P+ R0 s
5 P( D) y% e7 E6 n5 V end sub
" D4 T. O$ Q k5 _. K$ N, h9 a4 ]6 H2 D8 M1 p7 x
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态
6 J9 Z; ? Y, y6 t2 G! o
9 N$ L9 @( a7 i Private sub tcpclient_connectionrequest(Byval requestID as long)* q3 W' b7 B) U0 f# T
' D/ R. |4 m V5 q
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭6 ~9 }" {( j4 g) q$ f* H
! _9 o0 H' J4 `% B
Tcpserver.close '+ M! ]. F* I. ~9 I. u# D/ z7 ~. c
+ _' m2 a8 B* B% U, O0 z
Tcpserver.accept requestID '6 B: N5 \9 Z s9 b1 E8 }' Q
, R& k8 n0 ] r7 X2 J1 b End if
% p3 B; {0 B% J6 T: {) B
/ ^3 ]; R7 u: k, h6 T0 _ End sub
0 Y F& n3 L7 U0 U$ k5 I; {! @! ]9 W% K+ s
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
* s7 W" v0 G8 M5 a
( D$ i v8 P/ {0 \$ H0 O/ O/ U/ M 四、测试远程控制程序
, j; x9 e+ w5 i6 r% X6 k3 A0 _# I
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
7 I3 k" U, Y) D |
|