基于VC远程局域网控制的研究与设计

时间:2022-10-18 08:40:14

基于VC远程局域网控制的研究与设计

摘要:文中讨论了通过互连网对远程局域网实现控制的原理;在控制端和受控端制定的通信规约基础上,实现控制端对受控端局域网控制包含获取局域网服务和局域网文件下载。

关键词:远程注入;通信规约;控制端;HTTP 隧道

中图分类号:TP393 文献标识码:A文章编号:1009-3044(2007)14-30656-01

Research and Design of Remote LAN Monitoring Base on VC

JIA Hao

(Southwest University of Science and Technology,Mianyang 621010,China)

Abstract:Principles of remote LAN monitoring is discussed in this article. Remote LAN monitoring realizes the control of service of LAN and downloading file of LAN base on the communication protocol that the controlling end and the controlled end use.

Key words:Remote create;Communication protocol;The controlling end;HTTP Tunnel

1 引言

当前木马的功能越来越强,一些木马不仅能对感染木马的计算机进行控制,而且能够对其所在局域网资源进行控制。这极大地增强木马对受控端进行控制的能力。网络远程控制系统对远端主机所在局域网控制一般方法是:在远端主机上运行服务端程序,(如木马,就是木马的服务端),服务端程序获取所在局域网中资源信息,然后通过控制端和受控端之间的信息通道,把收集的信息传送到控制端。控制端根据服务端传来的信息,通过发送指令对远端局域网资源进行控制。远程局域网控制可用于合法(如远程网络管理,远程资源共享等)和非法(如木马)。本文就木马中远程局域网控制来进行研究,而系统采用VC实现。

2 远程控制系统中关键技术介绍

2.1 自启动

用户是不可能主动运行木马,这就涉及到如何让感染木马的计算机自启动木马。当然有很多办法让受控端用户不察觉的情况下启动木马。其中常见的方法如下:

(1)从菜单中加载。如果自动加载的文件是直接通过在Windows菜单上自定义添加的,一般都会放在主菜单的“开始->程序->启动”处。这种方式很容易被受控端用户发觉,现在一般不采用。

(2)通过c:\windows\wininit.ini或Autoexec.bat文件或通过win.ini和system.ini来加载木马

(3)通过注册表实现。这种方法在木马中应用比较广,其隐蔽性也比较强,由于注册表比较复杂,很多计算机用户对注册表操作不很熟悉。木马常常喜欢藏在

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion、

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentUersion、

HKEY_USERS\.Default\Software\Microsoft\Windows\CurrentUersion下所有以"run"开头的键值里。

2.2 服务端隐藏技术

木马要在受控端运行,首先就应躲过杀毒软件的查杀,避免感染计算机用户的发现,要想做到木马的进程隐藏,目前最先进技术是采用远程注入,其原理是通过在另一个进程中创建远程线程的方法进入正常进程的内存地址空间。创建的新线程与主线程共享地址空间以及其他的资源。用户管理者看到的只是合法进程,而无法发现木马线程的存在,从而达到隐藏的目的。

3 远程局域网控制基本思路

要实现控制端对受控端局域网进行控制,其实现思路是:在控制端和受控端之间建立一条信息通道,这条通道一般采用反弹窗口技术和HTTP隧道技术建立,这样便于突破防火墙,控制端通过建立的信息通道向受控端发出指令,受控端执行相应指令,获取远端局域网资源信息,然后把获取的远端局域网信息传输到控制端并且在控制端指定窗口上显示出来。这样控制端就可像在本地局域网中一样对远端局域网中授权使用资源进行使用。

4 控制端和受控端通信规约

对远程局域网中资源进行控制,首先要让受控端理解控制端发送的各种指令含义,并做出相应的处理,然后把处理结果返回到控制端,因此需要定义一些规约和结构,让双方理解和遵守。其通信规约如下:

#define COM_ENUM_NET_SERVER 4 //枚举服务端局域网共享服务

#define COM_ENUM_NET_FILE 5 //枚举服务端局域网共享文件

#define COM_DOWNLOAD_NET_FILE 6 //下载服务端局域网文件

(1)客户端(控制端)和服务端(受控端)通信的数据包格式

typedef struct tagCommand{

int iCommandID;

DWORD dwDataSize;

char cData[1024];

}COMMAND, RESULT;

其中iCommandID本次命令的ID;dwDataSize本次命令数据段的长度;cData本次命令命令的数据内容。

(2)在文件下载时,客户端(控制端)发给服务端(受控端)的数据段格式

typedef struct FileInfo{

DWORD dwSeek;

char cFileName[260];

}FILEINFO;

5 远程局域网控制实现

5.1 获取局域网服务

要获取局域网络资源,应先利用API 函数WNetOpenEnum()打开一个网络、一个工作组或一台计算机,返回资源(网络、工作组、某台计算机)的句柄。

DWORD WNetOpenEnum( DWORD dwScope,//枚举范围

DWORD dwType, //列举的资源类型

DWORD dwUsage,//列举可用的资源

LPNETRESOURCElpNetResource//资源结构

LHANDLE lphEnum//枚举的句柄

);

然后使用API函数WNetEnumResource()枚举句柄的资源(如工作组、某台计算机里共享的文件夹等)。WNetCloseEnum()关闭资源句柄。GlobalAlloc()在内存中开辟一个缓冲区。GlobalFree()释放内存开辟的某个缓冲区。其获取局域网资源流程图见图1:

图1 获取服务端所在局域网共享服务流程图

5.2 获取局域网文件目录

服务端根据客户端的命令,获得服务端所在局域网共享文件目录信息并发送回客户端。这里需要使用到几个重要的API函数:SetCurrentDirectory()、FindFirstFile()、FindNextFile()、FindClose()。

(1)SetCurrentDirectory()设置当前的目录。

(2)FindFirstFile()返回当前目录下的第一个文件的文件信息及文件查找句柄。

(3)FindNextFile()返回下一个文件的文件信息。

(4)FindClose()关闭文件查找句柄。

5.3 下载局域网文件

实际上控制端对服务端局域网中感兴趣的是局域网中的文件资源,受控端根据控制端指令把对应的文件传到控制端。这个过程涉及到主要的API函数有:SetFilePointer()、CreateFile()、ReadFile()、WriteFile()、CloseHandle ()。

(1)SetFilePointer()用于设置文件的操作指针。

(2)CreateFile()用于创建或打开文件如果成功返回文件的句柄,否则返回INVALID_HANDLE_VALUE。

(3)ReadFile()用于读取文件可以通过传入一个DWORD变量来返回读取文件的长度。

(4)WriteFile()用于向一个文件写入数据可以通过传入一个DWORD变量来返回写入的长度。

(5)CloseHandle ()用于关闭文件句柄

其实现流程见图2:

图2 下载服务端所在局域网共享文件流程图

6 小结

本文从技术实现的角度阐述了对远程局域网监控。实现局域网监控极大的提高了网络远程控制系统对受控端的控制能力。其实现技术对网络安全管理人员防止外部入侵具有一定的参考价值。

参考文献:

[1]丁展,刘海英.Visual C++ 网络通信编程实用案例精选[M].人民邮电出版社.

[2]汪晓平,钟军等.Visual C++网络通信协议分析与应用实现[M].人民邮电出版社,2003.

[3]魏宝琛,姜明.矛与盾―远程攻击与防御[M].人民邮电出版社,2003.

[4]Raj Rajagonpal,Subodh Monica.Windows 2000 程序设计[M].清华大学出版社,2002.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:基于UML的图书管理系统之设计模式应用 下一篇:基于JAVA APPLET技术的WebGIS的研究与实现