Advertisement
Guest User

Untitled

a guest
Jan 20th, 2014
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3.  
  4. #include <Windows.h>
  5. #include <Psapi.h>
  6.  
  7. void __stdcall NewSleep(DWORD milliseconds)
  8. {
  9.     std::cout << "Sleep." << std::endl;
  10.  
  11.     std::cin.get();
  12. }
  13.  
  14. void __stdcall NewExitProcess(UINT exitCode)
  15. {
  16.     std::cout << "ExitProcess." << std::endl;
  17.  
  18.     std::cin.get();
  19. }
  20.  
  21. FARPROC f1 = NULL;
  22. FARPROC f2 = NULL;
  23.  
  24. int main()
  25. {
  26.     HMODULE kernel32Module = GetModuleHandle("KERNEL32.dll");
  27.     f1 = GetProcAddress(kernel32Module, "Sleep");
  28.     f2 = GetProcAddress(kernel32Module, "ExitProcess");
  29.  
  30.     std::cout << f1 << std::endl;
  31.  
  32.     unsigned char* baseAddress = (unsigned char*)GetModuleHandle(NULL);
  33.  
  34.     IMAGE_DOS_HEADER* idh = (IMAGE_DOS_HEADER*)baseAddress;
  35.     IMAGE_NT_HEADERS* inh = (IMAGE_NT_HEADERS*)(baseAddress + idh->e_lfanew);  
  36.     IMAGE_IMPORT_DESCRIPTOR* iid = (IMAGE_IMPORT_DESCRIPTOR*)(baseAddress + inh->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
  37.  
  38.     for (IMAGE_IMPORT_DESCRIPTOR* i = iid; i->Name != 0; ++i)
  39.     {
  40.         std::string moduleName = (char*)(baseAddress + i->Name);
  41.  
  42.         if (moduleName == "KERNEL32.dll")
  43.         {
  44.             IMAGE_THUNK_DATA* itd = (IMAGE_THUNK_DATA*)(baseAddress + i->FirstThunk);
  45.  
  46.             for (IMAGE_THUNK_DATA* j = itd; j->u1.Function != 0; ++j)
  47.             {
  48.                 if ((FARPROC)j->u1.Function == f1)
  49.                 {
  50.                     DWORD oldProtect = 0;
  51.                     VirtualProtect(&j->u1.Function, sizeof(DWORD), PAGE_READWRITE, &oldProtect);
  52.                     j->u1.Function = (DWORD)&NewSleep;
  53.                     VirtualProtect(&j->u1.Function, sizeof(DWORD), oldProtect, &oldProtect);
  54.                 }
  55.  
  56.                 if ((FARPROC)j->u1.Function == f2)
  57.                 {
  58.                     DWORD oldProtect = 0;
  59.                     VirtualProtect(&j->u1.Function, sizeof(DWORD), PAGE_READWRITE, &oldProtect);
  60.                     j->u1.Function = (DWORD)&NewExitProcess;
  61.                     VirtualProtect(&j->u1.Function, sizeof(DWORD), oldProtect, &oldProtect);
  62.                 }
  63.             }
  64.  
  65.             break;
  66.         }
  67.     }
  68.  
  69.     Sleep(0);
  70.     Sleep(0);
  71.  
  72.     ExitProcess(0);
  73.     //Crash.
  74.  
  75.     std::cin.sync();
  76.     std::cin.get();
  77.     return EXIT_SUCCESS;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement