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

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。/ g0 ?$ f5 f' p# |( u; n
. [/ R' C1 F+ g0 d: Q
  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。' f  c( Q6 D' q; F  P9 `2 e

! ^2 E# C% K! c                   一、基础篇(揭开木马的神秘面纱)
8 [9 ~1 g9 U1 b3 g) k) x/ k8 I# z+ F  o, d
  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。
" v0 t; X( f* w3 |- F* K' F; g; Q# W/ P  1.基本概念:+ B% n+ l: E: u- u7 ~
   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)
* P8 e% F6 M; `& k   * H% [; y6 x. U* h1 I/ [4 x3 y9 K. h
  2.程序实现:
& C) a# G% |' ^, n" M   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:
8 k  R( U+ b- @; L' o   (其中,G_Server和G_Client均为Winsock控件)( Q" C9 s$ C* z4 T* M0 ]" r
   服务端:0 Q' l* C' U" e* c% X4 }
   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
! N0 c. Z; U/ w+ j9 X$ O  r   G_Server.Listen(等待连接)9 D9 v6 Q. Z' |& z' z" S
   
4 Y% r- d0 j) K# a   客户端:
- F$ @/ R, Y& P+ }% M0 k* t   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)
) L+ a0 b  u* ]7 i. a   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)& \, G- F# Q, b' r3 x8 W4 E% F$ E
   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)* v) w0 t/ t% ]/ c- d
   G_Client.Connect      (调用Winsock控件的连接方法)
8 Y2 [! q  T/ {3 T- p1 E' W6 b   , x, D% `7 _; F2 `0 c* e! P
   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接6 ?8 h' Y! x4 f& Z: Q& a
   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)6 g8 a# Q6 `. Z# p4 t: t$ C9 A
       G_Server.Accept requestID) ]$ P/ p# J1 x4 t: ]7 r$ G7 L
   End Sub, y# u$ l+ o3 W% s+ H
   7 @: v, b' O* r/ F3 H3 d- `. b
   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
) @4 r$ U+ f4 O. X7 l
8 O! h0 n4 o, }' w. _8 g   如果客户断开连接,则关闭连接并重新监听端口   : d) X: {2 K( _$ F" p+ f" P: t
   Private Sub G_Server_Close()
) O' g8 T' D+ m' M       G_Server.Close  (关闭连接)
! J# T3 b. o) |$ x5 {       G_Server.Listen (再次监听)2 A: O/ b: O0 d2 u
   End Sub7 C. `. _; a& Y) c1 q; P
. g8 e. ^% u& h, e: H$ L
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......
+ F  [& z) _% ?    ' t% [0 z) y; F- R  @: W6 U. e

* S/ W6 W5 |/ W& B# x) r
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|鲁ICP备19052200号-1

在本版发帖
关注公众号
QQ客服返回顶部