TA的每日心情 | 奋斗 昨天 10:29 |
---|
签到天数: 2394 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序 3 N' S9 F& z# _
- X. V/ P) a: u1 L% ?
关键字 VB,黑客
3 y% F+ t! E' h: c+ y8 T
' e7 F+ J) p8 A: l! {3 @5 Y- p* G
( P4 D, i. y9 J8 ]
用VB学做“黑客”程序
! h" t) z$ R' |' L1 N& v, m) g2 U
, K w9 O% ?; h* V: G% ]4 ?, m9 N9 W3 f
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。) @8 e, }0 y- I/ p! c$ R& n
% W) m* z5 j( T+ h- z6 q
一、所用控件
' L. m @$ y9 z! @1 V$ C {) X; N6 C
在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
/ _: B& B b$ X( f1 {5 A" w P议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
- v! T( M5 \7 ~: h
% ?. l J0 ?. J/ j& s2 X" h1 ? 二、编写客户端程序
2 h$ S z7 e; M! h
9 x& C- s, C& l6 r 首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:6 |# _" Z& \9 P3 i8 l/ k+ p, T" Y: N
" w: c8 q/ Q% n3 G& |# F private sub cd1_click()5 Z) N0 r2 U0 |/ n: \
% n3 A6 e$ `% e
tcpclient.romotehost=text1.text
$ L4 P8 r: |, Y7 V$ \5 j5 o& V) Q. C# l2 g5 Y% [- e3 G
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001+ y/ V7 o& ` z! i' W7 L& g5 `
2 Q. Y8 L3 z: `
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
* O4 [! {4 J1 u! ~2 Y/ p6 \) a3 }
! v0 g6 b1 E, z; Q- P! s( S cd1.enabled=false
3 n$ L3 ` e/ G. q8 l) n3 [% T' c) }
end sub
8 n4 p6 W) g4 }1 r" H* X$ a4 m( n7 i# @ Q" o( N* |# w
连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
8 u9 X3 F( T/ G+ N; r7 C; X" ]% C9 t. Q) |, l8 m& G
private sub tcpclient_dataarrival(byval bytestotal as long)
( {. b: o, [5 V; H* c/ L7 ]2 H, e+ q& B' G3 O( Y# [# Y# N
dim x as string
, d, e" [5 M" A
! w ^1 z/ ~$ t% T: V% d tcpclient.getdata x '使用getdata获得发送来的数据
) `- L7 p( R5 ^4 F8 [& i3 l; B4 W6 g' \; h
........ t+ A9 a8 A, I6 Y# x2 X! e) O
- H! l! o% |2 P$ f ?2 @ End sub
0 m& ~( }2 V0 E) Q6 H2 D% ?, A6 g* e
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。
, l) N$ D# r/ V* o h% E4 E4 V
( ?& V9 K8 c8 Q3 _1 W8 |0 M# H+ z+ U 三、编写服务器端程序
* h& O. V1 c" M/ {$ T9 ]- T. {' M( h
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
; ^2 A% ]# ~4 A1 y9 ?
+ r" |; n8 {9 ] x7 o2 o 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:
/ e0 O3 o. Z6 t" C' }8 m* p; i* Z8 n$ T$ Y" K! W
'在窗体的load事件中对tcpserver控件进行初始化
% m9 n/ v4 a) _" q
% @# c: ` n' M private sub form_load()' X6 }! t# v# @: C0 r8 a, K! k/ p
' E) W! x4 Q" I M
tcpserver.localport=1001
0 S' @# P2 H$ {5 H/ s1 U3 E1 v7 K i" _
tcpserver.listen '把服务器置于监听检测状态2 e/ O- |6 B+ r. V/ J v% ]/ T
5 w; o. U) G b+ {; A8 l# ` end sub9 `5 J+ d# x5 @# p
5 `" _' S. ?* ?7 K '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态
4 K2 I6 l4 Y- Y2 q+ t* q N
+ _+ Z0 N# n0 w: R+ k Private sub tcpclient_connectionrequest(Byval requestID as long)
5 f! q. j0 G; e) j6 T
: @3 [" x$ l0 N If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭! q/ g# x6 `+ E
1 O8 d& A9 L1 [/ ]4 W- ^ Tcpserver.close '
# H6 t) B' M6 m2 k0 k; M; [
) d! @$ N+ e$ { Tcpserver.accept requestID '
$ k& c8 n! P8 M, C( n- k: c7 C7 b
/ k1 A; U8 p9 o End if a$ M+ d7 J' c9 L# E$ E% T/ w
! b) B" R1 I' @, N8 [( K2 z% a End sub- y1 p7 j3 W+ g
. [9 \$ n+ o: @6 E i% {' F
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
1 @2 v! J* ?' r, H* [" S
7 }, m2 u. R9 O, y& K/ T 四、测试远程控制程序
) u* d" L9 K# ~* b$ v$ o
1 H' W' W# u; Y' { 现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?/ X/ w, p2 m; \2 g% l! h8 y) @
|
|