找回密码
 注册

QQ登录

只需一步,快速开始

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

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。/ x( \6 m0 U; L6 b* J- w
9 k+ e# X2 o5 k- Y* U
  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
) a2 y+ `# I$ B' O( d+ U  b# d$ p. J9 B  \: \
                   一、基础篇(揭开木马的神秘面纱)+ O3 N, {$ g) c7 x" i0 C

; [; R; \( F. }  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。
2 f, c3 c3 O* S: j  1.基本概念:
/ ~/ q; J4 w7 k0 q( R8 \6 U   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)
: W. i) g: ], M, f! T5 h   * C6 c/ Q% e$ E$ P
  2.程序实现:( Z$ U3 R# p0 }* x
   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:( A& B& |6 u/ |* n! R3 M$ N! \
   (其中,G_Server和G_Client均为Winsock控件). P/ g4 R0 F- o8 j) ^
   服务端:
& p- }; Q# `; z   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
) H% m: h; G9 z6 U& q  g   G_Server.Listen(等待连接)
! t3 s% t9 O0 `: g   6 s) R4 z, x0 Y9 T0 R6 U- p1 p0 k
   客户端:+ I. e( N% z. u/ D
   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)
% ?# t# }) h2 W! }2 Z& I   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)
* P+ b# ]2 ?7 b/ y+ p: A   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)
+ A, A5 q" C8 c6 U   G_Client.Connect      (调用Winsock控件的连接方法)
6 z, I) \1 ^& k! @, s* o   
, w+ X3 s% q/ [; d& U$ d5 d   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接$ j0 C' V$ `. |5 z; r' n
   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
. \. x3 G$ s' c+ U8 i4 B. b/ m$ i       G_Server.Accept requestID
$ N3 i4 K' ^4 L, A0 i/ f( L' I   End Sub
4 ?0 d) I' Y0 {& n   
, P2 N8 w, a, U8 r   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
: z2 l% S  U; X2 N. u) b* ?
) |; M( J; r/ @+ J   如果客户断开连接,则关闭连接并重新监听端口   
1 v* \( X/ I$ Q8 i& ]   Private Sub G_Server_Close()
" W  a( L$ W8 |1 Z! \       G_Server.Close  (关闭连接)& _9 @. R$ f$ U+ X: ?% Q+ F9 O0 ?- {
       G_Server.Listen (再次监听)7 V' m1 d$ q1 G% {! ^$ m7 j
   End Sub. w+ _6 S3 l# q
) i9 r2 L; J( K5 ]$ S2 \! W8 N
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......6 O! K( K& L8 U- _
    
/ o0 G1 Q) f7 q. v# y9 x' c+ F9 Q- l) q' Y+ @* [! E+ q
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-4-30 18:58

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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