找回密码
 注册

QQ登录

只需一步,快速开始

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

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。
7 |: w3 L8 m) p$ q. c5 E" J2 v! R) A) f+ X
  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。! T: T1 V1 H) q' v$ J; u

0 W+ c& F- w  c8 o/ Q  I. C                   一、基础篇(揭开木马的神秘面纱)
2 b& g0 ^9 E/ ^' r4 o. L& i/ [1 i5 D6 ?; n
  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。" ]2 C& \3 k3 I- p
  1.基本概念:
5 }& O( ~8 n( a   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)( I: U7 ?; ~8 y7 K7 [
   ) L/ `) }. s4 f. c+ d" i( K) p" Z2 ]
  2.程序实现:. I, }% g3 I2 t- z
   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:
  c! s/ B8 R" R/ }! G   (其中,G_Server和G_Client均为Winsock控件)
# b# l7 R4 d3 K- z5 a' n   服务端:
) r( w. d2 u. W, r   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
3 C: R8 q5 R2 D/ d" n3 x   G_Server.Listen(等待连接)" U4 [2 i2 I% ^' ~# x' _  C7 }
   
; S3 m% [# X" X/ r7 u$ g# V   客户端:" o9 `9 P. S) n2 M2 R$ X
   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)
4 _! W1 h# w: F% c7 W- Y, w: b   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)( j7 ^0 N' R  T) Z9 x
   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)
& R: G  C: {/ ]9 r% \2 G( Z* W7 b   G_Client.Connect      (调用Winsock控件的连接方法)8 e' a1 ]0 D7 Y6 K0 {* m
   6 B+ u( t2 K  p+ d$ l; ~, B: v
   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接
! c; I, ]1 p% `- ^' W# Z   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
- ?% a2 C6 Y! v2 j       G_Server.Accept requestID
! M6 }% [: f4 O( H   End Sub1 o% F* W6 F8 r: L) R. V
   ) v- P7 s9 D  i. x3 `
   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)" e; p5 r* u8 q% Y- ^4 \

) a8 J# j: W8 T; F   如果客户断开连接,则关闭连接并重新监听端口   
9 B+ _, W9 f7 B+ ]7 M; `: A   Private Sub G_Server_Close()" W0 E/ ?* ~# \  P+ G
       G_Server.Close  (关闭连接)0 z3 A) K6 n, n0 h+ n1 ~
       G_Server.Listen (再次监听)# k5 h: L# J, z- V2 \6 Q
   End Sub
( n6 ?6 Q2 x" m* ^% a1 y1 ~3 s5 p0 V( h# W: [' c% z
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......0 |# e! d$ A# Y/ O" k
    
6 t1 v3 W* _4 T
" L9 }$ [/ ^$ ?0 g* o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-14 23:27

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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