Advertisement
Guest User

Untitled

a guest
May 29th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.04 KB | None | 0 0
  1. #include <windows.h>
  2.  
  3. #define MAXLEN_PATCH_CODE       15
  4. #define PATCH_JUMP_CODE         0xE9
  5. #define PATCH_CALL_CODE         0xE8
  6. #define PATCH_PRET_CODE         0x68
  7.  
  8. bool ReplaceMem(BYTE *pbMemAddr,const BYTE *pbMemData,int nLen)
  9. {
  10.     DWORD dwProtectFlag;
  11.  
  12.     VirtualProtect(pbMemAddr,nLen,PAGE_EXECUTE_READWRITE,&dwProtectFlag);
  13.     memcpy(pbMemAddr,pbMemData,nLen);
  14.     VirtualProtect(pbMemAddr,nLen,dwProtectFlag,NULL);
  15.  
  16.     return TRUE;
  17. }
  18.  
  19. bool WritePatchCode(BYTE *pbMemoAddr,BYTE *pbFuncAddr,BYTE bCodeType,int  nCodeLen)
  20. {
  21.     BYTE pbPatchCode[MAXLEN_PATCH_CODE];
  22.  
  23.     memset(pbPatchCode,0x90,MAXLEN_PATCH_CODE);
  24.  
  25.     switch(bCodeType)
  26.     {
  27.         case PATCH_JUMP_CODE:
  28.             pbPatchCode[0] = (char)0xE9;
  29.             break;
  30.         case PATCH_CALL_CODE:
  31.             pbPatchCode[0] = (char)0xE8;
  32.             break;
  33.         case PATCH_PRET_CODE:
  34.             pbPatchCode[0] = (char)0x68;
  35.             pbPatchCode[5] = (char)0xC3;
  36.             break;
  37.         default:
  38.             pbPatchCode[0] = (char)0xCC;
  39.             break;
  40.     }
  41.  
  42.     ((int *)(pbPatchCode+1))[0] = (int)pbFuncAddr - (int)pbMemoAddr - (1+4);
  43.  
  44.     return ReplaceMem(pbMemoAddr,pbPatchCode,nCodeLen);
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement