Advertisement
Guest User

ldst

a guest
Nov 25th, 2012
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.36 KB | None | 0 0
  1. /* self modifying code */
  2.  
  3. #include <stdio.h>
  4. #include <memory.h>
  5. #include <sys/mman.h>
  6.  
  7. #include <stdlib.h>
  8. #include <stdarg.h>
  9. #include <unistd.h>
  10.  
  11. unsigned char payload[] = { 0x68, 0xDE, 0xAD, 0xBE, 0xEF, 0xC3 };
  12.  
  13. unsigned int hook_function[256];
  14. int hook_cur = 0;
  15.  
  16. int
  17. fake_printf(char* fmt, ...)
  18. {
  19.     puts("Fake #1");
  20.     puts( fmt );
  21. }
  22.  
  23. void
  24. fakeLDST(void* function, void* fake)
  25. {
  26.     int i;
  27.     unsigned page = (unsigned)function & ~( getpagesize() - 1 );
  28.     unsigned int vaddr = (unsigned int)function;
  29.     unsigned int raddr = (unsigned int)fake;
  30.  
  31.     mprotect( (char*)page, getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC );
  32.  
  33.     memcpy( payload + 1, &raddr, sizeof(int) );
  34.  
  35.     memcpy( (void*)vaddr, payload, 6 );
  36. }
  37.  
  38. void
  39. saveLD(void* function, void* saved)
  40. {
  41.     int i;
  42.  
  43.     if(!saved)
  44.         saved = malloc ( 16 );
  45.    
  46.     for(i = 0;i < 16;i++)
  47.         *(unsigned char*)(saved + i) = *(unsigned char*)(function + i);
  48. }
  49.  
  50. void
  51. restoreLD(void* function, void* saved)
  52. {
  53.     int i;
  54.  
  55.     for(i = 0;i < 16;i++)
  56.         *(unsigned char*)(function + i) = *(unsigned char*)(saved + i);
  57. }
  58.  
  59. int
  60. main(int argc, char** argv)
  61. {
  62.     void* old_printf = NULL;
  63.  
  64.     saveLD( &printf, &old_printf );
  65.  
  66.     fakeLDST( &printf, &fake_printf );
  67.  
  68.     printf("LOL(0x%x)\n", &fake_printf);
  69.  
  70.     restoreLD( &printf, &old_printf );
  71.  
  72.     printf("LOL(0x%x)\n", &fake_printf);
  73.  
  74.     exit( 0 );
  75.  
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement