Guest User

Untitled

a guest
Oct 17th, 2015
2,715
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.64 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string>
  3. #include <string.h>
  4. #include <memory>
  5. #include <sys/mman.h>
  6. #include <unistd.h>
  7. #include <signal.h>
  8. #include <ctype.h>
  9. #include <pthread.h>
  10.  
  11. #define KNRM  "\x1B[0m"
  12. #define KRED  "\x1B[31m"
  13. #define KGRN  "\x1B[32m"
  14. #define KYEL  "\x1B[33m"
  15. #define KBLU  "\x1B[34m"
  16. #define KMAG  "\x1B[35m"
  17. #define KCYN  "\x1B[36m"
  18. #define KWHT  "\x1B[37m"
  19.  
  20. struct __attribute__((packed)) SCALLHOOK {
  21.     char call;
  22.     int rel_offset;
  23.     SCALLHOOK(void* to): call(0xE8), rel_offset(int(to)-int(this)-5) {}
  24. };
  25.  
  26. pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
  27.  
  28. void hexdump(void *ptr, int buflen) {
  29.   unsigned char *buf = (unsigned char*)ptr;
  30.   int i, j;
  31.   for (i=0; i<buflen; i+=16) {
  32.     printf("%06x: ", i);
  33.     for (j=0; j<16; j++)
  34.       if (i+j < buflen)
  35.         printf("%02x ", buf[i+j]);
  36.       else
  37.         printf("   ");
  38.     printf(" ");
  39.     for (j=0; j<16; j++)
  40.       if (i+j < buflen)
  41.         printf("%c", isprint(buf[i+j]) ? buf[i+j] : '.');
  42.     printf("\n");
  43.   }
  44. }
  45.  
  46. typedef int (*decryptData)(char** a, int b, void* c);
  47. int myDecryptData(char** a, int b, void* c) {
  48.     pthread_mutex_lock(&mut);
  49.         decryptData decrypt = (decryptData)0x08160BD0;
  50.         int ret = decrypt(a, b, c);
  51.         char* t = *(a+1)+0x0B;
  52.         int len = (int)*(a+2)-0x0B;
  53.         printf(KBLU"Receive :\n");
  54.         printf("Size : %d\n", len);
  55.         hexdump(t, len);
  56.         printf(KGRN"\n");
  57.     pthread_mutex_unlock(&mut);
  58.     return ret;
  59. }
  60.  
  61. typedef int (*encryptData)(char**, int, void *, int, int, int, int, int, int, int, int, int, int, int, int, std::string *, int, int, int, int, int, int, std::string *);
  62. int myEncryptData(char** a, int b, void * c, int d, int e, int f, int g, int h, int i, int j, int k, int l, int m, int n, int o, std::string *p, int q, int r, int s, int t, int u, int v, std::string * w) {
  63.     pthread_mutex_lock(&mut);
  64.         char* data = *(a)+0x0D;
  65.         int len = (int)*(a+1)-0x0D;
  66.         printf(KRED"Send :\n");
  67.         printf("Size : %d\n", len);
  68.         hexdump(data , len);
  69.         printf(KGRN"\n");
  70.     pthread_mutex_unlock(&mut);
  71.     encryptData encrypt = (encryptData)0x0815CCB0;
  72.     return encrypt(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w);
  73. }
  74.  
  75. __attribute__((constructor))
  76. int main() {
  77.     int pagesize = sysconf(_SC_PAGE_SIZE);
  78.     mprotect((void*)(0x081236F3&(~(pagesize-1))), pagesize, PROT_READ | PROT_WRITE | PROT_EXEC);    
  79.     new ((void*)0x081236F3) SCALLHOOK((void*)&myDecryptData);
  80.     mprotect((void*)(0x08121E6D&(~(pagesize-1))), pagesize, PROT_READ | PROT_WRITE | PROT_EXEC);
  81.     new ((void*)0x08121E6D) SCALLHOOK((void*)&myEncryptData);
  82. }
Advertisement
Add Comment
Please, Sign In to add comment