找回密码
 注册

QQ登录

只需一步,快速开始

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

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。/ r: e4 h- h+ q% ^( b) @3 p+ g0 t. w* X

6 e5 f4 E* b0 N" f: c" @3 b  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。2 ?5 N2 l& k' m

' Y% S- u  d9 c                   一、基础篇(揭开木马的神秘面纱)* P5 F) Z* ?  M9 v

* J  z1 S) j+ I& f+ f! s  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。5 |" _8 }/ l( ~
  1.基本概念:
  r" j  m3 }" K% u) \( O/ h$ S- v   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)
7 u, n& s2 j0 z  o) e   
( F7 O% D( j; {! ^' {& Y  2.程序实现:
7 X1 b& D7 Z' c# R   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:
0 \& x; x( A1 ]+ Q; h2 V% H- h   (其中,G_Server和G_Client均为Winsock控件)
) \- j; {1 P! P5 V$ `- z   服务端:/ D! ]7 p2 Q) r+ w) x8 Z* g- V
   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
- S  a/ B6 J* T* A% e% w% n% h   G_Server.Listen(等待连接)7 ^4 W2 j1 `  U& J) L
   
; v/ D+ U) }  q) k# _   客户端:
$ t! `9 S3 T+ b' o  I' \   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)
. Y0 l6 f  x1 [8 C, L% F' {2 Q5 K" U2 ~" D   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦). v$ U1 J; t5 |- v) Z$ G  E
   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)
9 j( L7 O* k; I' e3 H( W, V: y   G_Client.Connect      (调用Winsock控件的连接方法)/ }5 ^  X( H' ^2 v. g6 V
   ! i& j* j* f- a
   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接
! m' M4 c7 f) u/ _! z5 n' W   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
' |6 o4 }, p+ I/ n2 s9 ^( B+ n1 A       G_Server.Accept requestID" |4 [+ a, K4 F, U
   End Sub* z$ W) A, Z! D' W7 \
   
0 \# O6 h, K" |$ }: N: o! Q   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
0 Y3 q( r: z( ~' D. A; Y, j  G' a+ ]$ Q& O( m2 J7 W$ b( H7 D
   如果客户断开连接,则关闭连接并重新监听端口   " B; J* X* x1 \
   Private Sub G_Server_Close(), g3 |& K' b; t' |3 ~
       G_Server.Close  (关闭连接)! r; i' m1 K! T3 s, }
       G_Server.Listen (再次监听)
: F9 u6 z+ G/ C6 v7 e2 ?   End Sub; C) r; h8 A6 ]+ u, Q
: U9 E/ G5 V. [
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......* h$ G5 c; F1 j; z0 M
    
' o" z2 x1 d+ D# c& ^5 x* m! F& c3 e) \
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 14:50

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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