找回密码
 注册

QQ登录

只需一步,快速开始

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

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

5 [+ E6 m) R% m/ e8 b1 I' D1 v  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
' E- i) Z( l* j
" p0 q; R+ ]. V0 a. r- C3 V( c                   一、基础篇(揭开木马的神秘面纱)
4 T! A  p; [! y; ^" j7 j
" q% l1 B9 |, W. J  Y9 s2 }* O  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。
9 m. ^, l$ F" V( g  1.基本概念:
- X! e9 F# p( h   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)
# }; H$ \. @" X! q   
9 F* P5 r* ~1 K! |" k  2.程序实现:# a5 F( k- e( `7 \5 D$ J
   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:% L7 V. |1 y3 z& ?" D# |
   (其中,G_Server和G_Client均为Winsock控件)
6 S8 {3 O8 f% T0 G6 n( S   服务端:
/ Z  I/ t0 P5 G( z7 _5 j   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
7 Q; L. x0 ~3 K" A0 ~3 T   G_Server.Listen(等待连接)3 n0 [+ t4 K6 g. l0 B2 v
   
* H! F2 Z; `: O5 E' v3 K% }   客户端:
+ R) H5 `' ]% F: h- ]   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)
$ ~7 J, {: I2 z2 _* ]* z0 f& l* `   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)
9 {7 V# s6 }5 }   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)  I2 I" W( R( R) E! }4 b8 w
   G_Client.Connect      (调用Winsock控件的连接方法), x' {+ y- q/ s$ |
   
& U7 i+ `7 R: R$ M   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接
! L  A6 o% b6 ]) p! w+ n   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
8 g  p' L6 o5 y, l       G_Server.Accept requestID
: v+ P0 Y! r" {: T" j( Z   End Sub
( n- d: J: H0 k% N+ P+ Z7 F   & ]3 U9 q& X4 c) {+ {4 g
   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)! r2 R# I+ f3 s% c9 d1 U1 F

) U0 {# c4 |: j7 y   如果客户断开连接,则关闭连接并重新监听端口   - v" b' c# a2 u' f: M9 J
   Private Sub G_Server_Close()2 m" w6 c- A& S# u* |: A
       G_Server.Close  (关闭连接)
$ N, X6 Z+ M! s4 d6 x       G_Server.Listen (再次监听)
8 [/ n& B1 q" B: k6 A' Q   End Sub
$ d2 b/ p+ C& W7 `- b1 l8 S7 m4 B: r0 D
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......
; S$ ]: t" ?! B8 K6 M" i8 u    
1 `) R3 F2 J7 `9 k. u' f
! {: B+ \/ y) X: c/ x4 M- S
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-13 05:57

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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