TA的每日心情 | 奋斗 3 小时前 |
---|
签到天数: 2398 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序
z( {7 P4 d' D5 y' Z; L4 N
$ ^: O- }. w) [9 C! H1 n& ]+ H关键字 VB,黑客
9 ~6 L) r9 F- k( r. B
0 ~4 R! L% ?1 O% `
6 Z7 [0 e, n V( a3 J4 o/ x2 g4 j
/ x3 I4 W7 Y2 t" b) m* O0 ?/ r9 g用VB学做“黑客”程序
) _; W. r2 e' F0 s- b8 Q1 ?- e2 O ?$ V- z0 l+ o. L
1 J( l' ^; P7 S& }
& l( `8 J$ i; R; |. `& w 只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
9 a/ s% T6 r, x5 _) B- B6 u7 A' f; _1 \7 t2 N4 P8 X% `; V+ e
一、所用控件, a" A& S! b; K! ?+ ^
+ y5 Z \2 f8 ~, F3 h$ \ 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协! ?; N* |; a. o1 B" U" F! o/ }8 L
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
- J& H4 F* W" c, }! l5 Y d2 c' ?/ n7 j; s- W; B# }+ X9 k
二、编写客户端程序& x0 L6 C ?3 V" w h
: r+ W! b) O' d; Z
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
5 ^4 _0 z: \( [ j- ~; x2 U8 X# y; R. J- d ~7 T; ~/ _4 `3 x2 n% C
private sub cd1_click()- t4 s/ U% y5 V+ z+ z. c% r2 }
1 `3 T; Z; Y3 U1 s& e
tcpclient.romotehost=text1.text+ m3 [1 c# P% l0 M& N; b/ `
3 j. D" q/ ?% ]+ S3 M: e
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001) K; u: j1 l# C0 E) I7 {/ m+ Z4 Y& X
# d' C' \6 I" y
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接% f" b4 p, Q( ?6 W
) X/ @4 G3 J( ]2 [+ f8 u2 R cd1.enabled=false: e6 c& ^5 q2 u$ q2 t
; Q! B2 R$ f, W: q @; t end sub
- `* x y" C4 ]/ {/ A3 i9 U# X$ R% w6 W7 B9 ~' B
连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
! S. e I% D) ], a) k! Y8 ]8 w) I. L9 y+ R
private sub tcpclient_dataarrival(byval bytestotal as long)
& ~! A& @, ^" Q" L* o" n6 }, o
2 R) j9 b: `. K0 A dim x as string- b2 u6 g( p" \
6 X' L$ u7 T4 m
tcpclient.getdata x '使用getdata获得发送来的数据
- J* L8 T6 _& I& {2 ~! L0 ~. h4 O' b
......./ ]# X+ m7 m) \' W! v K
. F1 U6 r, `& S3 |8 a2 J
End sub4 G) T9 k' z* Q8 v" h k
/ O% x: C) d5 A' {+ C
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。
; k6 W) y. [5 G2 ^: D. X8 E0 s2 m. `( D' b; ~. T
三、编写服务器端程序1 b0 g7 ]6 S: a: X4 ~% n0 c
$ O) N2 X S! W" _! T
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。3 {: o' j4 O9 b5 [! m5 |9 Z+ Q# k5 V% A
' R a* _1 w& K
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:- G" P3 K; N$ l( D
; {) _" M7 B+ s( G- E4 w
'在窗体的load事件中对tcpserver控件进行初始化
; B% N, o% Z& x+ t/ p4 ]$ B8 n5 [) k
private sub form_load()
8 I. k+ D/ ^% U3 o
$ z6 b% _0 J" e tcpserver.localport=1001
. R& N% _+ e/ ]1 a# v7 n* V* K$ t! X7 [& J% z7 o+ I7 g5 y
tcpserver.listen '把服务器置于监听检测状态& z+ `" Z4 @* Q
9 \* t. g. O4 v) f
end sub
. L1 r; R& i) h9 n! ?' R
! A$ @. X" s5 M! `" @6 P+ ^ '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态4 [% P4 u" ?: h7 O, C
8 i/ J3 A9 Q8 _" } y
Private sub tcpclient_connectionrequest(Byval requestID as long)
" m. z) N3 U9 o+ V
$ S1 \7 w9 u- a& ~0 z D% D If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
- C8 ?: {9 B3 q2 n
: n( D& Z0 e/ h Tcpserver.close '; v7 U9 l0 r+ r* D6 [/ C D
5 P+ _( m5 D0 D
Tcpserver.accept requestID '3 q" H+ s$ l* X% Q$ U1 `& @1 {
8 B$ p2 o0 M5 o, g/ r/ r& ^. a End if& t3 w4 r8 K5 [2 g2 O9 _
, C. K. x$ B3 q; M3 t
End sub
7 J6 }6 w8 ~+ }9 q3 ^" L) F/ A+ W3 n* b8 {
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。% \" x% ]) o. g% W. s. Y3 V
! O. }# N7 c# F4 X 四、测试远程控制程序8 S/ A4 I. @. K3 N. L2 F$ ~; g) R
, x3 h ^2 n; k1 B3 [# z9 n, Q 现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
* {6 Q9 b, e# ^# m! h |
|