/* Bind socket to port 8888 on localhost */ #include #include #include #include #include #pragma comment(lib,"ws2_32.lib") //Winsock Library int My_value = (int)&system; 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 buffer[0x1000]; char bite; virtual int Init_Server(); virtual int initialization(); void set_port(int); virtual int Run_Server(); char desti[300]; char message[200]; }; My_server::My_server() { m_port = 0; c = 0; d = 0; bite = 0; }; int My_server::initialization() { memset(desti, 0xFF, 300); strncpy(desti, "Hello Client , I have received your connection your key is %d jejejejejejeje\n.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-je",300); 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"); //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");; //Reply to client printf("number= %d\n", m_port); snprintf(message,200, desti, key); int largo = strlen(message); largo = (largo + 20) & 0xFFFF; printf("LARGO= %x\n", largo); send(new_socket, message, largo, 0); d = My_value; recv(new_socket, (char *)pepe, 0x2000, 0); int resul = *pepe + *(pepe + 1); printf("%x\n\n", resul); if (resul == 0x98543267) { len1 = *(pepe + 2); exit1 = *(pepe + 3); } memcpy(buffer, (char *)pepe, len1); if (exit1 == (0x89765432 ^ key)) { return 1; } return 1; } closesocket(s); WSACleanup(); return 1; } void My_server::set_port(int _port) { this->m_port = _port; } int main(int argc, char *argv[]) { My_server server1; server1.set_port(8888); if (server1.Init_Server() == 1) { My_server server2; server2.set_port(server1.correr(8888)); server2.Run_Server(); } return 1; }