TA的每日心情 | 擦汗 1 小时前 |
---|
签到天数: 2269 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序
5 _$ k' A; P* p7 L) V F8 ?
2 `9 j' R5 C3 Y关键字 VB,黑客
. z2 k1 q: {# }1 @" r 4 m( M' W7 i) r) X
2 H- ~) I \5 d# [, }6 E
) e; g- \- }; D" @5 b X用VB学做“黑客”程序. r4 c: N P1 j5 J' B) B+ z
2 V [8 ]- r3 ]/ C6 T( P
' K1 t0 {2 D) A+ J( Z8 ]6 D7 Y( Z$ z0 G A
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。4 \+ q6 R& U/ ^; v r( O# `4 i: @8 c
2 C* R: I# z, X" P' }* N 一、所用控件
% Z2 a( H+ e1 n1 e" v) z+ i) _
在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协
1 i8 W: ?% e7 `议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
* Q+ n; `- |6 ~- V5 ^1 C; A$ n! N+ G% a2 b& p* y4 \( Y
二、编写客户端程序
- j; W: ~1 q) I) ^, `7 }" N5 A- K# Y5 x# U$ h) V n5 E' j
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
+ ]( K& H6 [+ g8 Y) j) K6 K$ \' f1 X7 m: h1 c; q
private sub cd1_click(). U4 I+ L) p3 w, {4 N
- {3 S' e' m7 H( N% I5 U8 P tcpclient.romotehost=text1.text* V% n: e0 B* s5 {0 q
0 e' a0 ^+ q6 I" `
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001 V& y1 [0 A; l# q& `- I: {* N
0 Q$ C7 d' v3 Z7 t
tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
! g0 }7 ] [2 ^8 W
& W' S2 F) o" n" {$ I/ d& W, h- v% v cd1.enabled=false
- z6 D0 Q1 i. N6 \+ ?2 i" w7 ?
* H% l+ b. e) N/ J: |; y) N! { end sub
! j% a# n0 I( z0 q$ J4 n/ `' L6 A q0 }
连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
2 N" t% U9 c3 [, r; h4 c
! U9 z( W* d# p, C7 a private sub tcpclient_dataarrival(byval bytestotal as long)
8 r5 J5 Z2 J( P# i
# ~. _. F% d' a6 K8 Z: X8 Y dim x as string
- H8 c, u' \( p0 [ e5 }9 z' P# P" F/ Q
tcpclient.getdata x '使用getdata获得发送来的数据5 \2 F; _' L: ?/ O
8 E2 P- Y0 Q1 \: m" {
.......7 U) D/ l2 H5 d# t
% l+ S; N/ ^7 N( D# B End sub
( [9 s/ D/ B/ Y; w' X: _/ f4 r
0 x+ l- v. i( r" R5 j) }7 ^ 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。) `; a+ Y' m! G+ b& p- a. V
( O4 I& h2 S' f r( n+ e 三、编写服务器端程序2 x8 x4 U6 L8 V$ b+ y6 M6 A
( \ k% P1 V5 r5 n9 i/ i5 A4 Q9 A
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。9 h# D, }8 o+ P, e! O
9 `# J6 ]4 n7 ^* K& J( R 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:
c& B$ M, A4 j0 R' R3 {9 J8 U, f+ C: r* E. z6 c+ d+ }# Y
'在窗体的load事件中对tcpserver控件进行初始化
, n' l, J* | n4 V7 ?' K& g4 V5 e! S# {& g6 N, k U, A5 r
private sub form_load()
2 Y6 P. R4 _, h. z# d0 H& m2 K; r
1 h( p( g" _! U P9 L' ]7 f( P tcpserver.localport=1001
2 R# B% l# u- Q) P W2 H; `. }' t6 S" h( u0 B9 N; T0 f2 f( b
tcpserver.listen '把服务器置于监听检测状态
8 ^4 ^8 _- D( P- Y. D5 y
4 Y, m3 {: ?# h1 h end sub
1 C" n! |/ R/ c3 W( _! [
4 N3 O$ [: d. m# d; S7 V '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态
9 x$ p! H* W1 c* b% P1 r/ e w `( S% ]. l& { V! t. J, t5 X
Private sub tcpclient_connectionrequest(Byval requestID as long)
+ b$ T+ r& ]: y6 b$ k i! L; [1 x2 d8 K# i1 {* w: B
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
, B4 x; {& h c9 x ?1 h% b3 d J- e7 z' c# J2 ?% Q" R
Tcpserver.close ') F, b: |' R4 C" I; e/ O% {
% n! `2 v5 N" Q& z; y: G! C: b5 ~" \
Tcpserver.accept requestID '+ b) f @3 k! X3 V9 W3 j2 o* d
! k8 m* N1 I% {5 n End if
; z* B' \ x" p! S/ o+ z8 l
7 f3 U: y: _) X6 t7 t End sub
# i" [0 y2 J7 S, g
' Y. K+ a- z- g x* c) D$ _: T$ s# { 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。6 k8 I3 o n5 V8 V- O% e
+ h+ B& {0 `% z( u* @9 W
四、测试远程控制程序" b9 e( i3 D: j; b1 l9 D
: k b" B; @3 c# H3 t+ B! p
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?" {: a3 z% o; q7 [. s
|
|