Function at 0x140004901
Capabilities:
Get socket status
Read and send data from client to server
Read file on windows
Receive data
Receive data on socket
Send data
Send data on socket

Disassembly:
push rbp
push r13
push r12
push rdi
push rsi
push rbx
sub rsp, 0x78
lea rbp, [rsp + 0x70]
mov dword [rbp + 0x40], ecx
mov dword [rbp - 0x28], 0
mov dword [rbp - 0x24], 0x3e8
lea rax, [rbp - 0x30]
mov rcx, rax
call sub.msvcrt.dll__time64
mov ecx, 1
mov rax, qword [sym.imp.msvcrt.dll__isatty]
call rax
test eax, eax
jne 0x140004954
mov edx, 0x8000
mov ecx, 1
mov rax, qword [sym.imp.msvcrt.dll__setmode]
call rax
mov ecx, 0
mov rax, qword [sym.imp.msvcrt.dll__isatty]
call rax
mov dword [rbp - 0x18], eax
cmp dword [rbp - 0x18], 0
jne 0x14000497e
mov edx, 0x8000
mov ecx, 0
mov rax, qword [sym.imp.msvcrt.dll__setmode]
call rax
mov rax, qword [0x1400121d8]
mov eax, dword [rax]
cmp eax, 0x3f
ja 0x1400049ad
mov rcx, qword [0x1400121d8]
mov rax, qword [0x1400121d8]
mov edx, dword [rax]
lea r8d, [rdx + 1]
mov dword [rax], r8d
mov eax, dword [rbp + 0x40]
mov edx, edx
mov qword [rcx + rdx*8 + 8], rax
mov word [rbp - 0x1a], 2
mov word [rbp - 0xc], 0
mov dword [rbp - 8], 0
mov eax, dword [rbp - 8]
mov dword [rbp - 4], eax
mov eax, dword [0x14001218c]
test eax, eax
je 0x140004a88
mov eax, dword [0x14001218c]
mov dword [rbp - 4], eax
mov r12, qword [0x1400121c8]
mov word [rbp - 0xc], 1
movzx eax, word [0x14000d030]
test ax, ax
je 0x140004a05
mov dword [0x14001218c], 0
jmp 0x140004a88
mov dword [rbp - 0x10], 0
jmp 0x140004a70
mov rax, qword [0x1400121d8]
mov edx, dword [rbp - 0x10]
mov rax, qword [rax + rdx*8 + 8]
test rax, rax
jne 0x140004a6c
jmp 0x140004a4b
mov rdx, qword [0x1400121d8]
mov eax, dword [rbp - 0x10]
lea ecx, [rax + 1]
mov rax, qword [0x1400121d8]
mov ecx, ecx
mov rcx, qword [rdx + rcx*8 + 8]
mov edx, dword [rbp - 0x10]
mov qword [rax + rdx*8 + 8], rcx
add dword [rbp - 0x10], 1
mov rax, qword [0x1400121d8]
mov eax, dword [rax]
sub eax, 1
cmp dword [rbp - 0x10], eax
jb 0x140004a24
mov rax, qword [0x1400121d8]
mov edx, dword [rax]
sub edx, 1
mov dword [rax], edx
jmp 0x140004a7e
add dword [rbp - 0x10], 1
mov rax, qword [0x1400121d8]
mov eax, dword [rax]
cmp dword [rbp - 0x10], eax
jb 0x140004a0e
mov ecx, 0
call sub.msvcrt.dll__close
mov eax, dword [0x140012208]
test eax, eax
je 0x140004aa9
mov eax, dword [0x140012208]
imul eax, eax, 0x3e8
mov ecx, eax
mov rax, qword [sym.imp.KERNEL32.dll_Sleep]
call rax
mov rax, qword [sym.imp.msvcrt.dll__errno]
call rax
mov dword [rax], 0
mov ecx, 0
mov rax, qword [sym.imp.WSOCK32.dll_WSASetLastError]
call rax
jmp 0x140004fcf
mov word [rbp - 0xa], 0x2008
cmp word [rbp - 0xc], 0
je 0x140004ae3
mov word [rbp - 0xc], 0
jmp 0x140004e5c
mov rax, qword [0x1400121d8]
mov rdx, qword [0x1400121e0]
mov r8, rax
mov eax, 0x41
mov rdi, rdx
mov rsi, r8
mov rcx, rax
rep movsq qword [rdi], qword [rsi]
mov rax, qword [0x140012198]
test rax, rax
je 0x140004b25
mov rdx, qword [0x140012198]
mov rax, qword [0x1400121a0]
mov rdx, qword [rdx]
mov qword [rax], rdx
mov rax, qword [0x1400121e0]
lea rdx, [rbp - 0x28]
mov qword [rsp + 0x20], rdx
mov r9d, 0
mov r8d, 0
mov rdx, rax
mov ecx, 0x10
mov rax, qword [sym.imp.WSOCK32.dll_select]
call rax
mov ebx, eax
test ebx, ebx
jns 0x140004bb0
mov rax, qword [sym.imp.WSOCK32.dll_WSAGetLastError]
call rax
cmp eax, 0x2714
je 0x140004bb0
mov rax, qword [sym.imp.WSOCK32.dll_WSAGetLastError]
call rax
mov dword [rbp - 0x20], eax
lea rax, str.select_fuxored
mov rcx, rax
call fcn.140003210
mov eax, dword [rbp + 0x40]
mov edx, 2
mov rcx, rax
mov rax, qword [sym.imp.WSOCK32.dll_shutdown]
call rax
mov eax, dword [rbp + 0x40]
mov rcx, rax
mov rax, qword [sym.imp.WSOCK32.dll_closesocket]
call rax
mov eax, 1
jmp 0x140005011
test ebx, ebx
jne 0x140004c4d
lea rax, [rbp - 0x38]
mov rcx, rax
call sub.msvcrt.dll__time64
mov eax, dword [0x140012218]
test eax, eax
je 0x140004c4d
mov rdx, qword [rbp - 0x38]
mov rax, qword [rbp - 0x30]
sub rdx, rax
mov rax, qword [0x140012198]
mov eax, dword [rax]
cdqe
cmp rdx, rax
jle 0x140004c4d
movzx eax, word [0x140012216]
cmp ax, 1
jbe 0x140004c05
lea rax, str.net_timeout
mov rcx, rax
call fcn.140003210
mov eax, dword [rbp + 0x40]
mov edx, 2
mov rcx, rax
mov rax, qword [sym.imp.WSOCK32.dll_shutdown]
call rax
mov eax, dword [rbp + 0x40]
mov rcx, rax
mov rax, qword [sym.imp.WSOCK32.dll_closesocket]
call rax
mov rax, qword [0x1400121d8]
mov dword [rax], 0
mov ecx, 0
mov rax, qword [sym.imp.WSOCK32.dll_WSASetLastError]
call rax
mov eax, 0
jmp 0x140005011
mov rdx, qword [0x1400121e0]
mov eax, dword [rbp + 0x40]
mov rcx, rax
call sub.WSOCK32.dll___WSAFDIsSet
test eax, eax
je 0x140004d44
lea rax, [rbp - 0x30]
mov rcx, rax
call sub.msvcrt.dll__time64
mov rdx, qword [0x1400121d0]
mov eax, dword [rbp + 0x40]
mov r9d, 0
mov r8d, 0x2000
mov rcx, rax
mov rax, qword [sym.imp.WSOCK32.dll_recv]
call rax
mov ebx, eax
test ebx, ebx
jg 0x140004d24
mov dword [rbp - 0x14], 0
jmp 0x140004d0d
mov rax, qword [0x1400121d8]
mov edx, dword [rbp - 0x14]
mov rdx, qword [rax + rdx*8 + 8]
mov eax, dword [rbp + 0x40]
cmp rdx, rax
jne 0x140004d09
jmp 0x140004ce8
mov rdx, qword [0x1400121d8]
mov eax, dword [rbp - 0x14]
lea ecx, [rax + 1]
mov rax, qword [0x1400121d8]
mov ecx, ecx
mov rcx, qword [rdx + rcx*8 + 8]
mov edx, dword [rbp - 0x14]
mov qword [rax + rdx*8 + 8], rcx
add dword [rbp - 0x14], 1
mov rax, qword [0x1400121d8]
mov eax, dword [rax]
sub eax, 1
cmp dword [rbp - 0x14], eax
jb 0x140004cc1
mov rax, qword [0x1400121d8]
mov edx, dword [rax]
sub edx, 1
mov dword [rax], edx
jmp 0x140004d1b
add dword [rbp - 0x14], 1
mov rax, qword [0x1400121d8]
mov eax, dword [rax]
cmp dword [rbp - 0x14], eax
jb 0x140004ca8
mov dword [rbp - 4], 0
jmp 0x140004d44
mov dword [rbp - 8], ebx
mov r13, qword [0x1400121d0]
movzx eax, word [0x140012230]
test ax, ax
je 0x140004d44
mov edx, ebx
mov rcx, r13
call fcn.140004839
cmp dword [rbp - 4], 0
jne 0x140004e58
cmp dword [rbp - 0x18], 0
je 0x140004e02
call sub.msvcrt.dll__kbhit
test eax, eax
je 0x140004e5c
mov ecx, 0
mov rax, qword [fcn.14000c4b0]
call rax
mov rdx, rax
mov rax, qword [0x1400121c8]
mov r8, rdx
mov edx, 8
mov rcx, rax
call sub.msvcrt.dll_fgets
movzx eax, word [0x14001221e]
test ax, ax
je 0x140004db0
mov rbx, qword [0x1400121c8]
mov rcx, rbx
call sub.msvcrt.dll_strlen
add rax, rbx
mov word [rax], 0xd
mov rbx, qword [0x1400121c8]
mov rcx, rbx
call sub.msvcrt.dll_strlen
add rax, rbx
mov word [rax], 0xa
mov rax, qword [0x1400121c8]
mov rcx, rax
call sub.msvcrt.dll_strlen
mov ebx, eax
mov dword [rbp - 4], ebx
mov r12, qword [0x1400121c8]
movzx eax, word [0x14000d030]
test ax, ax
jne 0x140004e5c
mov eax, ebx
mov dword [0x14001218c], eax
mov ecx, 0
call sub.msvcrt.dll__close
jmp 0x140004e5c
mov rax, qword [0x1400121c8]
mov r8d, 0x2000
mov rdx, rax
mov ecx, 0
call sub.msvcrt.dll__read
mov ebx, eax
test ebx, ebx
jg 0x140004e2e
mov ecx, 0
call sub.msvcrt.dll__close
jmp 0x140004e5c
mov dword [rbp - 4], ebx
mov r12, qword [0x1400121c8]
movzx eax, word [0x14000d030]
test ax, ax
jne 0x140004e5b
mov eax, ebx
mov dword [0x14001218c], eax
mov ecx, 0
call sub.msvcrt.dll__close
jmp 0x140004e5c
nop
jmp 0x140004e5c
nop
cmp dword [rbp - 4], 0x2008
ja 0x140004e6e
cmp dword [rbp - 8], 0x2008
jbe 0x140004e95
mov edx, dword [rbp - 8]
mov eax, dword [rbp - 4]
mov r8d, edx
mov edx, eax
lea rax, str.Preposterous_Pointers:__d___d
mov rcx, rax
call fcn.140003210
mov dword [rbp - 8], 0
mov eax, dword [rbp - 8]
mov dword [rbp - 4], eax
cmp word [rbp - 0xa], 0
jne 0x140004eb5
lea rax, str.too_many_output_retries
mov rcx, rax
call fcn.140003210
mov eax, 1
jmp 0x140005011
cmp dword [rbp - 8], 0
je 0x140004f21
mov eax, dword [rbp - 8]
mov r8d, eax
mov rdx, r13
mov ecx, 1
call sub.msvcrt.dll__write
mov ebx, eax
mov ecx, 0
mov rax, qword [fcn.14000c4b0]
call rax
mov rcx, rax
call sub.msvcrt.dll_fflush
test ebx, ebx
jle 0x140004f21
movzx eax, word [0x140012210]
test ax, ax
je 0x140004f06
mov r8d, ebx
mov rdx, r13
mov ecx, 1
call fcn.140004638
movsxd rax, ebx
add r13, rax
mov eax, ebx
sub dword [rbp - 8], eax
mov eax, dword [0x140012190]
mov edx, ebx
add eax, edx
mov dword [0x140012190], eax
cmp dword [rbp - 4], 0
je 0x140004f81
mov eax, dword [0x140012208]
test eax, eax
je 0x140004f42
mov eax, dword [rbp - 4]
mov edx, eax
mov rcx, r12
call fcn.1400034c3
mov ebx, eax
jmp 0x140004f45
mov ebx, dword [rbp - 4]
mov eax, dword [rbp + 0x40]
mov r9d, 0
mov r8d, ebx
mov rdx, r12
mov rcx, rax
mov rax, qword [sym.imp.WSOCK32.dll_send]
call rax
mov ebx, eax
test ebx, ebx
jle 0x140004f81
movsxd rax, ebx
add r12, rax
mov eax, ebx
sub dword [rbp - 4], eax
mov eax, dword [0x140012194]
mov edx, ebx
add eax, edx
mov dword [0x140012194], eax
mov eax, dword [0x140012208]
test eax, eax
je 0x140004fb3
mov eax, dword [0x140012208]
imul eax, eax, 0x3e8
mov ecx, eax
mov rax, qword [sym.imp.KERNEL32.dll_Sleep]
call rax
mov rax, qword [sym.imp.msvcrt.dll__errno]
call rax
mov dword [rax], 0
jmp 0x140004fcf
cmp dword [rbp - 4], 0
jne 0x140004fbf
cmp dword [rbp - 8], 0
je 0x140004fcf
movzx eax, word [rbp - 0xa]
sub eax, 1
mov word [rbp - 0xa], ax
jmp 0x140004e5c
mov rdx, qword [0x1400121d8]
mov eax, dword [rbp + 0x40]
mov rcx, rax
call sub.WSOCK32.dll___WSAFDIsSet
test eax, eax
jne 0x140004acb
mov eax, dword [rbp + 0x40]
mov edx, 2
mov rcx, rax
mov rax, qword [sym.imp.WSOCK32.dll_shutdown]
call rax
mov eax, dword [rbp + 0x40]
mov rcx, rax
mov rax, qword [sym.imp.WSOCK32.dll_closesocket]
call rax
mov eax, 0
add rsp, 0x78
pop rbx
pop rsi
pop rdi
pop r12
pop r13
pop rbp
ret