Advertisement
badeip

sophos - level3

Dec 21st, 2011
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.23 KB | None | 0 0
  1. // by petter wahlman, http://twitter.com/badeip
  2.  
  3. #include <stdio.h>
  4. #include <unistd.h>
  5. #include <fcntl.h>
  6. #include <stdlib.h>
  7. #include <sys/types.h>
  8. #include <sys/stat.h>
  9. #include <sys/mman.h>
  10.  
  11. #define PINK 0xedbbf100
  12. int main(int argc, char **argv)
  13. {
  14.     struct stat st;
  15.     char *target;
  16.     char *addr;
  17.     int match;
  18.     int i;
  19.     int fd;
  20.  
  21.     target = "./security-advice-for-train-commuters.gif";
  22.     if (argc > 1)
  23.         target = argv[1];
  24.  
  25.     printf("[+] opening: %s\n", target);
  26.     fd = open(target, O_RDWR);
  27.     if (-1 == fd) {
  28.         perror(target);
  29.         return 1;
  30.     }
  31.  
  32.     fstat(fd, &st);
  33.  
  34.     addr = mmap(NULL, st.st_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
  35.     close(fd);
  36.     if (MAP_FAILED == addr) {
  37.         perror("mmap");
  38.         return 1;
  39.     }
  40.  
  41.     match = 0;
  42.     for (i = 0; i < st.st_size; i++) {
  43.         if (*(unsigned int *)&addr[i] == PINK) {
  44.             printf("[+] 0x%08x located at offset: 0x%08x\n", PINK, i);
  45.             if (1 == match++) {
  46.                 printf("[+] patching offset: 0x%08x\n", i);
  47.                 *(unsigned int *)&addr[i] = 0x00000000;
  48.                 break;
  49.             }
  50.         }
  51.     }
  52.     munmap(addr, st.st_size);
  53.  
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement