TA的每日心情 | 擦汗 昨天 09:05 |
---|
签到天数: 2402 天 [LV.Master]伴坛终老
|
用VB学做“黑客”程序8 t5 w* J, U9 O% q1 [) |
( [1 T2 g* A1 c- k( v& c. g; t
: x V7 m) w5 ], D0 q) J6 T1 J" Z
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。& S+ R) j7 V% q+ I( R% U, P
$ b* l! v( L1 p( g$ Z; O, g4 {
一、所用控件
" M2 [8 j- P; H" W2 z
0 u) [6 A# Z7 X- w7 D+ g 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
" G( Q/ h' C% U1 f* F议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。; Q7 |# t* N6 S2 U5 O6 K. h/ H; t7 ~7 h' ^
) M) N; u1 B7 b( f# q* T 二、编写客户端程序% W7 @7 V! J1 k7 ]8 N
/ z+ q. Q: @9 s& n3 V
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:" Z G* N7 ^* N& `8 }8 u
& f# |8 F9 x6 K- B" _% }1 P
private sub cd1_click()3 F6 y: B: K& [7 j
6 \5 M3 j) L7 h* t tcpclient.romotehost=text1.text' R, H( v H: G ?8 o7 w
* \8 W& A! W0 f
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001
) i; F: H F F. m$ m
$ H6 T. h9 `% U* |4 U tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接5 n9 c9 B( @& i8 y8 D
/ f; U& M. X" n cd1.enabled=false
% }: b( b! ]; P# V9 J9 D; q
$ m+ D6 d4 e( n" B% v9 G end sub6 v6 X, u9 v* L6 y3 L
$ Y! M" M. I2 }" U 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:$ }+ ?; n* `/ g
9 N% I/ x$ h; V" g
private sub tcpclient_dataarrival(byval bytestotal as long)' B; l! i; l9 E; ]9 ^
) m. U- B8 S2 {7 t2 x; K
dim x as string
8 D( Q4 ~, y+ r+ |$ P3 ?6 Q0 O# m& v8 Z1 z' @+ k" m
tcpclient.getdata x '使用getdata获得发送来的数据 ]+ K+ ~. P( Y) O% {1 L
7 l# v; n; N5 u
....... K& D& g7 u2 t, r. ~& ~* Q
, L# c5 P( N; D. b1 N# y- [4 l$ m) m End sub
. \) J1 o7 h2 i' e0 v9 m1 `- v1 p. U0 S% ] G3 C) @$ T
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。( v( B+ ?, r4 g! U
- Y' @# @1 `% S4 F8 ^* ?
三、编写服务器端程序
/ H5 e8 m, M/ w e% q5 j+ W$ {4 c+ w! c* J1 T$ {
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
- l3 Y1 {( \ W1 I
9 ?) q/ M0 ~" L# \/ E 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:
7 X0 U" p1 }# d0 o4 F, D' Y9 ~! `$ b- N! o6 O( y$ f' w2 I$ n8 G
'在窗体的load事件中对tcpserver控件进行初始化
: Z$ `( `/ i U. [7 A) L2 T
) d( J% Q. F( I/ S private sub form_load()& H& _7 y6 h& o, L
- O& f: U% N* r$ G
tcpserver.localport=1001
; n) `0 ^5 o- C$ O, |! h7 ?7 v% _) m5 j* r5 h
tcpserver.listen '把服务器置于监听检测状态
: V8 O8 b5 A+ P# C3 f9 ?: }$ @/ p
end sub# A! f2 D5 v) J% k
# R: e" Y& `" x$ g& @
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态7 A0 n4 W! L1 ^5 c% D* C
# t. H8 c9 O* k
Private sub tcpclient_connectionrequest(Byval requestID as long)# n/ y0 h9 r2 `% O
7 s( U" q F7 b
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
4 @$ B: q2 M1 ~8 D% `; s0 s- X* }! P3 K
Tcpserver.close '
- `; D3 e! O- ?/ \: B9 b' Z X2 r# c1 J. I
Tcpserver.accept requestID ', |6 x8 ]) A7 `" C ^
' ^: N3 O! O% |4 f End if: l- S! Y0 u/ r% \* F* o9 j$ h
7 b: P8 A" k! l1 G) T3 ` End sub
: j m0 p( Q& V8 s! w- k m
" ?/ H, E+ T3 w5 c! @ 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
) @& ^. C; W3 V/ `; w; `$ R$ K0 a
) e* e; Z. a y* v 四、测试远程控制程序' S* t* _. G$ @
7 D3 |+ \7 g) [+ w 现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?* m8 [. @. A" i* @
' x1 x* e( ]7 L8 L* E- `
, G& Y: b8 e% b
) W8 b( {: o3 v" Y' M
4 b5 X" k6 Q( r; [2 ?0 X c, I( K8 M+ C( ` W: |" d! `9 s% t
8 ~& J, m" ` @) S+ T值得一顶,
+ `% A) i6 H; d不过这个程序很脆弱的,真正的黑客程序要隐藏起来,那要用到很多的API,尤其是在2000和XP下边,是比较难做到的。在98里就比较方便了。上次我就在学校机房里偷过别人的帐号和密码的。女生的密码以数字为主,好像我偷到的没几个是用到字母的。 |
|