在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。
( O# ^; ~ G9 X! \: f: n/ m2 j
( V. S0 p# R4 ? 木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。' i; O8 z# i7 x7 [
. C; e' D! h$ \2 j5 ~* n9 x
一、基础篇(揭开木马的神秘面纱)6 Z( i$ S9 d9 x' [" f# p* p
0 S Y; S: T' n; {; b3 W
无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。! U- p; z8 _; S/ s; r( i8 x
1.基本概念:5 R) C' b6 m+ a
网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)
0 b8 o' }/ `1 v% F % G2 b! A* x c# J+ P7 m- U7 H
2.程序实现:* J0 a$ _# m6 Y
在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:
1 h9 O" D% _0 `: ~5 B& H (其中,G_Server和G_Client均为Winsock控件)7 [; t: i2 H, S' M" J
服务端:/ m3 j' M# E; M+ v
G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)( f- I1 G- Y) s: i! r
G_Server.Listen(等待连接)
, i" J% i2 m" ]$ R
6 g. r4 [; @- T1 m5 Y2 ?" ? 客户端:
: h. `" p- e( {9 c G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)
7 _6 B( [9 a' Y' i G_Client.RemotePort=7626 (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)
' ~1 M* X; ^+ I" N: Q (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)( u( ` m8 k/ _ n/ W( D; U- @
G_Client.Connect (调用Winsock控件的连接方法)9 i" \3 u2 j8 ^. p
8 B9 a9 h4 r: Z
一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接$ M) q! a8 _ N9 \, o
Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
( O; p2 ]+ \5 l* \! h G_Server.Accept requestID0 U B3 U6 r. s, b, Z" o( `* u
End Sub5 x+ v& E4 j. |, f4 Q
9 a/ Q- F, n( c+ ?- t 客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
8 a3 Y# P9 d% X% e2 _( c* ], O1 x- P2 V6 k
如果客户断开连接,则关闭连接并重新监听端口 4 a' Y0 ~3 W6 ]* k; y# \4 i
Private Sub G_Server_Close(), v" V- S2 _! g6 x( k: z
G_Server.Close (关闭连接)
/ Z5 Y. D7 C! v3 L% d% s G_Server.Listen (再次监听)
# v- m* N$ @, ~1 i. s" K! X End Sub9 y1 G, X8 g- [. C5 {
6 p b- F; d2 g
其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令....../ @* ^6 _7 e2 Y, _2 o
0 b: k1 M0 t5 s0 e5 [1 ~& Y7 h
: C+ i/ \ j9 o% z |