找回密码
 注册

QQ登录

只需一步,快速开始

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

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。
7 ~" [6 ~* ?* h8 U& A. v
: A% j0 T1 r8 |! a7 u; Q  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
% `7 x: m( j# c" I' Z
6 o; @" y0 a' K/ h, e: f5 N' J' l                   一、基础篇(揭开木马的神秘面纱)/ O. a- V7 [0 V1 K" F: R
  g# `$ U% e5 N! c! X# L. m
  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。
: u' [1 c$ R3 W$ |8 @0 `  1.基本概念:
2 q5 c# T) n  Z* W   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)* z0 x; T/ i. h' c( n
   4 u+ y$ ~2 L* X" r8 o
  2.程序实现:
6 n0 X; o% ?' s2 a   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:
8 @6 Y+ j( ^3 {$ n, R, ?   (其中,G_Server和G_Client均为Winsock控件)
6 ?3 s8 D5 x8 B) }0 M7 J. O. Y   服务端:
9 L3 V( j: Y! J   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
6 g# D: I# P4 O# A   G_Server.Listen(等待连接)
1 D- T0 k! B, v3 b" q. A5 \   , p' T' `9 L0 q+ b5 k
   客户端:
, K+ z# F. n$ m' }) D1 M   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)
0 a  Y" S+ Z! K. \6 ?0 E   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)8 Q2 c+ V/ d- E) V0 u
   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)* [8 r  n$ p, b1 r+ c; p$ R
   G_Client.Connect      (调用Winsock控件的连接方法)+ l; K4 k  n' F% _* _
   $ O2 e5 w, p# f6 V+ N
   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接' k5 i, q9 }& n( c% e2 U% l( j9 m
   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)  X) y$ r+ _/ z. l$ V) c/ v* ^
       G_Server.Accept requestID6 D7 ^" k; G8 b& \9 j
   End Sub
- s6 Y% A& W6 t8 R     }- E  C3 d- d
   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
" ?5 R& q: r  F" s/ \1 G5 s
8 J8 P- N) p4 P8 l   如果客户断开连接,则关闭连接并重新监听端口   7 |4 X4 J4 w5 q; f* \- d& f
   Private Sub G_Server_Close()1 P& q+ k6 K7 ~: W3 S
       G_Server.Close  (关闭连接), E" a* O, S/ Q. {  y2 A
       G_Server.Listen (再次监听)
9 r0 U( e% ^8 M7 M  P$ C; Y   End Sub
. b. x+ K# y) V' ]# u
% t% `+ d3 v& d# e- N   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......$ |8 k4 d9 [. @9 }, v5 B- @; B
    / x8 e+ d1 w9 x, ]1 v  l
$ n# D+ }3 q. \( m4 t9 p  @" {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-16 16:38

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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