TA的每日心情 | 擦汗 10 小时前 |
---|
签到天数: 2268 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序 - u& s2 k5 @. p
! }$ A! E% e3 d; l+ H+ ]9 u- Y关键字 VB,黑客
4 q- C& P! j7 o ) _( D7 K) J5 K- m+ a% T/ \$ Z
7 ~5 k. r( n8 f2 q9 } I% D2 T" b1 g+ B5 b
用VB学做“黑客”程序
" H2 u& i% R7 q0 j
# j5 ]/ D/ O6 \7 W" b i
$ o6 b! l( G0 R9 n& r8 Z, i! Y! C! M
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。2 @3 s: ]$ M+ v) }
u4 W! d( P; S. |: d
一、所用控件4 X$ l/ s- |4 `+ ]
9 N0 E5 l9 H" h% E. J# `
在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
4 ?# X& Q: f9 K) m! t$ q议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
# c6 L/ Q1 @7 j; J' v$ O. l+ G. ]! l" \3 F2 \
二、编写客户端程序
% u S6 ?0 P! C0 F0 a9 U# l6 {2 J8 M8 w( N
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:- k/ z- J8 J. p, m% i' `/ p7 h: R
4 r5 I% z& e5 b) ~
private sub cd1_click(), h; G$ ^" {' N! j6 G( T1 [" o
, {8 w) ~$ S6 R: g' T
tcpclient.romotehost=text1.text; m# R% ?0 W! y1 b- Y A. ?
/ W: d! b# i( a tcpclient.romoteport=val(text2.text)'端口号,缺省为1001/ |) f R, x/ J' [2 s0 a: a) s. C
6 k2 u; o% g0 c b) J
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接9 a! f; Q, ^+ g1 j1 ?) B3 x+ r+ v% [8 d
/ w4 S/ j+ ?% U cd1.enabled=false
$ r2 k1 H8 q2 c& t& \7 b: P% z4 X# W2 |
end sub
! R$ Y, ?0 R7 n; p# s/ u& S8 c* @8 ?9 h: b
连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:1 o; H4 c) C, v/ k$ O; v4 T2 b) `+ H
( Q7 K) h7 B8 l8 J2 Y, e! ~ private sub tcpclient_dataarrival(byval bytestotal as long)
9 @% N0 T! G6 Q0 a/ R6 u3 \
4 l" J- j& b6 i: a dim x as string
! s: I' Z5 @2 U( t5 J
9 T4 ]/ t" b) z1 |# N4 R1 Y tcpclient.getdata x '使用getdata获得发送来的数据+ i5 s" Z5 c" a: i
$ g0 b4 Y2 ]$ g- @ .......
0 T! X1 [3 H! U% ]$ A: H) N; i
5 N7 a2 |+ N( M; H, L End sub( N" Q& o) v" E* s
" G! G4 J& `% O 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。) _: M B. ~. f8 b, Q9 g
8 g9 B. N$ K0 A/ o3 r 三、编写服务器端程序1 D# c) [( K7 C' K. D( M# I: k+ P
8 {0 k j3 X9 {; {- X6 @4 L2 `
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
. ]9 v% U- B: `! i$ d( N9 ?' T: V5 [/ T D
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:; k7 L3 s: T! }
# x3 M$ V+ u; E' R2 u7 O7 o0 Y/ \3 A '在窗体的load事件中对tcpserver控件进行初始化
2 o: B) I) ~0 ], p, {2 p' e4 ^1 R4 k- [0 i+ ^& e
private sub form_load()
: x. B0 t% f5 @' t! ]% X: S \# Z( `4 T; S0 w: I
tcpserver.localport=1001
# U/ l" L$ s+ C0 u6 `% w( S: E
( a4 f, k1 Z. ` tcpserver.listen '把服务器置于监听检测状态0 D: k1 Z% }! u" X3 e% d& M6 p
8 o6 X6 [( D1 e f# _
end sub
+ e* b9 S3 g! }( n
1 F+ }) k2 T/ v) A: Z '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态7 j" F/ e, I3 x. J# u
: D6 ?; J* G; s* }
Private sub tcpclient_connectionrequest(Byval requestID as long)- S4 X& f8 ^3 O: p% t. S
* @" Q0 W1 k% e, p* _% C
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
; ?1 [) U) N& F$ P" ]: F
4 Z0 j3 H5 y0 @$ P6 G6 v6 Q Tcpserver.close '
) g; V n5 I5 [/ C' H- I* R' V8 }1 ]6 Q+ `1 P
Tcpserver.accept requestID '
/ [0 {/ j! V f3 a+ Q; t% h) e2 S
; Q, j$ c% h) t- S6 r0 g$ E9 K End if
7 d" y. K' _) O2 g! ^
3 H& ^7 A# C c7 w5 [) I End sub
. w& G# ?1 k( t0 U3 }& }, ]1 w4 ^$ ~6 t4 }6 u# ^2 B! U
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
; M c" R! v- @* A5 q: \$ K& M7 _5 N: N7 d/ G% q
四、测试远程控制程序* t$ \, C a$ S
/ C! h/ U6 O, \; V
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?1 u J% f/ K7 W4 G1 ^: |+ e# Q4 h% }
|
|