TA的每日心情 | 奋斗 11 小时前 |
---|
签到天数: 2398 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序 $ ~- K8 l5 W& R0 p5 D
; |6 y! s9 g7 F8 O, ~# I/ A
关键字 VB,黑客
s( E+ T# d' V) p" ]3 _ ~1 \$ z' d: f. Z% J. [
) V9 U2 P. g, `; I. ^2 ], @5 W; _% |" i4 ?( w/ w; M; p5 ?1 ]
用VB学做“黑客”程序
. e8 r% w0 h& Q+ `4 ^1 f2 P! r7 K# \1 g% }2 I+ [
, d) [. [" F+ V9 f; \
7 n% K6 `% O2 z* B) D P
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
; R$ z$ h1 o) S
Y' a4 E% I6 W" y: G% v) B 一、所用控件
/ K" p% g( ^7 r! f4 m
1 y* i. |8 W" w; {2 a# [9 E8 p6 W) ~ ? 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
8 v, F. l7 ?" l5 S. _6 S; L# B% l议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
" p% l5 \( N9 v
' A. H; D4 e; X1 \0 k3 F 二、编写客户端程序
9 ~& T7 U5 }, @ P* Q+ \# {1 J' A) j, Y5 |
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
( u4 B, a" I9 }. ^& G9 Z( j5 T* x( K# D8 R' e6 h7 P+ _4 A% R
private sub cd1_click()- A, Y0 b& Z) o" E( `
6 ~: u$ Y2 r y tcpclient.romotehost=text1.text% z' j8 C2 ^) L& E. i E c# _ t- b
& v0 ?% |$ H& [ tcpclient.romoteport=val(text2.text)'端口号,缺省为10015 m! s! B: o" j/ h0 _9 u
; _* g) u* O- x/ a
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接- L1 Z& g! d. h
. V7 \" I: j# u, J9 N
cd1.enabled=false. }* j% U! E# Z6 J0 I" ?1 z
. c5 c) P z2 A/ [! V
end sub }! j4 L- a# d+ @
+ C% T5 C* @ s/ `( k
连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:- `: m& y m- M* o8 H' Q
2 O! A# i* P/ m1 w private sub tcpclient_dataarrival(byval bytestotal as long)) n4 O' v8 b j( t/ g6 S) ^+ M
5 N n. ?0 v! ^8 D/ _$ s
dim x as string
8 d! ~# z. s' ^9 C3 x' Y
3 X% i' k y4 R; z( ~, K# |$ N2 [ tcpclient.getdata x '使用getdata获得发送来的数据3 A$ o+ \6 S, {/ e8 G; B
% ~, P3 M) y$ k" Z( t6 L0 E8 r( E .......( |0 l+ [/ ]% W9 g' o5 G1 |9 Z
! `/ B8 P7 m9 a2 ]/ i$ j( r End sub
9 c7 a; b" o1 F0 e' h1 _7 x/ [; G% o2 o5 h; F& _% b5 F
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。
y* v" j: B# O5 e# z' ]5 D" |* G! j- a# |) r
三、编写服务器端程序
/ `* t6 m. {( h0 q! A$ E' B5 K5 ]
+ e: f5 N V, H& u+ `' Y% c8 b 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。% D" j) D& D( s) x
) I) h2 e( |. C
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:
0 t2 U% q7 }" `4 i& \
# Q+ s& u( t( O6 x5 { '在窗体的load事件中对tcpserver控件进行初始化, }: ]* \7 h7 U; P
. n2 k2 T! t H2 B4 A4 a1 ~
private sub form_load()
7 f9 c/ l& a; {( a
1 L+ J* x' t# a/ _7 b/ z; u tcpserver.localport=1001
/ x2 a4 ~! G& i8 r R, p" A1 a) j; ^ q7 [6 p3 j- z J3 J
tcpserver.listen '把服务器置于监听检测状态/ D) V U: s4 B1 ^- U
5 Z4 v! w" ~; u, C+ g end sub
+ Z- x D+ q( {; `2 T+ q. i
' _$ H8 U: q+ I4 D/ P0 g '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态* [- l7 B( J' n/ a+ H
. o$ M* x( a6 u" O3 O Private sub tcpclient_connectionrequest(Byval requestID as long)5 T1 T; h8 R0 K B( P
6 X; y) }/ _/ _" a7 L
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭 n+ N8 q4 r1 n* w6 p
; _# [. Z; b. I3 V& e" m% B- ]4 ~! \
Tcpserver.close '
* {7 h. Y+ V: P7 Y; K& n: ~0 g6 S- w1 [. q9 A0 x
Tcpserver.accept requestID '6 e6 j+ G' _3 r* R, D1 P0 A) t
3 m5 K6 P% c" t& {$ ~ End if% ^% A1 Q1 q0 G7 E
, I' N4 z0 Q5 p. K4 X
End sub
5 b! s" w% i1 }9 j* ?% L/ {/ |6 N5 v* k; J
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
% x. M! S/ g$ B4 A9 G) T- k2 B: E/ @1 g s* x
四、测试远程控制程序
8 o2 b9 o0 A3 p# ]6 b+ B
. U, [) q+ e) B' Y: W" X 现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?# Y/ S" I" `8 N" z: E/ w7 M' z g
|
|