TA的每日心情 | 擦汗 6 天前 |
---|
签到天数: 2402 天 [LV.Master]伴坛终老
|
标题 用VB学做“黑客”程序 ( S( U( L* k- \, Q) G& ^
6 S; e% T! U" O- ]5 e. h3 R; H关键字 VB,黑客 4 q. Y1 m# A# h2 h5 m" S
$ @- m3 ~3 u+ z( [( ]9 e2 F. ?- F1 u0 S' ~
* }: j3 U# O0 b, ]6 n& ?) H/ X' k
, x0 m h K+ h1 k
用VB学做“黑客”程序! X c3 H- ]( ^; S5 I; V% D
3 f N& d" \6 l, x) t
2 A, z" T/ h* Y6 k2 b5 K# ^4 t. {, T/ X- e( }: U+ E
只要掌握了原理,你也能写出一个所谓的“黑客”程序。下面笔者带领大家用VB亲自编写一个远程控制程序。从而揭开它的神秘面纱。
0 K, h# ?+ t& x! P d: o: B% _5 R2 B
5 p8 y8 _1 A2 I' @ 一、所用控件( W6 ?; m2 j/ s) q
: o, C& p! p+ S# Y5 b 在程序中将使用Winsock控件。Winsock控件是一个ActiveX控件,使用TCP协议或UDP协8 C3 v# |+ y6 P- l! T/ o
议连接到远程计算机上并与之交换数据。和定时器控件一样,Winsock控件在运行时是不可见的。Winsock的工作原理是:客户端向服务器端发出连接请求,服务器端则不停地监听客户端的请求,当两者的协议沟通时,客户端和服务器端之间就建立了连接,这时客户端和服务器端就可以实现双向数据传输。实际编程中,必须分别建立一个服务器端应用程序和一个客户端应用程序,两个应用程序中分别有自己的Winsock控件。首先设置Winsock控件使用的协议,这里我们使用TCP协议。现在,让我们开始用VB建立两个程序,一个是客户端程序myclient,另一个是服务器端程序myserver。
4 S. i$ E' U' e" F9 L. Z7 u/ H: v: s- C* g0 {
二、编写客户端程序
0 J8 H/ P+ Y8 j- f* d
1 ~( I w( f& ^3 N 首先来建客户端程序myclient。在myclient程序中建立一个窗体,加载Winsock控件,称为tcpclient,表示使用的是TCP协议,再加入两个文本框(text1和text2),用来输入服务器的IP地址和端口号,然后建立一个按钮(cd1),用来建立连接,按下之后就可以对连接进行初始化了,代码如下:
7 h7 z4 q) R9 y8 `3 N
" P, q/ m e5 I7 W3 { private sub cd1_click()
' |$ R F3 q7 b# G6 j' G( |. h3 C# s2 B, \& |6 b" B; |
tcpclient.romotehost=text1.text/ p/ U9 S1 h! S3 U8 @/ g9 f ]: `
0 \$ F4 I# |8 l' [
tcpclient.romoteport=val(text2.text)'端口号,缺省为1001
- q' ? g' M, |4 l
* K6 c( e: T. F tcpclient.connect '调用connect方法,与指定IP地址的计算机进行连接
, {$ u' k- a: X0 x S8 W
5 E; k8 e/ e3 y/ i cd1.enabled=false6 \, E+ J( k# c8 H3 b4 u
8 W! k+ W' I! B+ g9 ] end sub) X- b7 j/ y0 p# r$ L$ |/ W6 l
6 M, [, K4 p0 ]. S$ x+ Y 连接之后就是如何处理所收到的数据的问题了。客户端和服务器端建立连接后,如果有任何一端接收到新的数据,就会触发该端winsock控件的dataarrival事件,在响应这个事件时,可以使用getdata方法获得发送来的数据。比如可以在tcpclient的dataarrival事件中编写代码如下:
1 o& \6 ]. e! f j- T) m6 k- W
# Z- [ x7 L/ E0 f; ~3 m. H/ v5 h private sub tcpclient_dataarrival(byval bytestotal as long). X+ K1 `+ [# ?* T& A
( M8 e. v1 a. X9 t
dim x as string
' B1 M! G( \+ v! g; b8 k$ U' W$ w2 T0 h: s7 K6 A2 w& H) m0 c
tcpclient.getdata x '使用getdata获得发送来的数据
0 G7 M" ~% @- z. w& `+ ~6 Q+ M
+ y$ J1 X3 d& d .......
7 \6 P) y3 {3 R( k p0 e2 E: s- _! t# g$ W/ x9 U7 `
End sub
8 x! |0 y- M& B2 |8 @ R- x0 A* I
+ r" ?; n0 D6 u- a 后面的省略部分表示对接收到的数据进行的具体处理,读者可以根据实际情况编写。
' F/ s! u+ t& ^6 w+ S) ^: N9 a4 R( r: K: {- r
三、编写服务器端程序2 ~8 S+ Q1 | s* x! W
$ E8 q0 O4 s% h% Y1 v7 `$ A
先建立一个窗体,加载Winsock控件,名称为tcpserver。另外在窗体上加入一个文本框text1用来显示客户机的IP地址和客户机发送过来的数据信息。; L2 g$ v* E; ^- V3 q9 r
, v( n8 m9 e( F1 d& h 当客户端程序运行时,在客户端程序按下连接按钮后,客户端向服务器端程序请求连接,这时服务器端的connectionrequest事件被触发,所以服务器端程序要解决连接问题,可以使用connectionrequest事件完成此功能。代码如下:% D- \# o$ G. {! i
% \0 ]* F: n, P, } '在窗体的load事件中对tcpserver控件进行初始化9 {) q3 e; F! L6 O" l; q2 x) O
* Z. k; C0 R+ q$ K; n: A5 _ private sub form_load()/ S% _7 o; c1 b0 i
3 \% ]9 c& q3 q0 y4 j' [
tcpserver.localport=1001
) S) T- t; z& |. c: I/ H" s) r
- i2 G4 t9 U' s. ?# e! A1 r7 k tcpserver.listen '把服务器置于监听检测状态7 ]3 d$ Z5 [7 q, s( f; q y
; H! X+ m4 d# u# q3 a; Q
end sub
' ~1 _ K5 u/ X& w& e0 {
& [/ c# J, k0 K; S! n* r6 ] '服务器端接收到客户端的连接请求,首先检查当前状态是否处于连接关闭状态
y# `% a3 H" I+ W& e- A: r' ]! X, A+ r @
Private sub tcpclient_connectionrequest(Byval requestID as long)% \9 h3 \. \4 [7 v, i: k
5 d# @+ D9 v, f' u. @
If tcpserver.state<>sckclosed then '检查控件的state属性是否为关闭
9 _% J# V! W2 r0 z# ^
% n+ c) n, z6 S: }* _/ u) l Tcpserver.close '
; c& G4 Q2 ^% R8 \. N7 G1 N) Y! f3 G$ C( z" D! F# |/ c b
Tcpserver.accept requestID '
2 H5 i, C% e4 n/ U% o' Y, n* i& N7 H& Z* u
End if; z B6 F1 d2 k$ ~# n
$ X8 Q0 T' k* {' W& N
End sub
8 _% w1 M# B4 f- _
C& G2 @( g+ P9 a* s$ D 现在我们在服务器端程序tcpserver的dataarrival事件中添加以下代码,以便让服务器端程序可以接收客户机端的指令,并运行相应的程序。7 o( u( s. w$ n
" m# k$ p1 }3 n# p7 M* u- T+ C 四、测试远程控制程序0 n4 Z+ e2 w$ ]* T
0 E. I% ~) Y2 K0 H+ k
现在,你就可以将这两个程序分别运行于两台使用TCP/IP协议联网的机器了。在客户机端你按下连接按钮,再输入“c: mmand.com”,可以看到在服务器端立刻打开一个DOS窗口,设想一下,如果它运行一些破坏性的命令会发生什么事情?这就是一个最基本的远程控制程序。当然,真正的黑客程序要复杂得多,但基本原理是相同的。现在你该恍然大悟了吧?1 }8 l" D0 {' M2 C; O% W
|
|