TA的每日心情 | 奋斗 昨天 09:23 |
---|
签到天数: 2279 天 [LV.Master]伴坛终老
|
用VB学做“黑客”程序
$ h2 S! \" J1 l5 ~5 K0 U
% H6 a9 j$ C- X: g # I( Z5 s+ C* |% m% D7 N
6 e2 x; t: p$ J) t! A
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
' `% t) D3 ]3 f& K
" q* g) L1 P! E" @ 一、所用控件
' L- g1 o4 M0 y& r2 F
# ^$ l$ ]* d& K" E 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协# m% f! g* h% n( r( ?
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。6 A7 u6 n) J6 z0 ?% t* W
: ?. R4 X6 {: v" U) _) `1 S% r% E 二、编写客户端程序' p& R# o; r- U7 O9 I
- K: u. u \ `+ s
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
- W4 V5 l+ h* y6 @6 |9 ?
- k, j( w5 j. @" S" y private sub cd1_click()
' T* v: N3 |0 n% I5 c5 |: z) e. M) k
tcpclient.romotehost=text1.text- o! h) @- n5 r f1 w
( _- v3 H2 x. |/ I" H4 { h
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001
8 U2 t9 y0 o3 p& j* ~9 f3 o" |- e4 W0 p- \2 I
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
, J9 Q! c& U, B- N0 ?! M9 h6 S# {5 A+ B8 I5 c' N+ H
cd1.enabled=false
1 ?* i, [1 S7 I# a2 J2 p% @6 b. S& e5 J
end sub
& ?) t0 X* I% z1 v1 G" [, k A
7 [9 n" ~0 x7 j3 u# S 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:7 Y) ^6 G5 T0 }- n; J1 p/ V
4 b& h, c4 O4 n- ?( ? private sub tcpclient_dataarrival(byval bytestotal as long)
1 S) M1 w1 F* ]& J" f* `7 O X
# c* Q) \$ z4 e1 G" b& [ dim x as string
. K, s# U: L' |+ q! s; v; `
( t" |% R. M9 [* M! K6 E! ` tcpclient.getdata x '使用getdata获得发送来的数据
D7 `) X8 S S% H& o% Y
$ Q) l: _4 Z6 h2 D r .......( c! J6 N9 d& ~- o2 ], f [; I
1 F/ V, I, B+ s- d% C4 \. c End sub
7 V- e4 f8 d' c$ }5 ^3 d6 V* @% F$ e3 ?- R- t8 b, J
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。9 O! ?0 M! t4 ~1 T7 K3 n. w& \
- K- X8 k4 a- _, j. t _
三、编写服务器端程序
4 T7 B- |1 ~( t3 I3 w1 t( h
" x) C6 l* P$ w5 @& { 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。) m N+ m7 U! R, S
" I: C- b7 h2 P8 [ 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:- O+ f% o3 i6 e5 ?4 a# ^+ p
3 \# \3 T! @+ m
'在窗体的load事件中对tcpserver控件进行初始化
6 L. O P0 d9 ]' m) s6 d0 P) o# z0 O, ^
private sub form_load(), u: B4 @5 j5 p6 W6 j$ u
- c5 ?- i1 F Q( I6 O! F1 c
tcpserver.localport=1001: f+ G- | P1 u$ q) ^
+ N) r0 j! L4 s# C tcpserver.listen '把服务器置于监听检测状态1 z5 b T' s- |7 J2 W# M* I0 u
6 V( ~3 U( B/ K- M9 ^ end sub
& F) W/ E3 E a- k1 J: S: p/ \, w* t9 q+ p% r" [$ T$ `7 X% l
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态1 `7 [ Z) C, m" C7 V. ^
/ p8 |9 ^/ _4 ?! z# }7 f( ^- f
Private sub tcpclient_connectionrequest(Byval requestID as long)
4 K" t5 K- ~1 A( Y1 E; \9 d% Q7 |: _
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭( }& j; U4 j$ e
# R( N: q/ {3 D2 J+ ~9 p1 [
Tcpserver.close '9 W6 W5 {( w" U: S/ i0 K3 K
0 q: q! N- y# {
Tcpserver.accept requestID '
+ t* c/ R! {! W$ s) ~/ d, l7 v5 r/ D$ \" \
End if
% \* l4 h Y, l# V+ H
6 f1 m( L) ~# e& z7 U% q End sub
) i5 q' h. d: v) y* I
$ O* C. m! a/ Q7 J. v8 G X- }5 ^ 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
) N# U4 y* Y8 p. V6 ~- |, k6 p6 `
" ~9 H }) O0 w. C; h9 P9 _ 四、测试远程控制程序2 y9 P# B9 j' ~! t9 }
9 n% K/ x: x. k) }( \# f) r
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
# U' P& K$ J# {" Z0 J p9 P) K# Q
" f7 a' g! W' @/ E* g
' [! Q2 A4 R' H ~4 f5 t0 S% @$ j! Y: g0 t6 _2 z8 ^
& |0 g! \' I. H4 ]6 o+ b0 F' Z
3 f; v# u, K; k* @; Y% w0 x% @9 M" I
8 d( V, d; K/ b& |' O值得一顶,$ I& I* b/ H2 a, v
不过这个程序很脆弱的,真正的黑客程序要隐藏起来,那要用到很多的API,尤其是在2000和XP下边,是比较难做到的。在98里就比较方便了。上次我就在学校机房里偷过别人的帐号和密码的。女生的密码以数字为主,好像我偷到的没几个是用到字母的。 |
|