找回密码
 注册

QQ登录

只需一步,快速开始

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

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。
: h; M* a6 ]+ s/ K$ H9 b% k; [8 Y2 f( `! n
  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
9 @% V4 s( I2 u0 D- t7 a5 v" q; f! }6 U
                   一、基础篇(揭开木马的神秘面纱)$ Q' b2 \! \( |; q. [1 e4 o- C

8 _* u  W0 p# z3 T6 Y  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。4 F, D( d3 R$ d- t
  1.基本概念:
7 c% }' r* z3 U, M+ j3 ^   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)
  I. @% h1 a% B9 g7 @& L' x     S/ A9 }9 x3 z4 j
  2.程序实现:' i4 v6 T: }/ I' Q- p% U
   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:
, s# W9 ]" |+ D8 k   (其中,G_Server和G_Client均为Winsock控件)
4 X9 H/ l7 \; @7 y' k( \. k& m% s   服务端:
2 _' G( ?8 Y: f+ y# _3 v   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)% `' ~$ x( m) F# ^- ^
   G_Server.Listen(等待连接)
+ g) W: |5 M1 Y, a   
" Q8 p4 k# a9 b& P) O   客户端:
; R, H% C9 N9 N; W1 T: b; r0 }   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)2 p& K# L7 X+ R4 ]/ n
   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)0 r" ~3 g& }& q( C0 p- p9 a) c
   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)2 W0 _2 Q5 `& M; m/ ^2 _, A% I, j$ ]8 k
   G_Client.Connect      (调用Winsock控件的连接方法)
8 ?' P* H7 {( y, s" G; x   $ p) P8 h9 T+ i6 A4 v
   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接1 W4 @6 r( x& [2 o8 ]& O
   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long), B# U: `2 P* i4 O2 r# D# h3 b' l
       G_Server.Accept requestID! q& y8 w2 j& r% u) Y1 ~: x
   End Sub
. T9 G+ n( D6 b8 [   
2 ~" D) e$ \$ ?/ l% O% |3 y, h   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)8 u" J: J8 V, b. m
- V8 f% Q3 T! N+ y. }# h
   如果客户断开连接,则关闭连接并重新监听端口   5 A7 Y6 _1 X/ B% O
   Private Sub G_Server_Close()& D4 C! N5 z, F; M/ F! n
       G_Server.Close  (关闭连接)- ^7 I! O3 B" t, D. T6 Q: r
       G_Server.Listen (再次监听)0 d% D' M! @- }$ z
   End Sub
6 \: T5 Q" d5 x% _: V0 t6 `
$ i7 y, j/ m$ ]2 K   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......7 D8 ?) z$ g$ i" G
    ; ~4 X5 [* L9 d( p- m+ t
# x& a" R- ^* W
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-1-30 12:09

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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