Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #define MAXLEN_PATCH_CODE 15
- #define PATCH_JUMP_CODE 0xE9
- #define PATCH_CALL_CODE 0xE8
- #define PATCH_PRET_CODE 0x68
- bool ReplaceMem(BYTE *pbMemAddr,const BYTE *pbMemData,int nLen)
- {
- DWORD dwProtectFlag;
- VirtualProtect(pbMemAddr,nLen,PAGE_EXECUTE_READWRITE,&dwProtectFlag);
- memcpy(pbMemAddr,pbMemData,nLen);
- VirtualProtect(pbMemAddr,nLen,dwProtectFlag,NULL);
- return TRUE;
- }
- bool WritePatchCode(BYTE *pbMemoAddr,BYTE *pbFuncAddr,BYTE bCodeType,int nCodeLen)
- {
- BYTE pbPatchCode[MAXLEN_PATCH_CODE];
- memset(pbPatchCode,0x90,MAXLEN_PATCH_CODE);
- switch(bCodeType)
- {
- case PATCH_JUMP_CODE:
- pbPatchCode[0] = (char)0xE9;
- break;
- case PATCH_CALL_CODE:
- pbPatchCode[0] = (char)0xE8;
- break;
- case PATCH_PRET_CODE:
- pbPatchCode[0] = (char)0x68;
- pbPatchCode[5] = (char)0xC3;
- break;
- default:
- pbPatchCode[0] = (char)0xCC;
- break;
- }
- ((int *)(pbPatchCode+1))[0] = (int)pbFuncAddr - (int)pbMemoAddr - (1+4);
- return ReplaceMem(pbMemoAddr,pbPatchCode,nCodeLen);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement