Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string>
- #include <string.h>
- #include <memory>
- #include <sys/mman.h>
- #include <unistd.h>
- #include <signal.h>
- #include <ctype.h>
- #include <pthread.h>
- #define KNRM "\x1B[0m"
- #define KRED "\x1B[31m"
- #define KGRN "\x1B[32m"
- #define KYEL "\x1B[33m"
- #define KBLU "\x1B[34m"
- #define KMAG "\x1B[35m"
- #define KCYN "\x1B[36m"
- #define KWHT "\x1B[37m"
- struct __attribute__((packed)) SCALLHOOK {
- char call;
- int rel_offset;
- SCALLHOOK(void* to): call(0xE8), rel_offset(int(to)-int(this)-5) {}
- };
- pthread_mutex_t mut = PTHREAD_MUTEX_INITIALIZER;
- void hexdump(void *ptr, int buflen) {
- unsigned char *buf = (unsigned char*)ptr;
- int i, j;
- for (i=0; i<buflen; i+=16) {
- printf("%06x: ", i);
- for (j=0; j<16; j++)
- if (i+j < buflen)
- printf("%02x ", buf[i+j]);
- else
- printf(" ");
- printf(" ");
- for (j=0; j<16; j++)
- if (i+j < buflen)
- printf("%c", isprint(buf[i+j]) ? buf[i+j] : '.');
- printf("\n");
- }
- }
- typedef int (*decryptData)(char** a, int b, void* c);
- int myDecryptData(char** a, int b, void* c) {
- pthread_mutex_lock(&mut);
- decryptData decrypt = (decryptData)0x08160BD0;
- int ret = decrypt(a, b, c);
- char* t = *(a+1)+0x0B;
- int len = (int)*(a+2)-0x0B;
- printf(KBLU"Receive :\n");
- printf("Size : %d\n", len);
- hexdump(t, len);
- printf(KGRN"\n");
- pthread_mutex_unlock(&mut);
- return ret;
- }
- 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 *);
- 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) {
- pthread_mutex_lock(&mut);
- char* data = *(a)+0x0D;
- int len = (int)*(a+1)-0x0D;
- printf(KRED"Send :\n");
- printf("Size : %d\n", len);
- hexdump(data , len);
- printf(KGRN"\n");
- pthread_mutex_unlock(&mut);
- encryptData encrypt = (encryptData)0x0815CCB0;
- 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);
- }
- __attribute__((constructor))
- int main() {
- int pagesize = sysconf(_SC_PAGE_SIZE);
- mprotect((void*)(0x081236F3&(~(pagesize-1))), pagesize, PROT_READ | PROT_WRITE | PROT_EXEC);
- new ((void*)0x081236F3) SCALLHOOK((void*)&myDecryptData);
- mprotect((void*)(0x08121E6D&(~(pagesize-1))), pagesize, PROT_READ | PROT_WRITE | PROT_EXEC);
- new ((void*)0x08121E6D) SCALLHOOK((void*)&myEncryptData);
- }
Advertisement
Add Comment
Please, Sign In to add comment