TA的每日心情 | 奋斗 昨天 10:07 |
---|
签到天数: 2385 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序
4 X9 E& a5 W% D# O; j7 f1 s1 P
' T+ K6 z0 z- g5 I( E, v+ K& ]关键字 VB,黑客 8 k& Y9 u% c2 E
0 ], x5 \. p: _! O7 w ~% s+ f9 O8 j2 p m4 P4 o6 V4 Y' G
# Y2 f" w: {- j, ]% N9 U8 c# j
用VB学做“黑客”程序
2 l5 x4 c( ] p/ {" ?0 y
2 ^3 w( L6 V2 q2 b) _* B5 e+ u
! j8 |- ?7 \/ i7 K; c: t
5 J4 H0 w( G" f7 s4 k/ x2 ] 只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
, m2 \4 { }# W) b0 A
# J+ r! L; c7 A% O* O# T& X 一、所用控件9 p" r6 F# A2 ?1 [
, G$ \) |0 D4 f: v 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
: G8 r3 v1 a# {. C' c议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
9 r" L- {4 H, L$ R3 F. {- C A$ J3 O9 v% x5 h7 J( N1 P( W4 c% }* a
二、编写客户端程序" [; i8 V$ y; e3 O
6 x2 ?1 m9 z4 e7 A4 q" h
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:7 i* g& c* C0 Y L7 O
6 q) D8 m B& v. I
private sub cd1_click()
1 [: Z$ R- H! j- a/ O( H# N# S' S- ?: u. ^# p$ X0 B6 P: s
tcpclient.romotehost=text1.text6 _- i& _9 G4 R
( v* {' ~2 u. V Y/ x; z7 c
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001
2 `5 N6 v9 q( c5 D% {- y! T9 R# |6 q, i
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接/ N( p% {5 @+ P) |
$ A1 u, r" S! X, D7 s; F6 P
cd1.enabled=false2 J7 c8 p7 y$ ~+ {6 t
4 V/ g! }$ b, X- `: l" R$ U" @
end sub
8 h; F- K2 n; w. e. {
2 W9 S7 T6 B3 t. d6 j0 ? 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:7 o- p* g+ k& P A0 n
/ R! i2 m1 p: Z5 G1 a0 s
private sub tcpclient_dataarrival(byval bytestotal as long)1 L* N/ d9 [& o6 t- y* t1 q
8 r+ m. A8 y8 ]9 V9 M' h; N dim x as string
+ O5 b' L2 I% ~& X, |/ X" j& j F6 o' S( [& h
tcpclient.getdata x '使用getdata获得发送来的数据- c2 N. w7 E0 T& K- z2 W' J% D
7 E0 z$ X8 ~6 l1 q" ?) J* l .......) v' u" k2 |! d$ R4 x+ |
: D& R9 A0 h M) l$ r
End sub( W* V$ o4 \8 N. H
, Q, W4 A4 u! E* s1 S0 [
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。7 F! k& T% V0 Y4 [
; ~. T, y4 D* v
三、编写服务器端程序
: r2 U' @, W8 ?' ~# ^
3 u' E$ N) N2 Q- k) f" s, [4 s 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。9 y% G, g" t N0 @
( p Y" A2 w7 j/ `. V) v 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:
9 ^% d5 M8 M# I2 J- |; m. S4 k+ Q! v7 s- S
'在窗体的load事件中对tcpserver控件进行初始化
& Z: E. W, C! @/ P: X/ H4 \" q/ H' p- N/ T4 K
private sub form_load() O$ p# e+ x F3 Q, e/ ~5 e; P
% E8 t, t v1 q) y tcpserver.localport=1001
0 x1 ]+ x7 l7 F! N8 i0 p/ V. [4 m+ f
tcpserver.listen '把服务器置于监听检测状态0 A4 E7 @: P. K9 w# z
# g; h7 \5 L: A; d
end sub
* t3 W- f" {, j+ y3 m3 x* L/ U8 l
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态$ @* D6 _' f; o
# [4 _" f) l4 X5 T" {; z Private sub tcpclient_connectionrequest(Byval requestID as long)1 _1 ] D/ J) t, J" i8 U
$ B/ Z/ D* T9 ]* k, G2 \1 P If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭! Z& q6 a$ ^$ o- J* O
6 F: H6 C; K# ?+ ^* V
Tcpserver.close '( _7 i# }* A" D/ D) e
# q6 S$ D/ h- `. A0 ]* }
Tcpserver.accept requestID '! W+ U/ {- F2 J8 R! h3 ?* f
. |- K7 z3 n' u7 O; k; L* c5 H% D End if6 k! @3 `. Q2 q _ A7 R4 ~ d2 r% U
: e. j1 F# F0 @, q6 m' T0 \; s
End sub2 g7 T K/ F1 e. W6 E" l
, f0 e, r' a" r; c
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
* e: c" G+ k$ |$ C
' \# X" L5 K" E6 G; g6 }" M 四、测试远程控制程序* F! W# W; `) A
r7 o6 w- N$ b. F) q4 ~ 现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
" z% o9 }8 \% `% U$ S' P; l |
|