/* Bind socket to port 8888 on localhost */ #include #include #include #include #include #pragma comment(lib,"ws2_32.lib") //Winsock Library int My_value =(int) &VirtualAlloc; int exit1 = 0; int * pepe; int len1 = 0x1000; int key; class datos { public: int a; virtual int correr(int); virtual int xorear(int); }; int datos::correr(int _port){ a = _port * 2; a = datos::xorear(a); return a; }; int datos::xorear(int _port) { int rand = GetTickCount(); a = (_port ^ rand) & 0xFFFF; return a; }; class My_server : public datos{ int m_port; public: My_server(); WSADATA wsa; SOCKET s, new_socket; struct sockaddr_in server, client; int c, d; char message[200]; char buffer[0x1000]; char bite; char desti[200]; virtual int Init_Server(); virtual int Run_Server(); virtual int initialization(); void set_port(int); }; My_server::My_server() { m_port = 0; c = 0; d = 0; bite = 0; memset(message, 0, 200); memset(buffer, 0, 0x1000); memset(desti, 0, 200); }; int My_server::initialization() { strcpy(message, "Hello Client , I have received your connection your key is %d.\n"); key = GetTickCount(); pepe = (int *)malloc(0x2000); printf("\nInitialising Winsock..."); if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) { printf("Failed. Error Code : %d", WSAGetLastError()); return 1; } printf("Initialised.\n"); //Create a socket if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { printf("Could not create socket : %d", WSAGetLastError()); } printf("Socket created.\n"); //Prepare the sockaddr_in structure server.sin_family = AF_INET; server.sin_addr.s_addr = INADDR_ANY; server.sin_port = htons(m_port); //Bind if (bind(s, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR) { printf("Bind failed with error code : %d", WSAGetLastError()); } puts("Bind done"); //Listen to incoming connections listen(s, 3); //Accept and incoming connection puts("Waiting for incoming connections...\n"); c = sizeof(struct sockaddr_in); return 0; } int My_server::Init_Server() { My_server::initialization(); while (1) { new_socket = accept(s, (struct sockaddr *)&client, &c); if (new_socket == INVALID_SOCKET) { printf("accept failed with error code : %d", WSAGetLastError()); } puts("Connection accepted\n"); memset(desti, 0, 200); //Reply to client printf("number= %d\n", m_port); sprintf(desti, "Nuevo Port is = %d\n", My_server::correr(8888)); send(new_socket, desti, 200, 0); recv(new_socket, (char *)pepe, strlen(desti), 0); if (*pepe != 0x41424344) { puts("Bye Bye love\n"); return 0; } closesocket(s); return 1; } } int My_server::Run_Server(){ My_server::initialization(); while (1) { new_socket = accept(s, (struct sockaddr *)&client, &c); if (new_socket == INVALID_SOCKET) { printf("accept failed with error code : %d", WSAGetLastError()); } puts("Connection accepted\n"); memset(desti, 0, 200); //Reply to client printf("number= %d\n", m_port); sprintf(desti, message, key); printf(desti); send(new_socket, desti, 200, 0); d = My_value; recv(new_socket, (char *)pepe, 0x2000, 0); int resul = *pepe + *(pepe + 1); printf("%x\n\n", resul); if (resul == 0xFFFFFFFF) { len1 = *(pepe + 2); exit1 = *(pepe + 3); } memcpy(buffer, (char *)pepe, len1); for (int x = 0; x < len1; x++) { bite = buffer[x]; if (bite == 0x04) { exit(1); } if (bite == 0x41) { exit(1); } } if (exit1 == (0x89765432 ^ key)) { return 1; } else { puts("Bye Bye\n"); exit(1); } } closesocket(s); WSACleanup(); return 1; } void My_server::set_port(int _port) { this->m_port = _port; } int main(int argc, char *argv[]) { LoadLibraryA((LPCSTR) "WCMZIP32.DLL"); My_server server1; server1.set_port(8888); if (server1.Init_Server() == 1) { My_server server2; server2.set_port(server1.correr(8888)); server2.Run_Server(); } exit(1); }