TA的每日心情 | 奋斗 昨天 10:07 |
---|
签到天数: 2385 天 [LV.Master]伴坛终老
|
用VB学做“黑客”程序
6 e' x; V& h/ F, F$ G! R
2 Y& l* _; W% t0 j: f, n
) P2 \! @/ \, h- x) L( P% o5 H. \+ b3 q9 f! [! z' `
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
# @. p- l3 p0 v! u
% k. B& R& A+ R7 Q4 ~. H; U5 v8 @ 一、所用控件7 T2 G( b# x" G8 X# W' I5 W
0 d J% f3 v3 | 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协! ~: ]( Y! J3 g$ `9 H
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
2 X( m4 H" n: d( m
& f; P/ ^" d4 q! j& r( X* c 二、编写客户端程序( y3 J0 v, D2 N V: Z" w
& B+ ~+ w% n# L% @) x- g" f: Y 首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:7 F* H7 m1 T( L" h, x/ f
+ M: x5 l0 G* F" q r: N! B# @ private sub cd1_click()4 Q. i: l& R9 j ~
. C# p1 W; R$ w2 e tcpclient.romotehost=text1.text+ I- a0 M& X1 Q- J% e0 ?, j' Y
, {2 u+ M' U' ~7 Z4 x* B
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001 L! h8 V9 F$ T, u
5 t6 D" T$ D2 }; ^* h5 S9 v* F9 h tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接" X7 A$ i3 D* g7 E$ r( z$ h: T- G/ p
5 ]' e9 e$ E$ x# u/ Q
cd1.enabled=false a8 H! `. c7 I0 ?) j
8 d* ]* u R6 }0 h) H/ T0 ^$ `/ x7 ^
end sub2 Y# q- q$ ]- y* h3 V
# l2 t2 }! k0 D& [. i# C 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
6 V: S O- x! C- {+ `- l' Y3 p
: c0 X7 v2 j( w) H' E) S0 V" v private sub tcpclient_dataarrival(byval bytestotal as long)
) m$ w" n. i1 p3 F: ~# a/ B9 ^4 {" ^8 f9 d! H9 t2 ?* ^! @4 R* R
dim x as string: F; t. \" W k) v. D
% f; y B' l7 V
tcpclient.getdata x '使用getdata获得发送来的数据
7 F) q/ W8 ~# @' t7 Y% T2 o* g: j: }9 ]1 }8 P/ Q
.......
1 a/ T& b# s0 g" U
7 J: c) [3 q- \0 }' n i3 U End sub' B- T2 d% W( K# x" x
2 j# A# _2 P z5 R5 ] 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。" ~$ f3 @8 T v* T
2 D# H2 l' [. F; c- T. ]
三、编写服务器端程序3 M2 S% g) t0 ?3 I8 d
0 a- n4 L m3 O 先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。% e/ C8 b S7 K# Y' B) X
9 B4 C8 y' }0 f9 {
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:
" o& H0 @) V a- u
2 k4 N+ R8 I2 [8 X X '在窗体的load事件中对tcpserver控件进行初始化
3 Q: ?6 I" T9 o' e2 n6 P N: A. s1 ^- g) O1 {1 w
private sub form_load()
' S7 M# m- g8 R) @2 J' f1 a: A
8 a r6 c. z( c3 c/ t tcpserver.localport=10018 Q# g0 }2 @/ a$ f' [$ S7 c
# |- Q7 v# }- Q& o0 k7 p+ X! N
tcpserver.listen '把服务器置于监听检测状态
% z4 I) m& i' k$ X+ K" }
8 V; q2 ~4 l. |3 n% ]- X" F end sub
' b& @, e+ m6 |9 P# S
) w) {5 J* A8 A4 h9 \1 O '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态- z+ F! `9 r0 V! ?8 |
# M M+ R7 U0 J- b, O: v( Z
Private sub tcpclient_connectionrequest(Byval requestID as long)
) o6 o/ ]4 N+ K! j8 x. N
0 U+ P8 C% l) S( d& G& E3 O If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭! y- f8 \( @( m" F
8 U! ]: O4 z, _3 v" p. v' N6 M
Tcpserver.close '
, S% y2 y7 A6 E6 S* [9 E& p0 `5 d. ~, B: q3 U6 H$ T% R
Tcpserver.accept requestID '
+ Y# X% s9 A, q+ y& W- k: _9 {$ Z8 c
End if
, T& Z3 Z$ y/ q4 y; ^, K s2 e7 l5 I: Q6 H% X1 Y2 w1 P; ]- o
End sub. Q/ ?* U5 J) T2 @
$ p: J J0 v8 {
现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
# g2 P. P% V6 @- T: q4 C+ p3 Y7 E) Z! }- `- ^ F
四、测试远程控制程序
, F, z+ x( I ]' v' o% j9 B* Y9 v/ `8 Y+ ] M
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
5 B9 j: C( P* C: v' o1 v* N2 g
8 b6 n9 b6 M! i2 G
- ]1 t* u& W d
7 v2 q1 Q* j8 _2 T2 `
) J6 n, P; K4 i1 |( m3 o0 D; T8 l: Z. c& Z. v7 B# q" V% g7 C
/ O V4 H& d& q% k
值得一顶,- p0 f) v* A$ @" y
不过这个程序很脆弱的,真正的黑客程序要隐藏起来,那要用到很多的API,尤其是在2000和XP下边,是比较难做到的。在98里就比较方便了。上次我就在学校机房里偷过别人的帐号和密码的。女生的密码以数字为主,好像我偷到的没几个是用到字母的。 |
|