TA的每日心情 | 擦汗 6 天前 |
---|
签到天数: 2402 天 [LV.Master]伴坛终老
|
用VB学做“黑客”程序- a7 ^! N) C' j* p5 H* q
: M0 [, A3 o& s6 I: [& `
3 @, U$ {- H* G& V) @! b$ \* {5 Q1 e& V( d$ ?
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
1 u' ~3 h6 }# _* P! ^) z; |, z! ?# w, j4 B- d
一、所用控件
) C+ [, c: f* S" D
d" g8 X2 Q+ C6 @3 D; | Z 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协; Y) h, w i: Y# f0 T% [
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。( B" L) N' D, M0 ]% d- W( s6 k0 q' B
0 u9 c, u7 q: a2 ~
二、编写客户端程序
' ]: X9 O% h- Z7 j1 c
. W/ u0 O# D! e/ R2 u4 i 首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
* `$ C7 ]! `: G
1 e _* O( L0 ^ private sub cd1_click()
) }5 ?5 q0 c! v
! U% m S- ]6 n4 j* x3 Y tcpclient.romotehost=text1.text
; d0 N X) @2 ?" I k& @, ?% S7 [
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001% v7 n8 L. \ R4 q$ N( _
2 @( T! _- v* _5 _
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接8 O: `! h5 @/ r7 }
% k' J( A# l1 C: ]/ U9 q( z* f cd1.enabled=false8 s- o) l7 k. N. x
6 V- Y% W- h" h8 ^2 ?
end sub
7 a" G, A5 S/ z2 @7 Y" ^
1 p2 q" e1 Z0 [4 x 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:; I: X5 E$ c+ i0 |1 e
! T$ V( z* H. @' `
private sub tcpclient_dataarrival(byval bytestotal as long)2 `7 V" K8 e5 N1 r) L) C; g
" r- g0 J: H2 w5 b x
dim x as string y% ]- b6 W! ^
1 a4 G3 d9 t, \- L* l* o& [) Z
tcpclient.getdata x '使用getdata获得发送来的数据; Q- {# h s o/ Y) I' n" n% h
$ v$ @* D- t7 }6 [# M! F3 O1 N
.......
6 |* d( V" t6 n7 z" ~0 }
: P X1 {( y3 X, I End sub- w/ k$ g! e1 t+ u
4 `; A% [# }+ K: M9 ? 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。
- u7 F7 Y" ]5 O. K5 k1 c( d: h' K+ x6 j( @$ a1 W# ^
三、编写服务器端程序0 H) {8 ^% z. a6 k
3 S ^! e9 V% g y# {$ X: S 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
" u9 _# }: I: k, {6 T
: ~6 f0 S2 G2 d: s 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:' P @; g2 M9 r' o1 C: ~* U ~$ l
) D: _2 ]; k/ ]8 ~' u. i
'在窗体的load事件中对tcpserver控件进行初始化
& m% L% G6 F2 Z, \& g; @9 b: ]- q! ?' G' [1 P
private sub form_load()& U# h2 x1 d6 i+ [4 K
/ d! P J0 E0 n+ P tcpserver.localport=10018 p6 j/ O. E$ Z- k2 O
5 A- b. G+ l) U3 G* a1 ]
tcpserver.listen '把服务器置于监听检测状态
) T: F" k2 T* R$ }" `' |& B7 J
; K7 C; E5 X7 `1 R end sub
2 @- A* O# j# Q3 |2 x2 a5 z) [( e) S
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态
2 w. j9 n* F {( c6 c0 V% D/ k4 i
, v. P V6 T8 P' s$ }3 S7 U Private sub tcpclient_connectionrequest(Byval requestID as long)
) p" y" A- F0 m5 P0 o: f
: J# M) X1 q/ E6 H If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
8 w! w2 q8 q. |5 j1 T( i
. F& T% H' p" o, M; ]; o Tcpserver.close '
* I) q) H2 [0 J d! z6 e# L- {! ]4 H
Tcpserver.accept requestID '
3 O6 _3 X, S1 b" T1 i) ~) }: e* |6 [( I7 U$ p) J& g
End if
8 A3 U: L( n: c6 x& F; O8 J; C V6 V
End sub
' R% B/ z! | S9 |8 M% A
: R9 u: A+ U7 M" O; z4 v9 p 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。$ R9 l) @1 m& G9 z
" j, A: r0 b8 T5 A+ j
四、测试远程控制程序, p) z' O8 M6 h+ O* c- d' |
1 ~& m8 _& \; M" w3 ]1 w7 } 现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?3 O) _! e7 [0 D; h% m% N
7 x4 L- m9 p Q$ k; k
: q0 I0 ?" _. o, Y
: I# m7 P, k. D- B6 F8 {5 B$ R
5 ~; o, ?9 Q; p8 Q6 I
' y. j% d& i) E8 M a/ L7 B+ p P. K% k4 D+ f. u* w
值得一顶,
# e* u% E, T' k% D, C- d不过这个程序很脆弱的,真正的黑客程序要隐藏起来,那要用到很多的API,尤其是在2000和XP下边,是比较难做到的。在98里就比较方便了。上次我就在学校机房里偷过别人的帐号和密码的。女生的密码以数字为主,好像我偷到的没几个是用到字母的。 |
|