TA的每日心情 | 奋斗 9 小时前 |
---|
签到天数: 2394 天 [LV.Master]伴坛终老
|
用VB学做“黑客”程序# ^& n6 Q2 g1 A/ T& S
3 Y0 G: U1 ]& z/ S! Z& j
0 R/ S) Z6 X. K: Z/ m0 `
7 b# ^* h/ w: u 只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。) M5 G+ s6 W, G
% W! P2 {6 M C4 T
一、所用控件5 T6 v! v9 v& z" `2 j+ F
: Z% V9 C+ M0 V) u3 `
在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协" \& p; h4 g+ |4 ^$ ^" D. |5 a# B
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
% } t3 ^" l5 \
# j1 e7 J. d; Z1 K+ y& r6 @6 R 二、编写客户端程序
, l$ R/ m! X$ o1 s8 I: N" S# ~1 N" q# W7 n+ T6 {0 k5 G
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:3 I1 \- K& _: {" Z9 E( v* z
, D8 N8 J5 f* n7 q$ v& N
private sub cd1_click(). c( N w5 ~) e% J, R* [* {
7 x4 K! G$ u w9 g tcpclient.romotehost=text1.text" g3 U. t; i2 L: d0 k4 B) i) ?
5 h5 V& w! `5 Z: g1 _) \4 p tcpclient.romoteport=val(text2.text)'端口号,缺省为10014 y. ]: p& x0 V! \1 A7 w0 P0 a k+ b
# Y Y# H/ @! K( T+ f
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接+ M. n3 T" N6 z
8 M- ^! T6 `8 [2 G
cd1.enabled=false2 E8 L) ]9 m. j4 q+ F
4 q1 S5 q: M& e6 j end sub' _( u. W8 {; i4 X% e
9 x5 z: U" _. }, S! j
连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
- _3 N& t- Y5 k
1 \& _( t/ S7 Z- ~+ ] private sub tcpclient_dataarrival(byval bytestotal as long)0 i( D8 c& E/ \3 x
$ \/ q% _' P! E" B# v3 _ dim x as string0 w# G3 N9 l; [+ Y6 }! t2 Y
6 [4 n8 ]1 Z3 a' c; r' |2 L
tcpclient.getdata x '使用getdata获得发送来的数据: l* Z& R7 @: I$ M: {
" [! j* u ]7 L1 m .......
3 s- _. ~$ I( d/ M0 `+ M8 W5 k( m1 Z( [0 E( W
End sub0 S5 ~8 Y# ~' t3 J
( W+ S1 O/ ^. x+ F5 }4 o2 L 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。6 }+ K6 N1 s% i) Z# d
9 e- z: i2 [9 C0 T0 k' c
三、编写服务器端程序, ?" y) g' }7 e% z F- `
& o, J; ^$ Q% k$ v 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
+ X/ y% E. @ I0 P+ J5 W3 J ?+ B7 D, J0 }$ z; Z" O; G K, L- J
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:5 o' Q# H, t! b1 }" [
1 c, O5 P' }! J, V) ~
'在窗体的load事件中对tcpserver控件进行初始化
' x, H4 m5 R8 F/ L
8 j5 `9 b9 R, f6 y& ` N2 T private sub form_load()8 P. c! m" N W8 p+ `# t
1 D; M; z d' m, E w- } tcpserver.localport=1001! d0 V) W( E: a) Y0 H- x
& z( J0 y3 T! M7 a$ D' {9 s tcpserver.listen '把服务器置于监听检测状态
% z( W& V1 h9 Z4 v1 M& |
/ c4 B8 W% T0 ^# O5 m5 e( z end sub( W* [" B3 ?9 O0 S% ~1 }" T0 I( M
9 C1 q! a/ r' @) a9 {$ v '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态/ M# S( g8 S& O
) T3 x! Y+ v$ W5 u* g3 g* ~/ s$ M
Private sub tcpclient_connectionrequest(Byval requestID as long)
# q# E- p3 f% P. x# u
( r$ n# z" [ { If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭 J8 c1 z" {) Y" B0 c, }/ {* b! c
! V- x6 k+ A, o% e, f Tcpserver.close '
( Y ]4 ]0 R. M$ K
/ i' \( C9 C8 b+ W; n Tcpserver.accept requestID '
' i" E2 j7 e! ?2 X- ?4 H9 j" x4 M! }7 Q' V" f! D/ c
End if
. g7 C% B, Q7 S# {6 }- z' p% d# \( l! T- u+ I* Q d
End sub
4 O5 D! |' C+ c [+ T$ M( a5 G! c& W; @, q( c0 Y, a
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。' }8 p! W2 _7 w# K
1 x# B4 N, y3 ?" v* H$ f3 }
四、测试远程控制程序
. ]; q# R+ x* X& i! Z! h. c+ T( ^$ k V6 i/ f2 O
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?4 s- }7 M) P, L4 e) o* ^% g: o/ y
$ {" T+ ^ |( b! R! |
% z. R) ~9 t$ x1 }3 D7 {- B) E% @# g7 [
0 I) P) P3 M2 l! M# e
3 J' q3 O. f u* u
0 B. l, k2 J/ H6 K# Q值得一顶,
3 o. n3 N6 u2 ] L2 l; l不过这个程序很脆弱的,真正的黑客程序要隐藏起来,那要用到很多的API,尤其是在2000和XP下边,是比较难做到的。在98里就比较方便了。上次我就在学校机房里偷过别人的帐号和密码的。女生的密码以数字为主,好像我偷到的没几个是用到字母的。 |
|