找回密码
 注册

QQ登录

只需一步,快速开始

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

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。
8 j! k+ ^% e# v0 k9 o  a: s6 {( O2 E( U$ \& a6 D3 ?- S
  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。( M) q1 K. M+ q4 G

; g: g7 G7 F! x5 S& X7 x( i9 Z3 [0 N                   一、基础篇(揭开木马的神秘面纱)
, h% }, F# F$ A9 r  e  L  y# T* ^6 Y/ P
  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。
6 L+ `% b5 l8 s; D* G+ q8 l! l$ ]  1.基本概念:
7 R6 j5 t. P6 F4 p5 D   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)1 O% s6 |6 |! ]  y
   0 ~2 _" r. r" f' M- ^7 d- K- f' N+ u
  2.程序实现:
0 B. a0 K- ?) g1 i! ?   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:1 g( F. h1 o4 @0 {
   (其中,G_Server和G_Client均为Winsock控件)* w' [5 N  r4 Z. J6 I
   服务端:
$ H; [# d8 V8 D* f! B& h6 q% j: [8 I- p   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)9 |$ ], M. {: U
   G_Server.Listen(等待连接)) K! ^' K+ t. N3 f$ ?! t
   
3 ?8 f  r* P1 b. L) h' n# u   客户端:5 ]/ l% R* C5 w& O, t
   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址): d  Y8 U6 H: a; C
   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)( ]( `+ e. n' z6 `
   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)
" ~7 K& V& b( V: ^4 ~   G_Client.Connect      (调用Winsock控件的连接方法)
. d* ~% }# {9 z; I2 [- w: M$ d   5 q7 e' s2 n' h( T. D" i
   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接# e4 Y& ?6 @) n! z
   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
/ ]+ s! g, x( t' ^       G_Server.Accept requestID$ z# X+ A& B8 J; l) F# E% m
   End Sub
0 a4 w* A  M5 y# s/ h( ^" m* J$ m   
. B" t- ]; G1 h. D' I: N   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现); H: O9 e4 s$ o4 a
( @& X% h, l" f) |& S2 w- z
   如果客户断开连接,则关闭连接并重新监听端口   
4 S! u% V2 a! z$ h! S9 ]   Private Sub G_Server_Close()
1 {) D  N- ]4 ?' @* l* [       G_Server.Close  (关闭连接), @4 i3 @9 ]  c5 _( I
       G_Server.Listen (再次监听)
1 p; v% \3 Y- q+ e8 m4 F8 D0 f   End Sub8 B& W9 t0 w% ]1 k1 `; n
/ V$ R! l) l. d8 ]2 {9 U0 h7 e' v
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......& f& T) O9 V7 L' H
    # _; B- s8 e* L- c: o- {

- E' e" k# G$ Q- @) }8 X
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-15 09:34

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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