TA的每日心情 | 奋斗 4 小时前 |
---|
签到天数: 2398 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序
0 w: ?$ z, M- }5 I- I/ q" G
$ b9 u, N% C- E; y$ m关键字 VB,黑客 9 Y& \3 q) o6 R) ~, X, ?" W: T6 r
9 f. @$ C: X4 }1 H% n2 [
0 s. Y8 [! [( {* Y$ a3 q6 q1 O7 ?# a1 w3 e& t& w. R0 D
用VB学做“黑客”程序: l2 @' D5 p# e" ]% n& o2 A
$ c3 m# E0 |2 p
) |: Q) o1 U; h7 P6 u4 I' r' b8 G: X0 y
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
- Y. P% k' X/ A$ _& f q" O$ D ?9 W4 [# p1 B* j4 s4 @+ H
一、所用控件8 v% Q- _3 i9 n, [
3 d4 p' c( _# {' t9 D7 g
在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协* V% n- x) D2 n& D. n1 c
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。" Q9 z, k" E, Q$ @
: j) k; O6 {- V 二、编写客户端程序$ P6 j+ ^) g( \/ ^! Q
, K. F. j* F4 J
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
+ `) j0 A3 `' c5 y- Y
, q, d1 h$ E7 {: s private sub cd1_click()
$ L* X( D6 ?: J4 \5 ]; U7 c4 }1 p3 @0 v8 m# K0 w6 F# R
tcpclient.romotehost=text1.text) s+ d, T; x5 p. {' d9 }
, u* g8 q" T- e# K
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001& N t0 [' g! l
( y, N) T0 R$ y; F4 w. P& Z tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
5 F8 ~' X* d1 M: l. h8 `* u( V2 D/ K6 Q- d" ^4 r
cd1.enabled=false
n; b& ~5 m( `
, s; t4 i$ s4 e1 g x- c end sub9 d9 D5 c7 \6 D1 {" G6 m3 y: C1 c" T, t
" f+ s/ F+ k0 ? 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
, V' Z* l& d; ?/ ]# r+ U- p2 ~8 p* s4 R P7 H+ d' k
private sub tcpclient_dataarrival(byval bytestotal as long)
( v! h* O% s4 F) g1 N" m/ w
/ j8 w) W7 J! G U$ D5 E dim x as string
& O: M3 [+ y2 H* j: \+ {; P j3 @8 ] a# s3 j& j- |: T1 I, B
tcpclient.getdata x '使用getdata获得发送来的数据) k5 y( a6 U0 h/ q
2 \/ s- R( m) c' l8 q; I
....... b N# X& F' i, f3 K
5 M' e- u }! Z; U i( L
End sub9 z! }* M r. O U% _
$ x( b- O$ d8 R# g' X4 I/ m
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。! K& t. u# d3 W: [$ [9 _# B s; ~
4 T/ n0 X! A5 F8 t
三、编写服务器端程序
+ O+ Q" a) j! F! t; H6 _; {1 `
- b B- S# ~0 W% T: n- m% m 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
3 l. V& a' R. }7 T! u. I5 x" y2 `' o! D- l
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:+ f* d, ^; `3 e" G; b2 @) I
( P. k/ w' ~' x4 c1 Z+ z4 }
'在窗体的load事件中对tcpserver控件进行初始化, D. ~. J. Y( y3 T) h2 O8 V
7 I' W8 `8 x8 ^" n5 t
private sub form_load()
N# A- W' s! g' l
R4 m1 y. C: P tcpserver.localport=1001( c! p. e- \$ h2 Y+ T; \5 @
( e/ f4 ]1 u7 e* V! Y
tcpserver.listen '把服务器置于监听检测状态0 n& ?! u+ l% @8 h/ \, L* B
! j) s# G. S9 \; V3 T end sub4 @+ z# P( z) x A
6 J/ y' P9 ]% ] '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态. x; m2 u! M" Y- c, h
2 ?" W' h3 ^! }: N
Private sub tcpclient_connectionrequest(Byval requestID as long)
/ k" |5 [( U& W
$ h5 y0 Q9 q* ]1 U3 i If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭# U% K8 n5 H. w* c3 K
' }/ z! m% x2 j( y8 B. x+ S
Tcpserver.close '+ m3 z, U5 M, A! P7 o3 y0 S2 p
* u p8 e q5 p, F; ` Tcpserver.accept requestID '
$ s# }/ m: m; Q X% |, k4 o# k4 g" W' L
End if. l% ~& x4 ^$ x. q
) _( l# q6 S' o" Z4 o0 [, Z4 g End sub
; r# _, j, X* g" [# g& b- U+ m+ X8 k" @' H/ k. ^7 O! Q
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
6 {8 O- s/ _/ _) Z8 w$ r; N6 L8 z2 p/ [4 k, r
四、测试远程控制程序
3 v [% E7 l9 v3 V. g+ `. @/ v2 R0 w. @0 p L
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
) U. u) G# ? m$ d3 }4 V; X6 [2 s |
|