TA的每日心情 | 奋斗 前天 10:07 |
---|
签到天数: 2385 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序 ! V3 ?; R- J4 {, y+ I. _
0 ?- n; b' S/ V8 G
关键字 VB,黑客
1 Y8 L( d0 F# ~8 T5 I
) O* e8 J( ~2 g2 `3 Y3 {
8 Q, M6 ^. Q. L8 s8 y0 n3 E9 ]
G+ S5 b# M6 Y9 V0 i4 ^用VB学做“黑客”程序6 M K g5 U: o" R! [
h3 ] W" k3 { ) a9 S& F! ]9 ~$ @. [6 D
+ {) m9 g5 F& a+ u5 U; y; m
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。 A; W$ z5 w2 W; }, }, D- d
# B7 `/ W7 Q' b6 b+ F; v' l1 R 一、所用控件; h4 v/ J9 e* M: F1 d0 v
/ a1 M- w: k3 V& j9 [
在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协# O1 X% b( R% n" D( ]
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。$ F+ V& O' W1 x8 [5 S$ ?
5 M1 P: i1 G$ W& e* e4 H5 E0 m 二、编写客户端程序
7 \# K2 I( [% a4 C D% j+ l6 R: e7 G# z& ^
首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:. x: i8 S# Q6 l/ M8 \* F- N
+ U, e" [4 f4 M' o
private sub cd1_click()9 m0 `5 t* ~9 i+ z# E7 i
- [, t+ a# c' c, V# Q: t% i
tcpclient.romotehost=text1.text8 R! W- D7 L: N9 K
# |. d& `1 y/ B tcpclient.romoteport=val(text2.text)'端口号,缺省为1001- B: t5 V) s& E5 f( |
4 f) |7 R. z' v2 }8 J tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接+ c" b* [6 ?/ U O/ T
0 @, A0 H% n* e2 C; A0 H# E
cd1.enabled=false9 @- n; L- {( a
! ?' o0 k& ^0 G2 o& D0 @; E- F d, Z% C
end sub
' C- V% U- ?* }% A2 @" {
K" K0 a# G8 _: s, G3 e& G. m 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:6 N% D4 O4 X3 q0 i2 b( ^
, s2 |4 g' A, R4 I+ J private sub tcpclient_dataarrival(byval bytestotal as long)
1 W' ^$ U4 A* ~5 }! ^
1 s1 [: X. Q: e0 I0 } dim x as string6 f8 V1 j0 g! E+ K+ X3 d
" H6 F1 e$ o1 O3 T1 B. c1 V tcpclient.getdata x '使用getdata获得发送来的数据
6 n8 e: o& X, D9 j X O! \7 \4 E( n! s
.......
$ H0 k9 F4 P" x% [, W' S( j) f% s z! `# Q, I$ b$ A
End sub2 _, i" c+ H+ e
! ?1 X$ v& k* v- J
后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。 X3 R1 @ P+ `) J
' C3 Q( U' k4 P* y2 i
三、编写服务器端程序2 U |, T( b3 ^$ H( u1 N! L$ g
- [5 y* o: E! x7 d8 g0 K 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。, ]/ a$ Q1 s. _. e6 r9 H3 p& w
% v) l. k! _/ F) \3 u* [
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下: @6 n! o5 t7 s
% K3 B q6 V+ q- L4 @; X! t
'在窗体的load事件中对tcpserver控件进行初始化! t( _( `$ j8 S: N: v P
4 u* \; }3 Y7 {2 r3 P5 N private sub form_load()8 m. U: m- e" {1 f$ r& L0 V
1 d5 }* {) y# s; \7 `3 {- z tcpserver.localport=1001( e& c% Y/ E6 [' P- u
) L, o" N, X/ V" _; C tcpserver.listen '把服务器置于监听检测状态0 N7 Y0 q2 d, o/ B/ _9 V
) f/ i) z5 r& p; r8 R* q
end sub3 `0 o6 Z* _ c, ~0 n5 l i% C5 i* w
; u1 k. j- c: T p0 h '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态
) \) E' r2 U3 t, ^; v1 P7 i
, ?* }7 R' @4 A1 K1 h% i Private sub tcpclient_connectionrequest(Byval requestID as long) M; } g" L; e; a! ?3 a5 O: l7 ?
) t5 |, o- w: s2 S5 b+ h5 X! a! P
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭* A) Q* V( v+ _5 u% c
2 V+ n. n2 T r% ]2 U w
Tcpserver.close '! k8 h L5 O d) A" S; @
: s+ k1 \' c2 j% I Tcpserver.accept requestID ') {. y: E! f1 i' V0 H* V
' F+ v$ J! m, d' _8 W! x End if
% I) Q& T$ U# }- b
' U6 c- Q8 i6 v. } End sub
, X7 @/ f% w* I3 E1 Q8 c; [, s* o* |- _4 z+ T( B6 F% P: D6 l8 Q
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
0 B: v' s. m8 |4 I$ R( n, d9 i4 }/ \! G; m) o/ ?$ v
四、测试远程控制程序, ~6 C& e- V6 E& a6 }9 T' s
- x/ k0 Z+ _1 \6 Q5 s 现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?: w% k6 K k) z8 R
|
|