找回密码
 注册

QQ登录

只需一步,快速开始

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

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

, _+ [, W, J9 D" q8 ^# P) J  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。1 G  g3 {8 D/ K3 W3 _6 r9 O
* L* \5 m$ @$ V$ j1 r
                   一、基础篇(揭开木马的神秘面纱)# a9 w; V+ c$ {" w4 H' i

) t0 J7 d' d& Y  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。
1 N0 f& g0 T6 e" t6 @: {  1.基本概念:
+ N  G# s3 n4 O# z: x5 P8 M   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)
6 z. T# k' Q! s7 w: ]5 w$ g( v   
. i- M! v6 |  z( C, w  2.程序实现:
+ Z+ [& ?4 R1 \" Y7 }/ J0 ~   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:
5 [3 {, S8 D" n5 M$ }   (其中,G_Server和G_Client均为Winsock控件)
! O- z! P4 D  l5 ]8 C   服务端:  |& k5 t- a0 m# P$ {, i
   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
, n9 O+ I  s* ]- G* D" b   G_Server.Listen(等待连接)
1 A/ I' m0 z1 [% M% x+ ]   
' H+ }8 j; {& t2 ~   客户端:
' R. p6 ?6 T# C' S   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)4 u) W! N* e: V; b# _$ ^$ q5 U  C3 G$ U
   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)  J! j' ]% C4 k/ Z% t
   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)
. J) k" }8 O9 S   G_Client.Connect      (调用Winsock控件的连接方法)" F* e5 z' l, u! [1 P* n7 T5 D4 q6 t
   - S  Z0 r+ h) X  K. s: r- g2 t5 T
   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接
/ E7 q- j) Q1 l9 G! z+ M   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)4 C# U+ _4 g4 X' a
       G_Server.Accept requestID( K7 v- a; e' U. [/ Q
   End Sub
5 ~! b2 w: D) H- f+ C   5 Q# E# o( ~' r
   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
3 y, ^0 `% l  u( }2 P! ^; n  v2 A1 ~! j/ v  K& d
   如果客户断开连接,则关闭连接并重新监听端口   
/ P' L) [$ ]1 P. l3 f& ~   Private Sub G_Server_Close(). o) x3 ~9 Q- G2 @' `$ a2 b
       G_Server.Close  (关闭连接)
  b& Z: b( |% i) r' S5 [1 J- X1 R" f       G_Server.Listen (再次监听)  j1 T" h1 k1 F( V5 S% o9 _
   End Sub
  Q& e8 T5 E0 H: G6 S" n# E7 K# T8 t
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......6 k7 J4 ^! a5 k2 U7 S& O0 i
    
5 z* g; k; r7 }  m
& L' ^: G7 K1 b" ^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 16:39

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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