Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void* intercept_it(void *func, void* mfunc){ // import table or any jmp.
- if(!func || !mfunc) return 0;
- void *ret;
- if(*(unsigned char*)func!=0xE9 /*|| *(unsigned char*)mfunc!=0xE9*/) return 0; // not jmp
- #ifdef WIN32
- unsigned long op;
- VirtualProtect(func, 4, PAGE_READWRITE, &op); // PAGE_READWRITE
- #endif
- unsigned int a=*(unsigned int*)((char*)func+1);
- void* call=(char*)func+a;
- unsigned int m=(char*)mfunc-(char*)func-5;
- *(unsigned int*)func = *(unsigned int*)func;
- *(unsigned int*)&ret = *(unsigned int*)((char*)func+1);
- //memcpy(&ret, ((char*)func+1), sizeof(void*));
- *(unsigned int*)((char*)func+1) = *(unsigned int*)&m;
- //memcpy(((char*)func+1), &m, sizeof(m));
- ret=(char*)ret+(unsigned int)func+5;
- #ifdef WIN32
- VirtualProtect(func, 4, op, &op);
- #endif
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement