Advertisement
Guest User

crc

a guest
Jun 18th, 2010
1,874
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.26 KB | None | 0 0
  1. #define jmp(frm, to) (int)(((int)to - (int)frm) - 5)
  2. #include <Windows.h>
  3.  
  4. const unsigned long ulMsCrcStart = 0x00401000; //static
  5. const unsigned long ulMsCrcEnd = 0x00CAB000; //modify as needed
  6. const unsigned long ulMsCrcSize = ulMsCrcEnd - ulMsCrcStart;
  7.  
  8. unsigned long ulMsCrc = ulMsCrcStart;
  9. void* Allocation;
  10. unsigned long ulOpenProcess = (unsigned long)OpenProcess;
  11.  
  12. void MakeMemoryWritable(unsigned long ulAddress, unsigned long ulSize)
  13. {
  14.     MEMORY_BASIC_INFORMATION* mbi = new MEMORY_BASIC_INFORMATION;
  15.     VirtualQuery((void*)ulAddress, mbi, ulSize);
  16.     if (mbi->Protect != PAGE_EXECUTE_READWRITE)
  17.     {
  18.         unsigned long* ulProtect = new unsigned long;
  19.         VirtualProtect((void*)ulAddress, ulSize, PAGE_EXECUTE_READWRITE, ulProtect);
  20.         delete ulProtect;
  21.     }
  22.    delete mbi;
  23. }
  24.  
  25. bool Jump(unsigned long ulAddress, void* Function, unsigned long ulNops)
  26. {
  27.    __try
  28.    {
  29.       MakeMemoryWritable(ulAddress, 5 + ulNops);
  30.       *(unsigned char*)ulAddress = 0xE9;
  31.       *(unsigned long*)(ulAddress + 1) = jmp(ulAddress, Function);
  32.       memset((void*)(ulAddress + 5), 0x90, ulNops);
  33.       return true;
  34.    }
  35.    __except (EXCEPTION_EXECUTE_HANDLER) { return false; }
  36. }
  37.  
  38. void __declspec(naked) MSCRCAsm()
  39. {
  40.    __asm
  41.    {
  42.       cmp ecx,[ulMsCrcStart]
  43.       jb Normal
  44.       cmp ecx,[ulMsCrcEnd]
  45.       jg Normal
  46.  
  47.       sub ecx,[ulMsCrcStart]
  48.       add ecx,Allocation
  49.  
  50.       Normal:
  51.       movzx ecx,byte ptr [ecx]
  52.       mov edx,[ebp+0x14]
  53.       jmp [ulMsCrc]
  54.    }
  55. }
  56.  
  57. void __declspec(naked) HSCRCAsm()
  58. {
  59.    __asm
  60.    {
  61.       mov eax,fs:[0x00000020]
  62.       cmp eax,[esp+0x0C] //compare dwProcessId with the current Process' Id
  63.       jne Return
  64.  
  65.       //If MS tries to open a process in itself, set the last error to ERROR_INVALID_PARAMETER and return NULL
  66.       mov fs:[0x00000034],ERROR_INVALID_PARAMETER
  67.       xor eax,eax
  68.       ret 0x000C
  69.  
  70.       Return:
  71.       push ebp
  72.       mov ebp,esp
  73.       jmp [ulOpenProcess]
  74.    }
  75. }
  76.  
  77. void CRCBypass()
  78. {
  79.    for (; ulMsCrc < ulMsCrcEnd; ulMsCrc++)
  80.    {
  81.       if (*(unsigned long*)ulMsCrc == 0x8B09B60F)
  82.       {
  83.          //Allocate some space for the unmodified memory
  84.          Allocation = VirtualAlloc(NULL, ulMsCrcSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  85.  
  86.          //Make the memory readable/writable
  87.          MakeMemoryWritable(ulMsCrcStart, ulMsCrcSize);
  88.  
  89.          //Copy the original, unedited memory
  90.          CopyMemory((void*)Allocation, (void*)ulMsCrcStart, ulMsCrcSize);
  91.  
  92.          //Bypass MSCRC
  93.          Jump(ulMsCrc, MSCRCAsm, 1);
  94.          ulMsCrc += 1 + 5;
  95.  
  96.          //Bypass HSCRC
  97.          Jump(ulOpenProcess, HSCRCAsm, 0);
  98.          ulOpenProcess += 5;
  99.  
  100.          MessageBox(NULL, TEXT("Successfully bypassed MS + HS CRC checks. This bypass was brought to you by GameKiller.net."), TEXT("GameKiller.net - Bringing The Pain To Each And Every Game."), MB_OK | MB_SETFOREGROUND | MB_TOPMOST);
  101.          return;
  102.       }
  103.    }
  104.  
  105.    OutputDebugStringW(TEXT("Unable to locate MS CRC routine. Exiting..."));
  106.    ExitThread(0);
  107. }
  108.  
  109. BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
  110. {
  111.     switch (ul_reason_for_call)
  112.     {
  113.        case DLL_PROCESS_ATTACH: CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&CRCBypass, NULL, 0, NULL);
  114.        case DLL_THREAD_ATTACH:
  115.         break;
  116.     }
  117.     return TRUE;
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement