TA的每日心情 | 擦汗 5 小时前 |
---|
签到天数: 2402 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序 ) d6 `% j+ ~+ l
6 H! A6 L) T5 {1 k" v8 A; x关键字 VB,黑客
! k* X3 I. t R3 b6 ]: {9 R
* [8 B7 q$ X* O2 C3 ]1 y& _; N7 f+ l2 @, k5 X
5 d' w) t; \& q$ _( k
用VB学做“黑客”程序
' G: d) E V% c |( x8 a
7 z+ ~" }) i& f, v
& e: _1 ?9 e$ i! P
9 [) F+ B/ f0 \) e 只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
; S! I+ N' ]4 P! |, Y! S( l7 k& V3 ]! w
一、所用控件3 y8 v* |+ H( p$ t
* ^$ G% |8 h% g) J2 t
在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协" C# U: W+ z- Z+ q# h- Y
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。" T W4 ]/ `2 T+ X* J( P
8 U! m) S" C! A9 c2 J* _
二、编写客户端程序
# z* `, r1 P8 _7 b/ Y2 `" m0 p- w) N1 ^: X/ h' L
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
6 y7 P. t f% u' y7 H4 ^7 ^# _' S R. O @* W: H
private sub cd1_click()8 y3 f" m3 D- b, [8 J
. ~) \, B+ B7 B$ M tcpclient.romotehost=text1.text, t+ k$ Z5 o9 B; o% R
7 ~/ w l/ A6 N8 u8 W# v" u tcpclient.romoteport=val(text2.text)'端口号,缺省为1001& q8 A+ z9 Y7 K W' E
7 \ C* z+ `2 ] tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
% |) q1 q1 X' p# ~, d( t9 D+ I
# L) o! D4 [% n5 R, p cd1.enabled=false
$ ]: W# b& I" n; x4 @% W/ D' [ ^& W# `) H
end sub
; g& u7 h$ W. D3 m; Z
& w. I# m# V" n% \ 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
1 \/ t) h$ w- V0 B- `/ F* U% e: f( M% j/ [/ X# o
private sub tcpclient_dataarrival(byval bytestotal as long)
, c, H1 W" e, X
: D2 [7 @( z4 I h' N4 Q: F dim x as string9 l. u! R H- L
3 ^/ V4 E" J0 ~& y. K0 e/ S tcpclient.getdata x '使用getdata获得发送来的数据 r" S0 Y. G9 d8 I8 Z, \2 k. o& u, V6 @
$ h' I2 r% z+ Z( s' r
.......
S* C8 P ~3 @* W9 I
: [4 a: u/ e: |/ w/ L* j End sub: c/ R2 ]4 y0 }8 w* ]
* W4 u0 M- P5 I+ t- R' G 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。
y3 l6 `) N- t6 r% S& B9 ^5 y$ R: \
1 [7 T2 H: @4 T 三、编写服务器端程序2 N0 `" Q7 b- I7 ~8 f0 Q5 f2 u
# j6 W; G& f2 P 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
1 }7 B) J1 Z/ ]6 x
/ E) w1 _& H' f' W 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:8 F4 ]0 w2 d0 |: |
4 y5 G5 s' k' R2 y) w+ B
'在窗体的load事件中对tcpserver控件进行初始化2 W/ H0 b. c$ M) e
- y3 }" l( C/ h" x$ C private sub form_load()* j+ M; r' p8 r& j4 B, m: h
; z. D* S. h- V! s( J) M v
tcpserver.localport=1001
4 K/ {7 _$ Z' `
- B" z& a: K% V: F0 z tcpserver.listen '把服务器置于监听检测状态
) p$ C# t8 H. j! H
# j% X) Q) Z! U+ P6 Z5 W( l end sub
7 c* o, ?3 D, e8 ^* X/ ?- G
4 o! n& y' c8 Z; y9 s '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态
# Y+ E. d t4 ^) M' S8 g) U9 \! Z1 Y1 Q9 a8 m3 o
Private sub tcpclient_connectionrequest(Byval requestID as long)' m6 V& P! d+ J
9 F5 C* z! B6 S1 n& H; k If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭* ~) P9 P2 O6 j1 f/ ~
0 j! \: S! w3 M1 L
Tcpserver.close '
/ |, S- v1 z( Y, b: T& W! l
: d! x$ Q6 E, a; U) D# W Tcpserver.accept requestID '
, }+ F$ Y+ ^8 |: C$ s( k
" O2 @5 I1 S8 ]% f) p End if) \: \6 T5 `2 Q% W
+ X9 N* g# r' l" A/ h. t5 u
End sub- }& q8 I3 s( S
1 v/ x2 j- d9 u( k/ B6 Y' b$ O
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
y# R$ j3 q: e- E. H1 u& v7 q8 a4 ]# b1 F
四、测试远程控制程序8 _' U1 Z& g( e* E1 K% o
( T9 r4 w2 C5 ^6 [+ W0 b) E ]) T
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
p I$ n. U! r |
|