TA的每日心情 | 奋斗 前天 10:07 |
---|
签到天数: 2385 天 [LV.Master]伴坛终老
|
用VB学做“黑客”程序. O; ^# J% N6 h: ^) g
/ M1 S; R& l" f, k7 {- {8 \! `
# t' u/ B3 R: i; F9 J5 I
) c! z! t& p" @3 M( |' a6 X, K+ b 只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
2 ~1 S- n' ?2 g& H1 h/ k7 u
; x6 C( S h: Y% b" Y 一、所用控件6 H! b" l2 s% k3 ~5 @" C, Q# ?% }
7 Z' ~' G& [3 {4 u# b1 A
在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
8 K! `% h, t& G: b( Z议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
- E, p) M$ ?5 r& |$ W' P) X) b% O n r4 W3 Q. C
二、编写客户端程序
. a+ U; o5 Y* r2 w2 r; j6 m) X1 N( H7 o( l
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下: Q; Z) s$ u& G3 w
, e0 p; K* H2 I7 R# \ private sub cd1_click()6 V/ Z( s) Q6 B W0 _: M" j
, S q4 q# ]5 u. Y
tcpclient.romotehost=text1.text. e P. V, U: t, u: n, m
( _ d; p0 H( Q( |, m* ~4 j
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001' ?3 ?, q6 W4 Z
3 H9 b$ w) n+ W3 f# H8 C tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
% X |" r' q" D! _3 e& d; v- Q2 \ S" b1 A& H5 ~7 }
cd1.enabled=false
: ?0 r, \: q8 g6 R( d' s
; E, c/ [! N2 Y end sub
! ~3 a7 N2 F; ?$ \( ]. j" S8 j9 T6 I* [
连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
$ ?. _1 Y' k9 j7 J+ q; K' H) g, v _7 ?2 Z
private sub tcpclient_dataarrival(byval bytestotal as long)
6 `! C( g$ @2 _9 Y/ K0 i N0 H* D$ ~
dim x as string
- N& _& |/ F# `* C+ j5 g3 w7 n% H% i8 z6 _2 e( [8 s( z
tcpclient.getdata x '使用getdata获得发送来的数据
3 F3 ~0 }. ^9 g: G* z3 Y4 B# E
- G# u/ L5 ]4 d& P2 U% d .......( k7 s9 j* Q- t v1 i
S2 V' o5 V' I8 U! J% O4 c End sub
% ~' R6 c- Z) K- ]9 v$ B( o9 Z0 f2 g# m
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。& S" L, v! c' @5 g8 p0 ]
. o- S( y7 b7 w0 ^+ i7 n5 h- D2 F 三、编写服务器端程序$ t0 |; U% W/ Z; A7 T* @
. r3 W+ ~1 d; k$ A+ t5 e. p. A0 x 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
& J7 Z& G/ _: v* g k' z; N- n! \$ w7 u" _6 S! P/ S% p x
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:: N/ Q2 d) b9 M5 F
5 F+ Y% z$ P( d '在窗体的load事件中对tcpserver控件进行初始化
; P" U& B& \$ \, o% i6 Z0 `
% q# f$ [" c+ n v& h6 U private sub form_load()5 u1 V" K/ H b R* e' j
' k6 B) I+ K1 `! _/ F/ m tcpserver.localport=10013 I4 j- k1 a0 d$ N& q' G
2 O: X% V7 f6 p! g' _0 L4 V# V. O tcpserver.listen '把服务器置于监听检测状态& T d8 c# S5 B' F: a
! H9 t) X$ W2 K& n6 g6 \4 y( |
end sub6 [" O3 p, b9 c9 S" s
( k, Z# ^6 o4 d& M# V/ k '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态0 O" w& G( G; w, C8 W6 Z' L# K
' @8 v& T& e9 J2 D! I; Y/ e Private sub tcpclient_connectionrequest(Byval requestID as long)! ]. g* d, L/ T& f
/ H/ Q' x: n+ L7 _5 Q/ C# ~ If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
0 I% S, F4 h8 e( g
0 p5 q6 H7 @& N! K, ? Tcpserver.close '
; W* i6 U0 J, P) F+ C( ~
: Q9 o: l( n: a. |8 c Tcpserver.accept requestID '
- w# F- ^. W9 r& W& \9 L
; t+ Y$ m9 d g4 d) k. h. W End if
# T x; M! z% W2 R$ n7 }+ G3 ^# T* |1 ]- F) h: b$ N3 u! V4 D
End sub
1 A# m% k- l7 L& R+ f
5 C+ D9 x( b4 W& _1 a2 T 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。) V, {( f+ P" ^! P
& s: S$ X" f/ h8 x
四、测试远程控制程序! a: V9 Q0 V# N- P
6 j7 ]5 j, d/ @9 i x j8 T" R 现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?0 J2 k) ?7 r* Y
, `( j0 r" n9 x3 u4 u% M
' x* P) Y, C. G# q$ ]3 A) I2 w( k7 D: @" ~& M7 _# s
& a, [3 M# c6 y- N4 r5 s: p
* T. F, r2 @9 ]; T+ ]) R' I; o4 @+ Y
/ b& D+ l; ?+ o4 c5 K7 _值得一顶,
7 a" d$ n% g' @, @* @不过这个程序很脆弱的,真正的黑客程序要隐藏起来,那要用到很多的API,尤其是在2000和XP下边,是比较难做到的。在98里就比较方便了。上次我就在学校机房里偷过别人的帐号和密码的。女生的密码以数字为主,好像我偷到的没几个是用到字母的。 |
|