找回密码
 注册

QQ登录

只需一步,快速开始

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

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。$ U% Z4 x1 B3 \7 `
* b) Y  O4 c' o
  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
! h# N; z" _1 T/ @7 F7 d2 w& H6 w: G$ p% R
                   一、基础篇(揭开木马的神秘面纱), q3 u2 m& [) i! F2 ~" h

7 I. D* N: g6 T  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。
$ J! f3 H& V0 {! ]6 C* k8 t$ M  1.基本概念:
+ ]3 i$ F7 A* M6 F; u: ^   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)
& b, K, E+ c* \9 M   
' y# A, @8 u% R$ n$ e2 u  2.程序实现:9 U# I. a- |$ N2 u! Y
   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:
# ~7 }& O) @/ [. r! z5 w8 T: H   (其中,G_Server和G_Client均为Winsock控件)
7 Q; H) `" E2 \' G0 H   服务端:  S( P# I" }6 {' P7 l& E
   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
( M9 @+ X. I. Z3 c( ]% V( }   G_Server.Listen(等待连接)
& V- V6 P$ N* T: _  e8 h4 _   " |& D+ o0 Q, q- @. X' M1 d
   客户端:
$ _. R% N! }0 |+ h9 ~+ |0 u# }   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)
1 z7 M5 v; v* m. k0 G& u   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)
' Z2 Q6 N2 m8 r' l" G" A   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)1 V9 O: r; F; Y* T3 d2 L2 w
   G_Client.Connect      (调用Winsock控件的连接方法)
2 g$ S2 A* m- v. A% V% f& b" [3 B     r" t' f- [1 Z; c" r
   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接6 i! U1 n3 V& \' G) o' K
   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
! {, ], W7 e1 X5 R& {- w; t       G_Server.Accept requestID
2 n7 ~. q; {: A  x5 s* P9 p" v   End Sub3 |" u# I8 i" P) q' e! g  p
   . D  @  K, k+ z5 v; U( y
   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
5 Z' k" ]/ _' S+ [* @  c/ G0 x# i5 F( f" E+ V
   如果客户断开连接,则关闭连接并重新监听端口   
, `  i% Z+ ]" @   Private Sub G_Server_Close(); y/ o( Z7 s; y6 f1 c1 g3 A: \
       G_Server.Close  (关闭连接)
" ]/ S# e5 {. v( k9 B2 I       G_Server.Listen (再次监听)2 U3 H! p' u) }, F3 ?! X
   End Sub( y5 ~1 u' }. ^
2 G8 }9 t! B# G3 }  N
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......
: h* {/ d; i* v$ {5 j    
( I2 H' G0 `' K& f+ i
3 z) K+ P& x) K/ ?/ _. j4 u8 m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-17 04:24

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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