找回密码
 注册

QQ登录

只需一步,快速开始

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

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

' b* m6 L( Y4 w6 n; H* j1 P0 X. i8 N) K  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
) O; q; T: [& b
4 U: O6 V& ^* N$ h/ [4 I. Z6 }                   一、基础篇(揭开木马的神秘面纱)
; G3 I$ V9 P8 x6 h- `, B3 y8 S( `
  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。
% F7 l5 A! Y9 h5 r% B, Z3 f  1.基本概念:
$ ]3 }# O8 V1 t   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)8 c6 r. B( F! k7 S7 F& O8 T
   
, L9 m- m, D, C0 j  2.程序实现:
3 h9 z! \( F0 |   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:% z! S; W7 `8 U! z5 R
   (其中,G_Server和G_Client均为Winsock控件)" ?( h3 _. F$ d2 s6 o
   服务端:- d4 o8 o. p3 {6 q
   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
' v* h0 L  e% B. `   G_Server.Listen(等待连接)
; ?8 _8 R( L& v7 v; n7 _! C   ; C* p& u1 J8 k- A0 _1 ]
   客户端:/ M% Y% |+ j* }
   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)( h# v9 _5 d4 m3 w
   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)+ m9 z  z& y8 w9 y5 \; g
   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)
+ {/ l5 t3 \7 H2 j5 G4 T+ [' S   G_Client.Connect      (调用Winsock控件的连接方法)
. R" ]! e* B! G. X  z   & s1 |8 L/ d4 b+ H1 r
   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接
3 |% _1 [8 c" ^1 A   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)) i' x! z" m' D1 v3 U( ]
       G_Server.Accept requestID
1 D0 ?; x4 j4 |- x   End Sub
9 M8 v' p/ R) i( b   
# n5 O. g8 z1 v/ A3 A8 h' u- v5 u" b   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)- {+ B7 ~2 I, Y1 p

. p* A, q6 n1 ~- _# |: d) `9 d1 W   如果客户断开连接,则关闭连接并重新监听端口   
- g& P" {5 [6 _5 ^: y1 @   Private Sub G_Server_Close()
7 H$ ]* p$ T4 b( o: n       G_Server.Close  (关闭连接)
: m3 t' w' P; e/ a       G_Server.Listen (再次监听)
! F! W/ K+ L- `& l- D4 W5 u   End Sub
1 z. E3 x4 i1 c  |2 C7 F$ U$ U! p7 M
   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......
" ^: I) d$ u2 T    
" h6 T* ?% Z2 r9 ?+ Y  s  q
8 }4 v+ w3 E3 H) a+ z- o. A6 X
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-14 22:08

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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