在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。
. V1 p8 U0 u- y8 M: ~& C4 g' Z9 P
8 O& X# x9 d r F7 S! M& ` 木马冰河是用C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
/ l4 b* A! H) H6 B, s0 C n8 {% ?1 k
一、基础篇(揭开木马的神秘面纱)
6 Q. f" R9 v$ X4 J6 D# U4 ]
& U- {0 x0 N' B 无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。- h! \$ {- g$ X3 t# l8 N
1.基本概念:- X/ ~! `0 ]. T* |5 f
网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request), 服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程, G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)
2 t3 F& H; W2 F + a" X* ~( Q3 w* |4 O% R
2.程序实现:
0 ]! R' j+ o/ e% Q& a/ | 在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下:
3 t0 {* V' ^! ]+ `# w& F (其中,G_Server和G_Client均为Winsock控件)
, \1 Q* t D: H/ }4 m* ^6 t7 @3 ?8 z5 l 服务端:
% ~+ T) X' d+ k5 k8 D, b G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值)
# e! @! g1 n: I- E6 ?' w& W G_Server.Listen(等待连接)) t6 A8 ]/ _5 E% y
/ M2 K T, r3 m9 [" Q
客户端:% B; b4 F% Y: z( z; E" a
G_Client.RemoteHost=ServerIP(设远端地址为服务器地址)2 Q* Y* k, o S3 ~
G_Client.RemotePort=7626 (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦)
6 o2 O( T& W) V7 T (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配)
' q8 |( Z" w1 K; ]# n6 d4 ] G_Client.Connect (调用Winsock控件的连接方法)
7 {7 Z6 |5 |+ l" J) L! ?0 l5 u 8 |% \3 H6 v' i" C8 {6 i! n1 b
一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接6 L( Z) m0 d9 e: d/ v
Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
, m6 Y: D, Q& {; R- @' s3 s G_Server.Accept requestID
+ N+ m% ^$ H+ T" t! q7 w& \, m End Sub$ }# A: t# H+ T$ L& z# g' e
4 } |% ^$ e# H% l. J
客户机端用G_Client.SendData发送命令,而服务器在G_Server_DateArrive事件中接受并执行命令(几乎所有的木马功能都在这个事件处理程序中实现)* R6 g9 C( N% y. [; ?7 o
; l2 \. N2 Z- v2 w, s3 E' }
如果客户断开连接,则关闭连接并重新监听端口
, F; G6 t7 W" o" V; D Private Sub G_Server_Close()2 N0 S5 ^+ E) v0 \
G_Server.Close (关闭连接)
0 i* `. g0 e. n6 z3 q4 J( h6 K G_Server.Listen (再次监听)
* |4 c0 j1 K7 t/ i( F7 ?" V End Sub
: d! y' Q' a! U* Z7 Q7 K. k0 N6 A [
其他的部分可以用命令传递来进行,客户端上传一个命令,服务端解释并执行命令......1 W4 I U8 y2 d2 J. a
( L, w8 z3 {: y {; x! e% Z6 n" \
|