TA的每日心情 | 擦汗 12 小时前 |
---|
签到天数: 2270 天 [LV.Master]伴坛终老
|
用VB学做“黑客”程序
G G! N4 d. J3 O: a5 [. g* @# D5 A
9 N$ x3 V' A5 R5 g
* o+ Q8 J" e0 S, ? W, x/ w) F% D: I, ^
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
8 t, W" A: n6 \' {: t
* P0 C/ @4 p! G( a- { 一、所用控件
* C0 s/ `2 ]9 ^, y& N
2 m1 T+ C+ d5 z$ {* K n- O" A 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
/ ]( q# c1 W3 q$ s( A议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
e4 z& Y( {" `. d
5 Y, u; H) N; N) M. ] 二、编写客户端程序
7 Y5 y/ R3 S4 t6 ^3 n. Q) K
2 X2 v* L$ ?* ^ 首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:9 X6 ~3 r2 G% z, t5 x
/ G5 v+ s8 X: `% k4 N: j
private sub cd1_click()$ [ K* U. B* K* g0 g( l" P
! t3 V, N2 i3 c r: X/ I tcpclient.romotehost=text1.text' x l6 w& Z, `+ D. N
, z8 U4 N! W, Y& A
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001
* L" s4 `' Z( Z; Q) y1 C' ?* h- A# b h' h
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接% N, y* V! E- d; u5 Y
, A4 \% s) |! L8 s& ] cd1.enabled=false
( G/ D9 y% v: m6 O0 v0 b4 G- x1 r- x6 _% F' ]; q: |7 X
end sub
2 J7 g' ^4 c$ r% h z' a" }) L
连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
, d, o7 l, V9 I8 r3 g/ c* u* ?0 [ c0 o/ z
private sub tcpclient_dataarrival(byval bytestotal as long)
2 U% U5 z4 v5 E1 M4 X% O _) S( X" |4 F/ q( [0 c8 ]
dim x as string- O+ S% x' q! G8 N+ G6 [; _) a: ]" Q
% c9 O% e$ w; m: L4 ^( R
tcpclient.getdata x '使用getdata获得发送来的数据
( E4 M) q2 b) R
: c5 L" O2 t5 {/ P: {) w .......
( u/ T, s0 M9 P5 r7 `) I" L: p1 o" S4 A2 e/ W( F
End sub
( i- ]7 |& x6 \% U- k
# Y! U; |+ [7 U$ D3 M 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。 ^2 Q7 M; C/ _( V
; a' f; u$ V" v f3 y! Z, f
三、编写服务器端程序
$ N3 S" q+ \+ P. l9 W& S N3 |# x+ O! C& M3 N* F. L
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。! b9 x' L% b' W* F/ t! Y
+ T# e3 c) X5 N1 }1 y$ ]2 V1 M 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:7 ?2 W4 T3 K; o4 A" Y
: F) F4 G) v* t5 B/ l- \- }5 g+ ^ '在窗体的load事件中对tcpserver控件进行初始化1 ~3 a8 M. y: {7 A8 [0 c, M
# D( N: V1 f. W; l: n1 u
private sub form_load()
0 k8 L7 K# r. a1 O
7 e5 S. Z! N# A- M' q2 ^% l' A tcpserver.localport=1001
1 p( Y9 n+ a% y
& U1 }6 z f* h3 W% J+ M, }: g$ E tcpserver.listen '把服务器置于监听检测状态
5 i& t4 d' ?1 B$ m" W
: o9 |2 w( P. d+ @+ p4 u; U& X end sub% y; E& D& r6 l( a
9 ^# B, f# m% Z0 d8 I
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态* x& [2 E1 o/ r$ K
5 L. G5 s7 h8 ?# u, P' u Private sub tcpclient_connectionrequest(Byval requestID as long)
6 k e1 ^' |$ z5 R& a) l6 b7 ]7 H0 g* r* S/ n- [% A- s( c
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
- w, }4 |) \* q# \1 [ F: l# J3 C, t' i% u# G0 L
Tcpserver.close '
; j$ j( g- x$ _
, t9 B# Y. c/ w! Y' w: J6 r K Tcpserver.accept requestID '1 }% S) s* t3 b2 w$ p) i" j6 |& W
% F& K# P0 r/ P; V- I
End if
2 l+ b1 W5 f5 d. W& k$ t" Z( T) u+ f- S5 d) @0 G
End sub
1 E" a7 Z) T' m+ n
; ?5 R; g$ h/ c* }- _4 ? 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。# ^9 L, X, l2 }" O4 ]
. f& S2 x. V5 Y; m- p4 x
四、测试远程控制程序
; s+ ~/ J9 c8 _9 Y5 P. m& I1 |; k1 g8 q! G- R7 m7 h3 h) J3 w) n
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
4 N* a* K$ N, A+ W4 L
7 o. h% q& @4 D. J, F# t' a/ j; }$ C) g3 v
# E0 j+ c: A1 p/ Y1 F, y
0 I+ }5 e! b v2 _- |
5 C8 M+ C" r( H: l; {9 b, G t; d" |' Q
值得一顶,4 M- L8 z: }2 K3 r4 E
不过这个程序很脆弱的,真正的黑客程序要隐藏起来,那要用到很多的API,尤其是在2000和XP下边,是比较难做到的。在98里就比较方便了。上次我就在学校机房里偷过别人的帐号和密码的。女生的密码以数字为主,好像我偷到的没几个是用到字母的。 |
|