主题:木马冰河之原理篇(转载)
在网上,大家最关心的事情之一就是木马:最近出了新的木马吗?木马究竟能实现哪些功能?木马如何防治?木马究竟是如何工作的?本文试图以我国最著名的木马之一 冰河为例,向大家剖析木马的基本原理,为大家揭开木马的神秘面纱。
木马冰河是用delphi和C++Builder写的,为了便于大家理解,我将用相对比较简单的VB来说明它,其中涉及到一些WinSock编程和Windows API的知识,如果你不是很了解的话,请去查阅相关的资料。
一、基础篇(揭开木马的神秘面纱) 无论大家把木马看得多神秘,也无论木马能实现多么强大的功能,木马,其实质只是一个网络客户/服务程序。那么,就让我们从网络客户/服务程序的编写开始。
1.基本概念: 网络客户/服务模式的原理是一台主机提供服务(服务器),另一台主机接受服务(客户机)。作为服务器的主机一般会打开一个默认的端口并进行监听(Listen), 如果有客户机向服务器的这一端口提出连接请求(Connect Request),服务器上的相应程序就会自动运行,来应答客户机的请求,这个程序我们称为守护进程(UNIX的术语,不过已经被移植到了MS系统上)。对于冰河,被控制端就成为一台服务器,控制端则是一台客户机,G_server.exe是守护进程,G_client是客户端应用程序。(这一点经常有人混淆,而且往往会给自己种了木马!甚至还有人跟我争得面红耳赤,昏倒!!)
2.程序实现: 在VB中,可以使用Winsock控件来编写网络客户/服务程序, 实现方法如下: (其中,G_Server和G_Client均为Winsock控件) 服务端: G_Server.LocalPort=7626(冰河的默认端口,可以改为别的值) G_Server.Listen(等待连接) 客户端: G_Client.RemoteHost=ServerIP(设远端地址为服务器地址) G_Client.RemotePort=7626 (设远程端口为冰河的默认端口,呵呵,知道吗?这是冰河的生日哦) (在这里可以分配一个本地端口给G_Client, 如果不分配, 计算机将会自动分配一个, 建议让计算机自动分配) G_Client.Connect (调用Winsock控件的连接方法) 一旦服务端接到客户端的连接请求ConnectionRequest,就接受连接 Private Sub G_Server_ConnectionRequest(ByVal requestID As Long) G_Server.Accept requestID End Sub 客户机端用G_Client.SendData发送命令,而