TA的每日心情 | 擦汗 昨天 11:45 |
---|
签到天数: 2282 天 [LV.Master]伴坛终老
|
用VB学做“黑客”程序
, R" Q( x2 E: H" t, R
" \; U9 S- S: p1 N
2 U) U5 u$ j1 F m H: x" i p0 T$ A1 @; O$ J3 o& ~" M4 m
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。4 j7 I- v. g( O6 v N9 i( K7 G: ~
* Z- Y0 \% M, Y4 K' F6 _( w
一、所用控件
8 Q! F/ R E/ E2 n
7 g. n; |, Z( m' X: B 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
; U2 ]8 {2 o& ^7 C4 K' I议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
% E7 c. e- i! a# \+ e3 q7 d0 G% ^
* ]& m% V( I# L7 @* r 二、编写客户端程序
+ H) o1 y( o C& ^+ c' f" f/ y2 p" Z. s x, }2 b
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
! H- c0 I6 t) ^6 @5 y& X7 a
7 X6 W! `' U# v6 R: p* g# R3 y private sub cd1_click()# w2 T k. T) i y7 K$ q: _
6 |) B; y* s. Q; v( a5 T
tcpclient.romotehost=text1.text# q5 {9 _6 L0 g$ s# n9 m9 h
; \7 [5 X: u3 y( Q6 A# p tcpclient.romoteport=val(text2.text)'端口号,缺省为1001
! h8 P) E) Q* B7 ~0 t- u. I% B* u) m/ f6 R
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
n8 x1 z$ X( ~4 {: x$ a; Q, T, Z' t" n0 n0 [
cd1.enabled=false
; n4 X4 U# t9 l0 C& n6 H& z( F( J z
end sub
/ c, q( d. l4 K% f6 G
/ ?1 u+ _: a2 b. }& R t" ? 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
" f0 f. ~/ G) U4 z
9 d; u) U: n: I0 ]1 c5 ^# m5 M private sub tcpclient_dataarrival(byval bytestotal as long)% ]( ^8 p6 S: @' }( r
. q9 r- a$ u/ V* g* o0 h& n+ v
dim x as string! s5 j4 E9 U# q! ~% G# m
: f& n0 _4 @$ n' F' y* F- K
tcpclient.getdata x '使用getdata获得发送来的数据$ d7 y# z2 ?/ `' `
% B' K6 @2 w' p) c( \; r .......% A3 h D' a5 W4 M) ?5 K4 O; F
' W$ g/ f" Z; ^2 f: [% c$ W. b End sub7 O5 {) J; d( y: m' r
3 `, J9 g z8 h- n 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。; C, M# e8 \% P) F* Y; \+ j+ i1 s) o
2 M2 v' ]3 S# `; D% @
三、编写服务器端程序
# g a& P5 `; o+ H( c
+ I" l9 C6 T2 {" o 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
8 N: m& N+ ?- c4 d9 t, g1 E
! C3 \! T8 l/ S4 w 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:
3 Y& ?* h4 J1 _1 a0 W) ~7 d$ ?% U& O' r. \( g
'在窗体的load事件中对tcpserver控件进行初始化
8 M; Y# m, v/ R# C0 \2 [7 X
) }1 T! b0 ], o* F% l private sub form_load()
' \2 y) \( R( L+ R @3 Q
, _$ T, ~* D W' f) @ tcpserver.localport=1001
/ b" E Z) H0 }7 |
* N/ v4 q; b7 I$ v; w5 m4 ~1 H tcpserver.listen '把服务器置于监听检测状态6 U6 V. j, \9 {' t! S
" ]+ r% e- h- P) H: M7 ], Z9 }
end sub: L4 Y7 W9 i; M4 ~9 A. y
* \ {; g6 k; [( c
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态
+ W7 i, T) S9 k/ H8 [ Z6 ^/ m) {3 w1 A n* N
Private sub tcpclient_connectionrequest(Byval requestID as long)
7 A5 Q6 b0 r3 G$ k8 N3 ]9 z+ e# u. h
0 U4 {& [& V" s( W If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
+ f1 @# X. J* u
' _% y- _2 k- o; H* G. ]& ^% u; j0 V Tcpserver.close '* u+ c. F4 [( R9 h
6 F2 h: ^) K$ l' U; f0 d. P Tcpserver.accept requestID '
% V8 m2 e, b- ~* Q: }/ K
0 ? L: x/ p) v End if
! O, n5 s1 D7 J3 K; |# x% Z
2 S8 x( z5 T) w5 I' ^ End sub! ~% T: \- W3 {7 }! z
- @# q' z+ U- _: e5 R 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
5 Q4 x0 I3 _9 l9 c% D% L! f" q0 W/ D+ \
四、测试远程控制程序
" i* H( ~$ |% o* X) h9 o2 \8 {8 |* B1 f
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
" v- Y6 N& J" l, I1 {5 O( \
" R$ `9 N( u# ]9 O
3 L/ H: B: s7 I% t' p8 N% O# Y. F, t( Z- p+ f' Y
2 M+ K; T1 H1 j) K
% u1 i8 G& j' e
' @# o( U4 W, d: k; a4 D A" A
值得一顶,. n7 n" t7 p- y9 Y
不过这个程序很脆弱的,真正的黑客程序要隐藏起来,那要用到很多的API,尤其是在2000和XP下边,是比较难做到的。在98里就比较方便了。上次我就在学校机房里偷过别人的帐号和密码的。女生的密码以数字为主,好像我偷到的没几个是用到字母的。 |
|