```c _DWORD *__thiscall sub_401020(_DWORD *this) { sub_4010C0(this); *this = off_403348; this[2] = 0; this[113] = 0; this[114] = 0; *((_BYTE *)this + 4756) = 0; memset(this + 115, 0, 0xC8u); memset(this + 165, 0, 0x1000u); memset((char *)this + 4757, 0, 0xC8u); return this; } _DWORD *__thiscall sub_401650(_DWORD *this, int a2) { _DWORD *result; // eax result = this; this[2] = a2; return result; } int __thiscall sub_4010E0(char *this) { char v1; // al char v2; // al size_t v3; // eax sub_4014D0(this); *((_DWORD *)this + 104) = WS2_32_1(*((_DWORD *)this + 103), this + 436, this + 452); if ( *((_DWORD *)this + 104) == -1 ) { v1 = WS2_32_111(); sub_4017F0("accept failed with error code : %d", v1); } puts("Connection accepted\n"); memset(this + 4757, 0, 0xC8u); sub_4017F0("number= %d\n", *((_DWORD *)this + 2)); v2 = sub_401490(8888); sub_401830(this + 4757, "Nuevo Port is = %d\n", v2); WS2_32_19(*((_DWORD *)this + 104), this + 4757, 200, 0); v3 = strlen(this + 4757); WS2_32_16(*((_DWORD *)this + 104), Src, v3, 0); if ( *(_DWORD *)Src == 1094861636 ) { WS2_32_3(*((_DWORD *)this + 103)); return 1; } else { puts("Bye Bye love\n"); return 0; } } int __thiscall sub_401240(int this) { char v1; // al char v3; // [esp+0h] [ebp-Ch] int v4; // [esp+0h] [ebp-Ch] signed int i; // [esp+4h] [ebp-8h] sub_4014D0(this); *(_DWORD *)(this + 416) = WS2_32_1(*(_DWORD *)(this + 412), this + 436, this + 452); if ( *(_DWORD *)(this + 416) == -1 ) { v1 = WS2_32_111(); sub_4017F0("accept failed with error code : %d", v1); } puts("Connection accepted\n"); memset((void *)(this + 4757), 0, 0xC8u); sub_4017F0("number= %d\n", *(_DWORD *)(this + 8)); sub_401830((char *)(this + 4757), (char *)(this + 460), dword_404080[0]); sub_4017F0((char *)(this + 4757), v3); WS2_32_19(*(_DWORD *)(this + 416), this + 4757, 200, 0); *(_DWORD *)(this + 456) = dword_404084; WS2_32_16(*(_DWORD *)(this + 416), Src, 12288, 0); v4 = *((_DWORD *)Src + 1) + *(_DWORD *)Src; sub_4017F0("%x\n\n", v4); if ( v4 == -1 ) { Size = *((_DWORD *)Src + 2); dword_404078 = *((_DWORD *)Src + 3); } memcpy((void *)(this + 660), Src, Size); for ( i = 0; i < (int)Size; ++i ) { *(_BYTE *)(this + 4756) = *(_BYTE *)(i + this + 660); if ( *(_BYTE *)(this + 4756) == 4 ) exit(1); if ( *(_BYTE *)(this + 4756) == 65 ) exit(1); } if ( dword_404078 != (*(_DWORD *)dword_404080 ^ 0x89765432) ) { puts("Bye Bye\n"); exit(1); } return 1; } int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { int v3; // eax char v4[4960]; // [esp+0h] [ebp-26C0h] BYREF char v5[4960]; // [esp+1360h] [ebp-1360h] BYREF LoadLibraryA("WCMZIP32.DLL"); sub_401020(v5); sub_401650(8888); if ( sub_4010E0(v5) == 1 ) { sub_401020(v4); v3 = sub_401490(8888); sub_401650(v3); sub_401240(v4); } exit(1); } ```