找回密码
 注册

QQ登录

只需一步,快速开始

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

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。% \6 _9 }( T+ I) S8 {+ f

# w# |7 `9 Z1 {/ e, |  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。; }4 G6 `; g, H
2 |$ S  a$ O* G9 n3 M5 ^& m
                   一、基础篇(揭开木马的神秘面纱)
- _/ w, d2 x+ S) M, [8 G0 J; \% U: Z1 l& K  h6 }3 @
  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。! L3 b0 S7 {' Y3 \8 o! V2 G: @
  1.基本概念:1 |; z) c4 m1 F% W& d7 {1 i  w- t4 w- d
   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)  [) ^. v$ s) Y# H9 ^# j, C
   & f+ D+ Y& D2 j
  2.程序实现:
3 e* Q4 @8 k# G' K' C0 Y- L% e   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:
+ c/ {% X1 x3 f+ m% W2 y& v* |   (其中,G_Server和G_Client均为Winsock控件)
- k; X$ o3 G/ c( C; I& \7 R1 t; v   服务端:/ ^' M4 y, G" _
   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
& _9 B6 O8 u; w/ q- ~, P' R   G_Server.Listen(等待连接)3 B. b) P8 |0 K- l
   
$ o0 L; n% |* \6 O7 Y2 r+ ~3 |$ B   客户端:1 f( n3 C4 i3 n4 R4 Q
   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)7 J) |( s3 ^  M. y: [' E6 q2 V
   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)3 q, O) {6 e$ \" Q9 l4 N# E- w
   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)* L8 B. G7 A$ \0 L8 p( S
   G_Client.Connect      (调用Winsock控件的连接方法)* `2 d0 h( ~9 F- b" z9 @
   * B/ ]. s% g3 R4 b
   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接
% @' b2 N8 t2 b4 `/ w) ~   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
2 d8 Z# P3 D, V, G, g( F  _" [       G_Server.Accept requestID: p3 |) ?+ n4 Z& U
   End Sub. t) D, \' z: ^5 b4 K  [7 g+ ~
   4 @3 [; P0 e3 s
   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
: y) V, M& N( s
  |  F. B& t! D, Q" i   如果客户断开连接,则关闭连接并重新监听端口   6 m) y1 P7 f+ F' y# ~
   Private Sub G_Server_Close()) t7 h7 U2 |- E) y& j+ p; S: I5 T
       G_Server.Close  (关闭连接)
% }. D. J+ o7 L; w8 A       G_Server.Listen (再次监听): y" Q* k; e1 K3 M6 p4 V, B( h
   End Sub
. m" m. R, k: @0 B2 \9 Q# e" _: ~6 z: U
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......* x2 s% f) W% ^6 |
    0 h! |) }+ _8 S. H4 x0 i2 V( G; X- U

7 L6 C: _: b6 _. ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-2 14:48

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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