TA的每日心情 | 擦汗 前天 09:05 |
---|
签到天数: 2402 天 [LV.Master]伴坛终老
|
用VB学做“黑客”程序( v( q7 [, s$ E D& h3 l! a
/ O4 V' |+ B) S, z2 C: ^- Q
1 x1 h- H8 _( H4 X/ @, H$ G9 |' m
- {# u) S$ a7 [& G
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。/ V- M- o3 z7 j6 C
: {' J# m5 v* W G. H7 v4 n% H
一、所用控件 F6 X4 r4 J/ Z k# J* C
8 j( }5 L! T) [8 ^% ~8 o8 f
在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
& m$ [& B. E R4 P. a" ?; r2 Q2 n r议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。5 L e! |, v/ \
2 y* _; f7 T/ |7 e6 P! q
二、编写客户端程序
6 X1 E3 }' X4 [$ J; W
# _2 k7 J2 Y: B, H8 W 首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
9 ~% h& S- z6 f: V n+ |& v9 }& Q
( S2 J( }& K. H1 g1 ?5 Z private sub cd1_click()& @, ~) b' f) [: _4 @$ ]
4 ?6 o2 r. C6 W, a7 w' d tcpclient.romotehost=text1.text
( M2 ^0 A: T- g
( R! T' \8 U; f0 z" ` tcpclient.romoteport=val(text2.text)'端口号,缺省为1001
, \8 d0 p- ?6 Z% b& c, \5 ?7 K2 _- T7 t! P: A0 \$ e& v
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接/ r/ I4 J; C! V# O" U9 N5 i0 |
/ N6 E$ I& P8 s0 y, x
cd1.enabled=false5 u' c8 ?. U- ^: V. _% i& r
& M' v: R2 _! x: @" r9 R5 Q end sub
& L1 G9 [7 j3 H o ^& h2 r3 L( }7 c" S. z' m8 @% u0 ]8 Z( v: i
连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:9 h) p" ~( _6 r* w) S. q; U6 b
]' b4 G9 t/ |& N9 Y4 J
private sub tcpclient_dataarrival(byval bytestotal as long)
9 i, z: r- x- w+ P9 ]( x( C5 P6 X& R, S, S3 E/ J
dim x as string; J1 M! B5 v0 G" A1 m4 @
( K6 N; f7 M# g( z
tcpclient.getdata x '使用getdata获得发送来的数据1 j8 ~$ `8 S4 \# ^) J5 f- G
. s; X- O- x6 v. H' t
.......& A- E; t) P3 J) c1 r& C0 c+ o
+ k# |; d1 a/ [$ L3 d
End sub) t' q. j" C* v7 `
& L% {) R2 q' `: T
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。! f: l- K! A) o2 N5 N' ]7 I, _
: ~# {) `# x' c+ {7 f 三、编写服务器端程序
4 ]- s0 A7 g) ?- M+ C8 p3 C
, h! ^# j8 C# t" i# c" z1 P. v 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
+ E' J: H8 ~3 _% {- Z/ o* D: K( L- q1 F
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:
/ `# N+ } A, w2 j& R4 ?5 F1 n6 Y6 J
& a0 V+ `! h h& `0 ~ '在窗体的load事件中对tcpserver控件进行初始化
H. s `, V9 X/ g) M2 k* W, G
private sub form_load()
2 ?1 W2 v: Y) \4 s7 q: U
4 n v( v: k5 q6 H; `" E tcpserver.localport=1001
, ~8 q. H9 ^- l7 t' f' U1 f/ B4 Q: q- P1 ?
tcpserver.listen '把服务器置于监听检测状态
2 `8 `" _. i3 c) H& O7 N0 e; z( k' D2 ~; t4 h7 B
end sub3 S( P% J/ }* E. V& c! w i, `% f
; b) P7 E* Z1 x$ e% {9 d7 _' R' q
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态
/ ?* S c9 z8 t0 o5 m ` M/ z: j% H3 V. w1 V- R& D. g
Private sub tcpclient_connectionrequest(Byval requestID as long)
; |; u1 I. d j6 {7 N0 i8 m/ P8 b7 l5 ]) p8 s( t, d# |
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
3 f, U. h5 i* W" i% ~/ F
# z! G$ j5 `+ L9 G, |0 w! F5 B Tcpserver.close '$ v* U7 u/ ?4 ^/ x+ ]4 Q
9 i9 a$ i3 m- _6 N9 x. e
Tcpserver.accept requestID '
' P( [0 K2 }6 O4 v- T/ r
; \& I/ {4 F* ]7 Z End if
$ ~1 J. b, r4 b: W% K/ |/ S* S/ F& I8 S' @
End sub1 l% C8 L( E- [* K6 L+ ]8 u C
# X( I4 P1 E0 _2 g
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
; C* p6 w/ [4 i( T# h$ B( l; a! T# F# j
四、测试远程控制程序
. y8 d) O& X2 h' J) Z* u
! _( S5 S8 _; ~0 Z" W 现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?+ H- E4 a0 y5 h7 N% v& Z3 {
( Y/ m+ Y$ l' e/ g/ |8 V$ N( _$ ]
3 E; R" Y4 I! z: R
9 U! L) z s- Y( q' h3 C. p/ A9 O; |8 k: [
( e; f- j' C* Z, t
* l+ ^! N) i; @* [) p
值得一顶,
1 F( e; o D: @$ y# R' k& h4 r4 X$ V4 M5 z不过这个程序很脆弱的,真正的黑客程序要隐藏起来,那要用到很多的API,尤其是在2000和XP下边,是比较难做到的。在98里就比较方便了。上次我就在学校机房里偷过别人的帐号和密码的。女生的密码以数字为主,好像我偷到的没几个是用到字母的。 |
|