找回密码
 注册

QQ登录

只需一步,快速开始

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

[复制链接]
发表于 2011-1-13 17:02:16 | 显示全部楼层 |阅读模式
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。
- y; ^- G7 R0 q( }9 A  P' ?: `- Z3 O8 _. x9 i
  木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
- l. k6 f4 q8 w, [4 J/ c+ D' ^3 {
# s5 z8 _5 i! v! t2 U0 S                   一、基础篇(揭开木马的神秘面纱)
9 k+ f" d- n" Y/ A9 _# q5 {6 }( q/ q+ _' D$ O; @8 z' d
  无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。9 F6 m% ]9 F1 B8 ]$ y" Q
  1.基本概念:
' Z, G/ @7 Z- L- a9 N8 G8 i' Y9 T   网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)$ [1 n5 }- P0 c
   
3 `- z/ G1 `& t. A: N  2.程序实现:8 v7 Q" O0 {5 }" x# r, U* H
   在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:, B9 t  W7 i" d; n; h! _
   (其中,G_Server和G_Client均为Winsock控件)
& Q; y+ @( _4 f$ x6 i$ H6 t0 W( M   服务端:
0 |0 l* h6 ^  ^1 m% F4 s   G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)1 B# F$ n  {0 _2 N1 ]
   G_Server.Listen(等待连接)8 B9 j4 E" h" u& \) E$ a
   
& e( o' a  _6 g/ n   客户端:
5 L* y  i. d( Y& ]) f. |) H7 ]   G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)3 [$ W8 s/ y. |5 Y
   G_Client.RemotePort=7626  (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦). E# D3 N/ p/ W1 `4 x' k+ a
   (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)
- u7 D  k. L- c   G_Client.Connect      (调用Winsock控件的连接方法)0 v* n7 q9 L! y% q% z
   ; Y! G6 T5 E$ h% N/ [& j+ `: A
   一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接- C1 v6 @) k9 R3 r, O/ U4 r
   Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)5 F  o% n/ {9 u# z4 o6 A& K
       G_Server.Accept requestID1 O. M' }# ?+ h7 I4 y: G
   End Sub
% Q. z2 {, G- n, u3 V& {   
$ U5 W7 A. Q' ^1 h   客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)
; t. i) U' a: V! u, [
7 O9 z% c; c7 C. [2 p   如果客户断开连接,则关闭连接并重新监听端口   0 `% _- T% y7 _# E7 C8 M, ~2 F6 Y
   Private Sub G_Server_Close(); c  x  l' {0 O& T
       G_Server.Close  (关闭连接)7 p7 c3 z, ?$ W; K* _
       G_Server.Listen (再次监听)1 c6 b2 V) r6 U& H" V: S
   End Sub" @+ L3 A+ f5 l8 \

# H$ E( Q' `& p$ d( z6 H! n   其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令....... Q$ h8 U) w0 W; J6 r1 l
    
. A$ `& m' A8 h& W# Y3 D. X3 k1 Y
6 c+ o! H: Y: `* d
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-13 06:52

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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