TA的每日心情 | 擦汗 7 天前 |
---|
签到天数: 2402 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序 1 H. q2 X& l" k: P
; m6 h7 Z, ~* j5 z2 u关键字 VB,黑客 ( y$ i4 G; r8 F3 M8 @. w
! U/ \) I% q& T2 H+ @
- J6 D* i/ p/ z( m- ^ I( j! @3 J4 A. O# [% U1 }( e
用VB学做“黑客”程序
; w- j1 u$ \: x5 y% \5 z& s8 T& g. l# l# V9 k4 o
4 _. t4 K: F5 {+ `2 ` A+ n
2 c3 g; e5 W1 w( u- F# ^/ |% u 只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。5 v; M" G8 j& J& I+ v
2 }, `5 d1 V- Z5 N& I7 s, d# B 一、所用控件
4 y: I1 D+ L9 Z; }& V% Q
5 A) _% v0 L+ A 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
- G0 P% ~! p4 C: l- |议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。8 C9 O" M% K2 r( ~: b3 z0 n
6 c0 a* j: u5 Q9 M2 q8 N, ?# Z
二、编写客户端程序
1 B7 u' ? J! }! R6 D/ M1 k2 S. `1 A/ L. s# {
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:, Z( m6 q2 |5 v0 R- N
3 f7 H+ S! U( H9 ^1 j, y! b# C private sub cd1_click()" K" Q% s7 i8 W- a/ s( A
8 v) v+ K& y7 ^4 Q4 v8 X! d
tcpclient.romotehost=text1.text, F! e* N Q5 R% M6 E1 o2 q
" n B' S) w" } i2 o6 M tcpclient.romoteport=val(text2.text)'端口号,缺省为1001& ~, L" r n. A- o% j: C& n7 r
& }# ]7 Q& _/ J& L+ R/ ]1 D3 m tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接- u& U5 q4 @4 @) S
3 D! j. ~$ I y3 n+ _7 E" \3 e0 ]
cd1.enabled=false
+ _( l$ {# k! L8 N) ]: i7 K) w! D9 N/ A( ^7 z" c
end sub
3 s! I- E$ }5 @! t; v( G; K: u
- q0 B2 H' r+ q9 } 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:" z( R7 w5 J: {4 s
( }& G. }+ [! p# Z3 C
private sub tcpclient_dataarrival(byval bytestotal as long)0 h9 V: R0 v: L: a
8 F1 J, B& |5 Z* o+ t dim x as string
8 [ }* u+ |. H6 P% e- V9 W0 n! j0 M P( S: M! o6 m7 R
tcpclient.getdata x '使用getdata获得发送来的数据
' y( M% k5 _9 N8 z* R0 O, X# `
.......) j6 L( j5 r3 h$ W5 u
7 V9 F- b1 w9 x" [. H
End sub
4 M: J# }/ ?( y+ O" a* _
3 d8 R! u" a# u$ }2 D: X 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。( s0 m4 ^8 g' K5 q$ W% I7 k
3 P B/ o1 Z# H7 M j3 H
三、编写服务器端程序 k3 F7 b- \8 @7 E$ J8 {
- {+ y0 I: O1 c3 T9 f
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。0 J! }7 j5 t% V9 {7 V
/ G$ K! p0 o8 E8 E- b5 n
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:+ {' D& F' H+ A+ R2 ~
/ t7 B( N/ D! \4 k/ X, |
'在窗体的load事件中对tcpserver控件进行初始化
3 \6 E% A+ `2 O5 Y, [7 H% n
4 s/ F5 R9 X. v" [2 \1 y private sub form_load()
6 k+ f6 u9 d2 n' Y- [6 K5 s
. I# E2 d& J. x9 q5 Z C# J- t tcpserver.localport=1001& K! H2 ~. [/ q, r# c" `$ f! r
" I% g) l! ^- v5 v* m tcpserver.listen '把服务器置于监听检测状态* v0 O j, e& `8 Y7 ]
& U, e1 t5 f7 Y; ~, S |
end sub7 W; N) J/ W6 q1 c m& y
" v) v& L$ g7 C/ d
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态( q, |+ D; |2 j* L5 O9 E! [% @6 [: u; c
o2 u# Y+ _' r: T
Private sub tcpclient_connectionrequest(Byval requestID as long)
6 M( `1 ~% P) ?+ _- a6 y5 U8 X4 A* C( {: t! A
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
* H& z$ _0 ]: J3 u! B& |
: e; f, T" ^* w, U, Q Tcpserver.close '. I* z4 t# v' c/ U+ h
- l+ X% U) v8 I) U
Tcpserver.accept requestID '
7 [/ O5 l0 G6 y; f' I
9 h* b4 f, W7 j7 w, ]% ~2 k8 U" b End if. p9 R% I5 k% B7 ?* r+ t* K: g
4 M9 e( c$ U7 G$ m# j End sub+ ]4 T, q0 M0 P* n+ ?
, \9 g$ d6 i* @. x, M9 Y3 v% ~ 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
, Q4 E- ^7 j5 {' u S' P5 W2 ]% V, U8 V, p3 ] H- W7 G, b
四、测试远程控制程序
* G+ C! j5 g; Y" H3 Q P6 H: w' t" \0 e
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
, N$ H2 R5 e" \6 T |
|