TA的每日心情 | 奋斗 昨天 10:07 |
---|
签到天数: 2385 天 [LV.Master]伴坛终老
|
用VB学做“黑客”程序. ~$ g, x' u* Y+ d6 V
2 G8 e4 Z" |7 U# K; H / ?$ _3 W9 Z1 j
3 s7 n) w: T5 W5 z9 [
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。, H. }3 x8 D# I9 B* Q# |
" M& ?$ N9 x( A& Q' a- `7 h4 A 一、所用控件1 X3 T" F: y! o" G3 c* V/ k* b
2 G5 u$ B$ [3 J$ e
在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协" o) l4 g, Z, s3 g3 M
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。6 o/ `* k8 @5 c3 n+ C- _2 Y8 x2 ? K
3 o, I0 o/ b& e/ k+ X* p
二、编写客户端程序+ r* V4 p& T! n' _
9 i2 o9 { m& S* h0 U/ v 首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:" t3 `0 G- T" u% T# t2 Q$ \
; a- R/ h' L$ r! [6 w" t
private sub cd1_click()+ B' t. ]" i' @$ o* F. F
& Z& R- o2 _* ]+ ^: u
tcpclient.romotehost=text1.text
) i! M9 D/ f' Y$ V: u
2 a$ G2 D0 k1 I0 l* A tcpclient.romoteport=val(text2.text)'端口号,缺省为1001+ `, \7 A' F1 I8 d8 t6 O: h7 ]
; d2 _! k9 b3 s9 M& X tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接. `; y: W& s1 M. @/ F
- N/ ]+ u. @' i u4 J6 w+ \$ L cd1.enabled=false L- s+ B) ?. t& X0 k5 C% P% W1 {
1 G! H# H: {. N6 r& E- [8 m% |. ~
end sub
6 s+ W1 e! `6 ^4 w+ K: ]
4 ~) ^5 C0 S: k3 c6 `5 e+ ], _" K 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:( k) r6 D- ^9 L% [" q
. b) o C, u2 b4 _; l
private sub tcpclient_dataarrival(byval bytestotal as long)
. l4 T, [: H! D/ y4 j9 g
, W/ L, J+ H( R/ q% A: [5 q% w9 N dim x as string$ v* h8 \% X9 R
7 m' B1 X: d$ L' | tcpclient.getdata x '使用getdata获得发送来的数据7 Z' }- A' ], N" Y
, a# u# x2 A+ k/ l# `; H5 I5 H .......9 O$ Y( s+ s5 L$ I8 {
$ Z. [2 M2 Q# R0 C End sub
`0 u& I9 X$ z" D; I) X
- Y3 \( ^0 I2 A( c; K P; x. j 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。
5 e u4 t) g" B b# d# ^. N; f
y R! p& r8 h 三、编写服务器端程序
1 } c# U& n% x4 L+ E G7 `% u7 M$ T' g6 ~ p' \
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。; t& b- O& }6 R
" c% k8 e6 @- p8 U
当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:
6 x' v" x3 w# L; K( h) K2 D9 R9 l& G O
'在窗体的load事件中对tcpserver控件进行初始化
]1 M* s) v2 v9 s7 S: o, j) g
* o% W) V# ]6 @; E% L private sub form_load()
3 l+ p3 }2 C4 @
6 v( S9 M! A0 w, r0 k0 ]! z tcpserver.localport=1001
- f, [, J0 e; B0 \8 {; B, b
! b3 V% w7 R+ j$ j4 N, s7 E6 L# \ tcpserver.listen '把服务器置于监听检测状态
- [4 d( _ ]7 X7 H
4 W6 n- T( ~9 \6 h- F' S( R$ o end sub5 r4 Z+ U" p, ]$ U# \8 { C
2 U' q* Z& Y3 B6 H6 w '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态3 t$ T& ?0 ~; w
$ a E! }( Y1 U& y Private sub tcpclient_connectionrequest(Byval requestID as long)& C, \3 O. e# Y- V3 v( ]+ U5 m
' W2 p; g3 e: C1 N; U
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
0 L+ [9 V- M" c* C( ^2 z) o) R% Y0 M3 B5 S/ H2 G. y9 ~. P
Tcpserver.close '
3 V4 N M! @& _/ @* W3 x$ r! Z4 e- `* V; U2 k+ I. v+ P$ F+ j0 p
Tcpserver.accept requestID '
; H4 x \& A' I0 f3 D: f/ _( u& Q' c, q" i
End if
2 U" u+ Q& F8 ?8 H3 I+ d9 v2 P& O& K& ^" W
End sub. D3 \! \/ o1 S0 \& `0 H
: U! p# r$ e3 H: R! I7 C 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。
# p+ o2 D! p5 B) E" H- f5 ]: f- w! o
) M! f0 c! w: A. |: r 四、测试远程控制程序1 j# h. X: E& K
5 X' d4 S! U4 T; p0 H% B
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?
# n7 L0 L# w1 J. ]8 p1 y
) X0 i1 \* O7 W Y: N; i& M* s( Z' M6 f9 l- o5 X
: a# Y: B" Z5 n
3 O% p: O; K7 S6 P. ^* s
7 u5 c. Z& c. M! }- W6 ^& x% c* K. [* w8 G ]# `
值得一顶,
! h. E! j/ Y( O5 w" n# `不过这个程序很脆弱的,真正的黑客程序要隐藏起来,那要用到很多的API,尤其是在2000和XP下边,是比较难做到的。在98里就比较方便了。上次我就在学校机房里偷过别人的帐号和密码的。女生的密码以数字为主,好像我偷到的没几个是用到字母的。 |
|