TA的每日心情 | 奋斗 昨天 10:07 |
---|
签到天数: 2385 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序
! u7 H/ S# e) n! x 0 m5 B! ]9 m8 D
关键字 VB,黑客
/ j+ f: v- m$ o0 W
, P1 u; ~6 d& [, z5 B0 U! n# R) b p7 }- ]+ H$ u
3 A" j( i8 f- s7 n( a/ B: K
用VB学做“黑客”程序$ V8 T/ B) K; }/ p
- v/ k8 q1 R( ]
5 l$ i+ V4 C$ ~8 Z% e y. n" `" l9 ]" K0 t
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。3 G! R8 \+ k* o# v3 l$ G) |1 X: [
; }6 M. z& {* B& E( j5 G n) B( j 一、所用控件9 v# x' I6 G* @3 f b: @) M" A% |
/ n: e: I6 ]5 A+ q& m& F% S( G7 ] 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协5 w* w4 {" v$ F! ^* O2 c( e
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。7 t3 x4 n( A" I
7 }; V" N% c3 h& n+ T+ Q4 ~ 二、编写客户端程序7 K4 E& b2 g; r$ R+ m& L) S4 u
: `; F; w8 p1 k1 [' [1 l
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:: W ]" I1 B) A* ?. t
7 ~- e7 |( V9 g
private sub cd1_click(); I8 N$ b2 H! I d7 J: d. [' Q
7 u. D1 U; }: x" c0 m* ?& G tcpclient.romotehost=text1.text6 u1 O1 B1 t% p5 V
0 i* A! B) N7 {
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001* X( m+ o, j. l3 y
+ j7 x f ~* ]/ T7 d% x; P tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
" q7 d' J+ _. c' i
9 n; p5 w" @1 J, i' B9 O! W cd1.enabled=false. E, G0 J0 F' b, P3 o$ |7 R% a
' C3 M; Z' a/ I! N L0 F E end sub
5 p4 ]- ?! J1 t8 A1 p5 ]
, U4 M; L0 r# N 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:0 _& R3 T+ k5 V/ j9 i# q
- z/ }2 M3 ^- m, G8 y4 P: _& J! a private sub tcpclient_dataarrival(byval bytestotal as long)9 F/ d6 u0 I* Q2 l
2 H1 {+ }+ i. Z+ C dim x as string" i! u0 ]2 _. [" x( E, U% C
# l0 [7 }$ z8 D
tcpclient.getdata x '使用getdata获得发送来的数据
* F4 C0 K/ W2 u6 C$ h+ _1 X/ f$ {5 o2 t6 C, \. k
.......! S* k! A/ c( R/ Q. c, {+ J
4 G: c' d( j2 y+ B
End sub. j0 C! P# Z+ ]4 k
5 w6 e u8 |+ |6 A* v
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。
) q3 r6 _$ s# _# x2 @) ~( b5 D/ \; M" e% L
三、编写服务器端程序
* r" ]5 S5 O4 N2 Z4 b' @# y
9 X* g6 _8 g, n 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
) _2 T2 T! O7 m, i; |2 G/ z& j0 T4 C5 J- f* p R2 A
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:0 B% `' |" v+ C
4 s# p% Y! m' e
'在窗体的load事件中对tcpserver控件进行初始化( f9 ?! F* h* _# B0 r3 f2 e% |% D9 u
2 U2 C* B+ x ]5 @! ]# a private sub form_load()1 D4 \ Q$ `1 f' o8 w
+ O7 R1 T2 k; n4 D8 a
tcpserver.localport=1001
V/ j" d" S; L/ m: K* E' ~
# u8 b" p# L" e z* Y tcpserver.listen '把服务器置于监听检测状态
: h( B `% t: l$ W4 R" G& H9 s0 v' Z% r- U/ ]: r
end sub
/ ` N, o; a& H6 p3 b( q3 i/ F' l1 K; o4 d
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态4 S; O1 A# V) L. M2 J
' k( i1 n6 ]/ T+ g q
Private sub tcpclient_connectionrequest(Byval requestID as long)
4 E0 g' e7 [. |* f5 }2 a$ I1 H/ C- P5 n2 ?! c9 a0 l; m1 `) r
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
' G) y' n" }- g* K; N
7 M u+ W/ X* L2 m8 G1 F Tcpserver.close '
# O8 ?8 [1 I) |; V: T- j. _0 o, W/ v" j4 ~5 t4 o* o3 \* ~
Tcpserver.accept requestID '- j; p! T5 Q b! E' V A6 L, X& ]
) s- o; t% Q! Y2 [. ?9 B7 e End if
; e% G3 m; k1 O) ^; [( r0 X7 U6 G% @/ b0 j1 ^9 q7 a# ^. _$ D
End sub
7 Y, v. q- `* v. u) b$ I8 [# |$ p6 d6 v0 G
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。. i6 |) v" U6 W# o) V7 }8 F/ X
( _( B Q: e" }: F' \/ v 四、测试远程控制程序 ^& h8 F: L5 ` L/ ]/ k
. D9 q. E; ?7 d% c& E/ L# Q! t
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?6 a9 ?# z# Y/ ?- [- _
|
|