在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。
- y; ^- G7 R0 q( }9 A P' ?: `- Z3 O8 _. x9 i
木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
- l. k6 f4 q8 w, [4 J/ c+ D' ^3 {
# s5 z8 _5 i! v! t2 U0 S 一、基础篇(揭开木马的神秘面纱)
9 k+ f" d- n" Y/ A9 _# q5 {6 }( q/ q+ _' D$ O; @8 z' d
无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。9 F6 m% ]9 F1 B8 ]$ y" Q
1.基本概念:
' Z, G/ @7 Z- L- a9 N8 G8 i' Y9 T 网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)$ [1 n5 }- P0 c
3 `- z/ G1 `& t. A: N 2.程序实现:8 v7 Q" O0 {5 }" x# r, U* H
在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:, B9 t W7 i" d; n; h! _
(其中,G_Server和G_Client均为Winsock控件)
& Q; y+ @( _4 f$ x6 i$ H6 t0 W( M 服务端:
0 |0 l* h6 ^ ^1 m% F4 s G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)1 B# F$ n {0 _2 N1 ]
G_Server.Listen(等待连接)8 B9 j4 E" h" u& \) E$ a
& e( o' a _6 g/ n 客户端:
5 L* y i. d( Y& ]) f. |) H7 ] G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)3 [$ W8 s/ y. |5 Y
G_Client.RemotePort=7626 (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦). E# D3 N/ p/ W1 `4 x' k+ a
(在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)
- u7 D k. L- c G_Client.Connect (调用Winsock控件的连接方法)0 v* n7 q9 L! y% q% z
; Y! G6 T5 E$ h% N/ [& j+ `: A
一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接- C1 v6 @) k9 R3 r, O/ U4 r
Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)5 F o% n/ {9 u# z4 o6 A& K
G_Server.Accept requestID1 O. M' }# ?+ h7 I4 y: G
End Sub
% Q. z2 {, G- n, u3 V& {
$ U5 W7 A. Q' ^1 h 客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
; t. i) U' a: V! u, [
7 O9 z% c; c7 C. [2 p 如果客户断开连接,则关闭连接并重新监听端口 0 `% _- T% y7 _# E7 C8 M, ~2 F6 Y
Private Sub G_Server_Close(); c x l' {0 O& T
G_Server.Close (关闭连接)7 p7 c3 z, ?$ W; K* _
G_Server.Listen (再次监听)1 c6 b2 V) r6 U& H" V: S
End Sub" @+ L3 A+ f5 l8 \
# H$ E( Q' `& p$ d( z6 H! n 其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令....... Q$ h8 U) w0 W; J6 r1 l
. A$ `& m' A8 h& W# Y3 D. X3 k1 Y
6 c+ o! H: Y: `* d |