TA的每日心情 | 擦汗 5 小时前 |
---|
签到天数: 2396 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序
/ n) f' L6 ]# |1 K- _4 `, c2 ?& x 0 R+ k r1 s, Y: k# l; ~* M
关键字 VB,黑客 ! y9 V8 p. q2 }0 _; L5 d$ O% T l
8 n4 U# I9 V8 q% }
4 u! k( i9 u5 l. A D- ]7 h/ u8 L& y! H: }7 v
用VB学做“黑客”程序7 z" e" \9 k- z
4 p2 s; P; u% i# g' M3 K 4 D0 L$ B+ M& r$ Q# Y
o7 X. t' D, t+ D3 w) [ 只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
$ z( l6 k R( k; O) V' J
& y. j9 X/ S+ _# E) @; x% T 一、所用控件! q/ }4 p( b) s! i
/ V8 B) ?. u' U 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协3 B5 ], f# h+ {' r0 i) s
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
[/ [) L, Y, r- d4 J1 T! u0 C9 h& \* M2 }2 L& @) N7 B
二、编写客户端程序
+ w3 n) {; h3 Z7 M* X# s9 z% \& s
, Z) Q' _# Z) w) C3 L% e# { 首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
1 w4 _/ N8 l& L# u' P
) V4 Q3 b/ I5 l0 @" z3 w private sub cd1_click()
* F6 {% i" ]4 i
5 ~9 E( s7 H5 g tcpclient.romotehost=text1.text
, y7 `- p+ t! y1 ]3 }! B
B) K: E( j! ?- H% r3 l. l) G tcpclient.romoteport=val(text2.text)'端口号,缺省为1001$ r8 h; b& }0 F- V
# {( }( t) C3 y+ d5 ]( z3 b
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
+ ]& T* a9 ^( r2 g |& _" K# O4 d8 D( S% O- g4 K
cd1.enabled=false' @4 i/ X2 ^9 \9 L
' [+ {3 `- @0 r& b( P
end sub
; }' h: r$ x3 q
, d0 O) u I+ h7 G7 V 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:# R* D; w3 ?' a" k( v6 O
+ `; ~/ j' f; y8 |
private sub tcpclient_dataarrival(byval bytestotal as long)
0 N. J% i5 E: K7 g* h5 |
$ ~, N+ F8 A2 A0 F' G3 ? dim x as string
+ u# N* y0 h; d0 o- a
5 F" h1 ~4 R' m0 u! A1 |9 {3 x7 X tcpclient.getdata x '使用getdata获得发送来的数据
5 Q, j: z7 } k3 `& Z3 D" b, W# \) ^2 ~+ q. ]9 i+ h+ Z2 g
.......* h# v5 t0 k1 ]0 v& l ~
0 y: u7 J( L% P2 L3 `) X
End sub- Y# M0 `1 F4 @7 c9 L5 Z9 ~' M/ _
+ V6 ?$ y; a# L 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。
" [6 \, I, a E; u! S( Y5 i
, }+ L& P! h I- _ 三、编写服务器端程序
) O7 f; F# s5 D
6 ^. |6 _# S* v: @5 I 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
" c7 r, v( q6 w: Q
" P8 g' M4 |2 b V' v 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:
0 C6 o1 J# P" r4 f# h; _2 y" r5 y1 F; d; }: o
'在窗体的load事件中对tcpserver控件进行初始化0 n7 b( P/ Z" x, A7 }
; Y* F6 |7 K0 ~4 ] private sub form_load()
& D' Y; g- o5 [5 M4 ~( x1 o# H! J( F. _
tcpserver.localport=1001/ U! N' i% c$ r! p) v! b( b
6 x0 P$ S) m8 P& }
tcpserver.listen '把服务器置于监听检测状态4 n3 A# J1 {$ C; [4 q7 S' C
4 Q# V% M9 |! B) J: Q" F( `
end sub
3 p3 L% Z9 v( e+ s" k5 J. U; X& l3 X' |0 B5 j; B; U0 r
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态
W- e' y5 ]4 [6 t6 T0 z b V7 }1 J) `% S* o+ I
Private sub tcpclient_connectionrequest(Byval requestID as long)
% w2 u8 H( V# W9 @# Z: @9 u5 `8 ?
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
6 Q3 q- u7 E' Q* A; \; ^' B) }* M' t8 h
Tcpserver.close '
! J( |9 h6 g- u U5 S# K) U6 ]2 @0 e9 B- A |
Tcpserver.accept requestID '
0 L7 Z/ x. C, I7 v; Y2 n5 Q# z+ G" Z( D% o. Y0 ~* t
End if
! k- u1 Z/ g3 L% x
* O7 A+ f" A7 k: @/ E0 i. E End sub
3 }; Z7 [% E7 K" ?, |6 b" q! n. X4 Y# a( r8 \$ u1 W% d
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。' B0 y8 m* v# Y$ d( M0 c& Y
* Z9 M% O8 O2 Y9 G* ] 四、测试远程控制程序& E2 y: }. N! m* L
4 ~$ B" `+ \2 A, k
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?1 }2 [7 c C' ]
|
|