在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。
, @# q2 F5 f* f, g( N+ u* N1 g
0 L/ j! A+ z \4 Z) j, c 木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。. c; c. K7 [% L; p' _
% h! C( h( b2 |+ l2 r# G 一、基础篇(揭开木马的神秘面纱)
+ [ e$ G& j" U, y* N9 Y5 Y0 A1 Z9 V; F; C( z3 C. L
无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。& }" A$ b" |2 P# k% H+ ]" `
1.基本概念:* A6 p% u5 `) o8 y, S
网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)+ o6 d) L$ t! I& ~+ B$ k
& s+ G; b9 t( o$ K5 N, a 2.程序实现:
- t# h7 C! o; i 在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:+ ~ z+ p. Z% X9 n) |
(其中,G_Server和G_Client均为Winsock控件)
, T4 z3 @+ E, a' B( c& |4 G$ w 服务端:
]( ^7 S. b) l6 i' e: U$ _4 e" W; o G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)* k3 E7 h2 D! {: R4 `+ Q" ^1 I6 U
G_Server.Listen(等待连接)# W& D+ v# d0 i% f* f: b1 Z* ]# ^/ y
! d/ c# ?% v G# E% q. m 客户端:
8 F/ ^9 A+ F x" N7 ?) [1 w G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)
7 v! H6 u& D- Z' X. s G_Client.RemotePort=7626 (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)- B3 A+ V' c9 h9 X
(在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)3 B( G$ Z% ~$ `! M# C. O" i [4 s" i
G_Client.Connect (调用Winsock控件的连接方法)
2 ]) d4 ?+ ~; z3 S+ @# \ & w) P( k) m3 @
一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接
( l a. o' Q: Y+ i Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
1 |& w1 w& \7 I) v G_Server.Accept requestID2 Y' _0 q% j" i) l' V7 z
End Sub
& q/ ?% h' D# z + b' n% W5 o, P2 _# v! s
客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
" ^9 ~1 \ K7 H$ P$ s P2 A1 s* V6 s
如果客户断开连接,则关闭连接并重新监听端口 $ ?3 P' m) t+ i/ Y/ u5 i
Private Sub G_Server_Close()
" E3 G5 k0 {( R( d9 z G_Server.Close (关闭连接)% z7 B3 X6 t- r* D1 W2 T
G_Server.Listen (再次监听)
( u2 \7 {; Y8 l# l$ B8 P7 t End Sub( j& |6 X Y9 ]5 s8 \; x" @
8 c8 M$ E( b, }
其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......
6 n9 P! ^2 B4 ?& A2 N! X % ~( g& a1 G* u! |% `
2 y/ ]/ l6 Q% r$ t: I* ?. A5 G! C
|