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
| #include <windows.h> #include "tcg.h"
WINUSERAPI int WINAPI USER32$MessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType); WINBASEAPI VOID WINAPI KERNEL32$Sleep(DWORD dwMilliseconds); WINBASEAPI WINBOOL WINAPI KERNEL32$VirtualProtect(LPVOID lpAddress, SIZE_T dwSize, DWORD flNewProtect, PDWORD lpflOldProtect);
FARPROC __resolve_hook(DWORD funcHash);
char * g_dllBase = NULL; SIZE_T g_dllSize = 0;
void XorMask(char * buffer, SIZE_T size, char key) { for (SIZE_T i = 0; i < size; i++) { buffer[i] ^= key; } }
FARPROC WINAPI _GetProcAddress(HMODULE hModule, LPCSTR lpProcName) { if (((ULONG_PTR)lpProcName >> 16) != 0) { FARPROC hook = __resolve_hook(ror13hash(lpProcName)); if (hook != NULL) return hook; } return GetProcAddress(hModule, lpProcName); }
void WINAPI _Sleep(DWORD dwMilliseconds) { DWORD oldProtect; USER32$MessageBoxA(NULL, "Sleep Hooked! Encrypting DLL and sleeping...", "Crystal Palace Hook", MB_OK); if (g_dllBase != NULL && g_dllSize > 0) { if (KERNEL32$VirtualProtect(g_dllBase, g_dllSize, PAGE_READWRITE, &oldProtect)) { XorMask(g_dllBase, g_dllSize, 0x5A); } }
KERNEL32$Sleep(dwMilliseconds);
if (g_dllBase != NULL && g_dllSize > 0) { XorMask(g_dllBase, g_dllSize, 0x5A); DWORD temp; KERNEL32$VirtualProtect(g_dllBase, g_dllSize, oldProtect, &temp); } USER32$MessageBoxA(NULL, "Woke up! DLL Decrypted.", "Crystal Palace Hook", MB_OK); }
void go(IMPORTFUNCS * funcs, char * dllBase, SIZE_T dllSize) { funcs->GetProcAddress = (__typeof__(GetProcAddress) *)_GetProcAddress; g_dllBase = dllBase; g_dllSize = dllSize; }
|