TA的每日心情 | 奋斗 3 天前 |
---|
签到天数: 2393 天 [LV.Master]伴坛终老
|
用VB学做“黑客”程序1 ^" O% L# V2 q! t( K7 u
* l& X1 `9 b$ X% x4 d& j
o# W8 q8 B( A* u# |
N2 g" Y: t( Q
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。0 v( t6 d2 r$ M' `
n! x% l ^( i8 Q9 N- M! e* ?' t0 o- x 一、所用控件
$ d& Y! b/ ?4 x: y2 ?; m0 R$ S* ]* a+ F# ~( X0 r. a
在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协+ O/ L3 t9 n; Y
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。) h0 L4 d; I1 b& p+ H
?6 } c" e% o% O, ^& _! `
二、编写客户端程序
/ g" _+ {; f+ U" w$ i' u1 s9 M) l, g
2 U5 h! b" T: z- N' [" e 首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
7 O4 |3 `+ C f/ n0 d5 u' F1 V' g
+ N, x8 ?- m. [: b private sub cd1_click()) }- {+ w9 w5 A$ M9 v7 u4 i" K
9 A# e% G1 |9 K2 \3 o tcpclient.romotehost=text1.text% _$ I6 O6 d9 s2 R; V$ ?+ R @) R
% K) F B3 L: A, T tcpclient.romoteport=val(text2.text)'端口号,缺省为1001
) b6 e& H6 e' j
. q$ _2 m8 Q3 v6 {- I' \* K4 k( R tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
* Q2 V0 J$ s) f
/ }* |) W( f1 u+ e cd1.enabled=false
( ~( q& d, a$ F( b9 Q" T r2 c/ C( I0 |" m1 V, s9 P/ c, y
end sub9 s3 K/ T/ ]2 j6 w- D5 D8 Q& U3 o7 n
' w2 G( h; b- ?7 [* y 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:, l5 Z9 n4 U- v: K1 d& N
# w+ e+ y9 `: L! G( C+ o
private sub tcpclient_dataarrival(byval bytestotal as long)
* K2 V) h- ~. g; `% W9 @0 F$ d9 ^. Q$ @: j V3 d
dim x as string
; I4 V& ]" e. L6 C
" x8 Y% _& F2 `+ G0 c' t8 y tcpclient.getdata x '使用getdata获得发送来的数据8 e0 y4 a2 f3 Y, a$ b
) l( y* v4 @1 y9 f, V% d" J7 x
.......
( I% i( }9 ]3 p* K4 y. m! }5 o
" |2 L) E# f$ ~) m End sub( Q8 I9 f( l; D! e* d5 J k E
( [6 D$ o- B3 W' _ 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。7 i/ ~' a/ ?& z+ X/ H4 J
2 Z% _8 L, X, }& a5 y+ e O
三、编写服务器端程序: `6 l( E9 U/ t9 |
( S$ ^! `$ B+ |
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。! L8 z7 \6 y) Y2 y
6 P T. E3 g/ |& I& M+ y 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:# h/ P# e5 A. E
% A# _; v$ j( S9 A
'在窗体的load事件中对tcpserver控件进行初始化
: m$ \; I* c) `/ t8 f5 q: S8 X2 y% R# t0 E
private sub form_load()8 H% x; | n1 w- ]( ?! L
7 G t: p' R' [0 J3 \9 E0 N tcpserver.localport=1001
6 P/ N9 p- V: \7 n3 P2 S1 K }2 \& p5 u( B4 j2 B
tcpserver.listen '把服务器置于监听检测状态
^$ w1 V( Q5 O- C0 T
, n* l- @6 P1 V; O! H( z- ] end sub, u- _( h& X; ?9 D1 I) [& M4 K
! y O) s: A; a) y0 b9 |$ A! ] '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态2 n0 z, [5 q4 D- f) t9 Z
1 X; r( C* b; Q; d Private sub tcpclient_connectionrequest(Byval requestID as long)2 a& [ p' T9 M2 C% {
: N, E. H4 p( q3 @/ t' l( l If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭8 K3 H# }) M8 ^! F7 N$ Y
) `0 m# h6 g) p
Tcpserver.close '- D. P3 ^2 g; K+ c. k
9 l% O9 k/ m: L
Tcpserver.accept requestID '1 V0 S& ?$ X; W5 ]
- s. B6 M( P0 @7 C1 n" w End if$ t$ e& l) Q1 q' m9 l: }: Q
/ ]# N+ l5 W6 N! ]/ |( s
End sub# {. t/ O, N5 N* { U! e% y3 w7 b9 o
. a7 {: ]8 Z% K& W 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。0 R# W5 O/ I0 s5 N2 n
( G+ L+ O j4 [ 四、测试远程控制程序9 i- |* @0 M1 d
, @7 ?( J# w3 N. M2 ?7 O2 ]
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
/ i6 m6 V7 j8 o [( F+ ~) h' v3 I) c; m2 _$ u) @9 K3 v. J. a7 @; S
& D8 g3 p z6 L9 i, M; L
3 D) n& e* [! w' O z9 u% P0 [$ a6 A, J
& I+ r; [" B2 P0 S$ y4 ]; c0 O3 e' G4 ^1 B5 Z6 F
8 t# p0 X1 u0 z+ J9 d值得一顶,
6 F" n7 V4 z3 V不过这个程序很脆弱的,真正的黑客程序要隐藏起来,那要用到很多的API,尤其是在2000和XP下边,是比较难做到的。在98里就比较方便了。上次我就在学校机房里偷过别人的帐号和密码的。女生的密码以数字为主,好像我偷到的没几个是用到字母的。 |
|