找回密码
 注册

QQ登录

只需一步,快速开始

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

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。  z4 v$ T7 R/ p$ O) i

2 Q, T, R6 P, j  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
( C9 c6 c, K( T/ P# W4 r0 v# Y( r( ~: {0 t9 [8 I2 h
                   一、基础篇(揭开木马的神秘面纱)
+ W% w" ^0 N9 E% j7 `: ~( o, O% k) W$ H4 c. {$ \
  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。/ a# y6 z( U5 ^* s2 D
  1.基本概念:
  j0 H8 x+ ]' ?# @7 j/ |7 b. \' F6 ?   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)
+ M& D+ o* D8 Z6 }( d   
$ f5 a* {! t- n+ }) q0 C  2.程序实现:; m, [, f3 Q5 c0 _! `
   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:
% z$ j; _; B7 r* L' g   (其中,G_Server和G_Client均为Winsock控件)
; z  S: m% ~# A' t   服务端:
  h/ e$ f3 S% t& }) [& }   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)$ V- u$ i% ?: a- c
   G_Server.Listen(等待连接)
7 t1 M( r6 M( j9 Q9 V+ }   
. A% ~3 V/ j( Z- ]6 d   客户端:
& L, B6 T9 G# G% P4 Z) K   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)
# \( [! h1 J6 u+ \9 v   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)
. H3 l; h( ]2 _3 d   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)
- S+ ]8 X' B$ u3 d# {% W   G_Client.Connect      (调用Winsock控件的连接方法)
; r4 g4 O9 T5 S1 s3 j$ D7 a   
; Y( a  l; y3 L# d; k   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接
# a% w/ q  R( d7 v   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)2 ]* H& L' e  S. s, Y8 c. `
       G_Server.Accept requestID
  B3 e& v3 r" ^$ ~& X) ~   End Sub
7 N- K- ?) I0 ?, X. _   
- k. r6 m3 L3 I1 J. v- D5 x7 @   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
! B6 {" c, U! S4 Z, E8 H5 U1 ~/ p& g4 m0 T, |
   如果客户断开连接,则关闭连接并重新监听端口   * p4 }1 g# @4 e/ Y. V
   Private Sub G_Server_Close()# v0 K# W" e6 W' a( \
       G_Server.Close  (关闭连接)
3 k# ?4 Z/ i. @& {* S' {       G_Server.Listen (再次监听)
  u$ x* ]0 W0 B6 `! X3 u# t   End Sub7 [" {( Q- K% {- y# j; Y4 F
: V% `  ~1 x" s: Z! G
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......0 I6 K6 P, S0 s- {# b1 z& X2 n! d
    , X$ L% a  r+ ~+ Y, O
" G& I: D9 o% N
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-7-30 01:37

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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