TA的每日心情 | 奋斗 前天 08:42 |
---|
签到天数: 2284 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序
+ `3 q+ s- s7 s* @) e7 O; j # {6 O4 B, P3 b5 k" V
关键字 VB,黑客 6 i0 J, ^+ N) S9 @
8 M7 q: {6 S# t1 @; p+ U5 s$ L5 W `5 l/ O5 a" S: m& C1 p
# j( c' q1 U H5 z& ^
用VB学做“黑客”程序 X, L: f3 |4 e; s
- w/ r8 x* r9 { 3 l/ h, q) ]6 Z
# W, z& E/ A: T' w3 _& b
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。0 @# t2 k9 y# L2 Z0 z$ b
5 Q! l' j$ t$ O3 C$ I
一、所用控件
- ?/ c5 ~6 Y" @/ J
2 F* w6 `' _) F8 i) P 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协6 t" D/ g0 D1 V% |# H
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
1 w1 H0 ^& J. b3 ]5 ~0 `, I" ?2 \7 z, ^0 X1 G! k4 @ B
二、编写客户端程序- k+ S& D9 [+ H
I7 m2 z$ y& I+ E
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:" I( A5 o. k0 _
- Z3 K+ s0 p# s private sub cd1_click()
" o/ H% i* q$ X% d5 J# u% W s* |
6 i y1 P- l( s tcpclient.romotehost=text1.text
, H8 f5 i- i# I1 p( p: W8 R0 E! K" ]9 W) ]2 E$ q
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001
# r$ ^6 T: b% q% C' s7 A
1 D5 O+ F% P& @0 l! d( a$ B7 l tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
, Y$ x5 I* h/ @, T
9 g( M' m3 f" W: e1 v6 d& N5 K cd1.enabled=false, n- p$ @( t5 e$ L8 l; c
* m" d v x) k& s# P# G6 b end sub
, }% C1 f" D0 I. |) n" w+ X6 D y$ @ L' y7 U$ E1 X* T
连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
8 [/ k; ]+ l3 k* |; _6 |) Z( B# k! G( e. `
private sub tcpclient_dataarrival(byval bytestotal as long)2 h( K' f7 G$ ~
5 f" x' Q& g C4 z& Q& Z dim x as string* e8 k3 @2 [7 E) B) c+ J
& J. m% H9 r( Z/ E1 Z$ r tcpclient.getdata x '使用getdata获得发送来的数据) s) O# V# P$ N9 i, H
w" l3 l; C% [0 V4 V .......1 q1 {& x0 ?- D% x
0 _, E# ~1 N, B: R5 w3 D2 J5 g3 Y End sub5 w D* @8 @7 S1 l" _
" y7 s/ y# j" v% F4 \2 z
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。
) x8 {6 {) \" [/ ]. F, U2 \2 T8 }
三、编写服务器端程序
& ~0 o q# H( i4 q
& R: e* R) o2 |+ T' \ 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。7 s: S; g8 n8 t: u; H3 d
8 C8 S) Q% m$ n9 ?8 B) q 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:! H$ j3 a0 Y. I8 Q z4 C/ r8 ?1 b
+ G7 H. m6 b- T) i" k6 h
'在窗体的load事件中对tcpserver控件进行初始化
2 k) V. w) ^$ Q) G R% R' L6 Z5 W! \9 G2 Y
private sub form_load()0 S' e* Q# ~- R
" w3 T1 }& h' _. l5 D& `
tcpserver.localport=1001
. ]7 q8 x1 r/ B/ g8 ^. W L* a
tcpserver.listen '把服务器置于监听检测状态
9 n L& W# g( r% W6 b
2 S9 z3 i A+ q end sub+ Y1 ?; N# G. ^& ?
4 c5 T/ P v8 c0 b
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态
& m9 Y& n$ i- a5 B1 a; f: H
. [& ?' d' I5 @ Private sub tcpclient_connectionrequest(Byval requestID as long)
$ `8 q/ [2 y: ~* U( L( E! \ J2 `, R, _# F5 ?2 P0 r
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭* n* ^: Q6 R$ r4 L- t
: D V2 T+ N$ v/ y2 H. k( E- Y
Tcpserver.close ': V+ s4 ?+ R6 G& U0 I$ W
; ~. _4 k9 o$ r6 f# ], A Tcpserver.accept requestID '
& C2 z, p4 z5 }% O: L* Y6 [
$ s7 u7 p" h4 {) K) @. S P X! O! [ End if6 h7 { B. c( X, M
2 _- [6 r1 w9 N+ z6 M End sub. J: M, H- i1 W, N$ Q: x
! V& p( r' x2 H \ 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。6 Z! Q- U! I7 j) ]) {9 i
$ T7 u# G5 Y: |! y 四、测试远程控制程序
% Q# x0 T+ q( ~2 |5 N( y9 }: i
" `- l) K' b6 O% F- d' S 现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?. `* h# l; l3 C' z5 ^+ W
|
|