找回密码
 注册

QQ登录

只需一步,快速开始

冰河浅析 - 揭开木马的神秘面纱(上)

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。
* g" @: `  S- `0 O& {/ v5 X5 K9 a# O  Y5 R
  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
) V/ t* _( ~9 U- C; W- g
0 d( A) r- F; `9 t9 [                   一、基础篇(揭开木马的神秘面纱)
0 A5 @1 p& t  V0 L3 k5 D$ \$ p4 Q. [$ g* Q
  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。9 l% K0 `- Y0 ^2 F
  1.基本概念:2 J: h  ~0 @$ A" A9 K
   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!). I, G( r% ~% E# x* d
   8 c) k0 ]# ~$ x
  2.程序实现:' W: C4 J: q3 t" l( t
   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:2 w3 B0 p  C4 }
   (其中,G_Server和G_Client均为Winsock控件)
2 K  E4 S+ W8 r5 x5 k/ D) [* @   服务端:
: N+ }! G7 @( d" m   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
3 R2 P) a3 @  D   G_Server.Listen(等待连接)+ k3 D; W! m9 s) P+ d% v
   
9 }  Y: S1 H+ j: R6 {   客户端:3 O3 H, F' H+ i  i1 ]
   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)
6 h9 a+ r8 B( {5 P" h3 ~2 S   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)" K; A, f* d" ~% _0 S
   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)' {9 I# [: g) e0 B
   G_Client.Connect      (调用Winsock控件的连接方法)
6 Q5 \# R' `6 @( ?0 i   
; W4 ^: J" m/ S' q! Q4 b4 F, j1 ^   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接* _/ Z5 _5 h" y" ~7 f' }+ V" i- c
   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
* }) e$ d0 u, N$ Q9 g       G_Server.Accept requestID/ |4 l+ F6 S  o. D" r2 \  F% K
   End Sub
8 i& J# }( F; ?* }" N% a   
0 ^- k: Q$ d4 \8 k$ g$ O. L   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
6 r& {- |& l: t' m1 X4 s. c: {4 C- ?9 {  B6 ]: O9 h
   如果客户断开连接,则关闭连接并重新监听端口   5 n1 o" X9 X0 _! P, X
   Private Sub G_Server_Close()) Z  U8 m+ g+ O7 N- I
       G_Server.Close  (关闭连接)7 l( B6 {9 T& i, j% N9 R8 b  g
       G_Server.Listen (再次监听)& w" b- X3 Q! M% o
   End Sub" e5 h% I2 q. J0 |' h$ i& \* x: m7 v
, x! D% @1 l% X: O' j# g* d8 m
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......
. ?( v2 r$ N$ P* F    
( O, u7 H2 V! W$ y$ @8 o' w3 U" t. `
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|本地广告联系: QQ:905790666 TEL:13176190456|Archiver|手机版|小黑屋|汶上信息港 ( 鲁ICP备19052200号-1 )

GMT+8, 2026-7-30 01:34

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表