TA的每日心情 | 奋斗 10 小时前 |
---|
签到天数: 2278 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序 0 m3 ` v+ g+ f0 q' P5 z% J2 Z) B$ o
2 @/ j. Y. \& k* }$ J- \- V
关键字 VB,黑客
7 e* }! v. q1 s
- u7 y( P7 w4 v# N! C
( C6 p; F. t$ Z% x( b5 J' _
* d/ x% W I- [, b9 R用VB学做“黑客”程序
9 [+ t! b: B% I4 Y( ~3 j J- ~3 V* _* C \& Z9 G% P
! @+ h1 E7 M, R
9 m6 t( v0 w1 y7 @8 L( }1 ^5 z 只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。3 [0 o5 o: }/ @1 E
6 {& d5 R/ t4 }
一、所用控件4 a& }* z* u$ z' s' b
! T5 S8 ?$ A# l1 U% ]8 | 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
* ]& Y1 b' n/ Q/ `2 h6 f. y/ [, M" u4 @议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。# N! P& H# W% @* O8 I
6 q; w0 X4 v0 L
二、编写客户端程序! I- K* W. |. M
7 I! l, B4 ?; g: j, F" T3 O9 O
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:3 T* S/ x- T! [+ z3 h! R
( b. B4 x" U% O& C5 A
private sub cd1_click() P( c6 [2 f7 U& `" e
: P4 ]) k. O+ \( `" Y
tcpclient.romotehost=text1.text' g \3 y! o, z! C5 R. \& r
2 B5 M% b2 f4 F tcpclient.romoteport=val(text2.text)'端口号,缺省为1001
4 J; [1 U, w8 h+ _; T
3 u. t3 E |& Q tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接; M0 E m$ m `" o# ?5 e, f
0 F+ D) ]/ c9 W8 a. l( Q
cd1.enabled=false6 Q9 Q+ w* u; `- ?' G) F/ W
% v' @4 D* E; C! d) z
end sub' N0 ]. F4 Y' J+ [
4 p9 e! d+ X( {: `7 E% v 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:' r7 v6 f- T% P1 ?6 {8 A' B; ~: [
/ J% Y- U' k/ W" D5 S. R9 z
private sub tcpclient_dataarrival(byval bytestotal as long)4 _) X# X9 a3 d3 V& P2 H
4 _5 a. U+ @! a# H- @% f! w7 E8 m dim x as string$ J# N6 }+ j! D) ^" e4 T6 v
. S5 W6 _- b9 p$ `! v tcpclient.getdata x '使用getdata获得发送来的数据
+ | O1 G3 m8 ~ x) ~% D" }5 T( Y8 } H& z9 @. T
......./ z f5 G- F' A/ o1 Z* q3 d
8 X1 q5 b- [! |# y0 }5 h. e7 H! \ End sub
) g5 O& T8 ]# k% q3 l* a$ t6 ?/ R- y( p u, Y
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。
- |) [2 W( d( S/ C( z- g( \; j" I( s3 B# E% c2 e
三、编写服务器端程序; i6 v; ]4 R. W& ^6 Z& J/ [4 ~
) k" K; G+ ?1 Y
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。
7 H9 X0 q+ [+ v8 O2 b! |% {0 `& V# v( ]6 q5 h- S( U3 o
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:
6 A$ N5 Y) x! e& \) Y! r. U( b5 X! O- o: X0 X- X
'在窗体的load事件中对tcpserver控件进行初始化( J3 C! R0 C' V$ b0 S0 n) r0 b
+ p: b# {5 o# B& p8 O2 f+ F1 c private sub form_load()
( N/ C. g- k) U4 N# N
7 g, ]0 d! |2 P1 C0 e" q tcpserver.localport=10013 `% i' G$ P' {* Y# S# Z. K* ^
3 j* l( {: t9 {2 }
tcpserver.listen '把服务器置于监听检测状态4 N4 s- o0 p7 w7 ?9 R7 O L
6 C( R: B) r2 P3 K4 l0 m. {! S
end sub
) E8 |; ?. v9 j/ o0 L0 o* J* @. Q% H, Q |; [ k2 v* w$ ^
'服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态, c) ~% w* _8 S" s5 ^) |8 N
5 p4 E& A9 _$ f) y% j% D5 s1 O* n
Private sub tcpclient_connectionrequest(Byval requestID as long)
) |0 R! ]3 t+ Q0 n% \; w# N, [
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭6 B- M q, X0 R% m5 y
8 T* O. q1 i, C7 @
Tcpserver.close '
1 x. W4 a O8 h% ?, \
- M0 U$ M3 R2 V Tcpserver.accept requestID '
- p, P, s: z4 ]+ k1 D* [8 J i8 b" I+ m
End if
: B, m2 O3 q0 f1 y
" t! X3 m0 S& X/ D- ?* G End sub
- U, T6 L k7 k9 s$ M" S
; k' M* p$ U9 k s* i' h* K 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
8 P- d$ F% [/ } Z" ^" u2 Z, [' t! |( {
四、测试远程控制程序- D+ l# i B4 g
) Q: C' _/ i, Z6 V1 h 现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
( j, T2 _& h- V% j) N- V' l$ Q |
|