Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* self modifying code */
- #include <stdio.h>
- #include <memory.h>
- #include <sys/mman.h>
- #include <stdlib.h>
- #include <stdarg.h>
- #include <unistd.h>
- unsigned char payload[] = { 0x68, 0xDE, 0xAD, 0xBE, 0xEF, 0xC3 };
- unsigned int hook_function[256];
- int hook_cur = 0;
- int
- fake_printf(char* fmt, ...)
- {
- puts("Fake #1");
- puts( fmt );
- }
- void
- fakeLDST(void* function, void* fake)
- {
- int i;
- unsigned page = (unsigned)function & ~( getpagesize() - 1 );
- unsigned int vaddr = (unsigned int)function;
- unsigned int raddr = (unsigned int)fake;
- mprotect( (char*)page, getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC );
- memcpy( payload + 1, &raddr, sizeof(int) );
- memcpy( (void*)vaddr, payload, 6 );
- }
- void
- saveLD(void* function, void* saved)
- {
- int i;
- if(!saved)
- saved = malloc ( 16 );
- for(i = 0;i < 16;i++)
- *(unsigned char*)(saved + i) = *(unsigned char*)(function + i);
- }
- void
- restoreLD(void* function, void* saved)
- {
- int i;
- for(i = 0;i < 16;i++)
- *(unsigned char*)(function + i) = *(unsigned char*)(saved + i);
- }
- int
- main(int argc, char** argv)
- {
- void* old_printf = NULL;
- saveLD( &printf, &old_printf );
- fakeLDST( &printf, &fake_printf );
- printf("LOL(0x%x)\n", &fake_printf);
- restoreLD( &printf, &old_printf );
- printf("LOL(0x%x)\n", &fake_printf);
- exit( 0 );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement