Function at 0x18000e170
Capabilities:
Encode data using xor
Generate random numbers using the delphi lcg

Disassembly:
push rbp
push rbx
push r12
push r14
push r15
lea rbp, [rsp - 0x37]
sub rsp, 0xa0
mov rax, qword [0x1800f3188]
xor rax, rsp
mov qword [rbp + 0x17], rax
cmp byte [rcx + 0x38], 0
mov r15, rdx
mov r14, rcx
jne 0x18000e51c
cmp dword [rcx + 0x30], 0
jbe 0x18000e50c
cmp byte [rcx + 0x4d], 0
jne 0x18000e51c
xor r12d, r12d
cmp byte [rcx + 0x4c], r12b
jne 0x18000e4fe
mov ebx, r12d
nop word [rax + rax]
mov r8d, reloc.WS2_32.dll_inet_ntoa
lea rdx, [rbp + 7]
sub r8, rbx
add rdx, rbx
mov r9d, 1
mov rcx, r14
call fcn.18000cbf0
test rax, rax
js 0x18000e207
je 0x18000e200
add rbx, rax
cmp rbx, 0xc
jb 0x18000e1d0
jmp 0x18000e215
mov byte [r14 + 0x4c], 1
jmp 0x18000e215
mov byte [r14 + 0x4d], 1
test rbx, rbx
je 0x18000e51c
test rbx, rbx
js 0x18000e51c
cmp rbx, 0xc
jne 0x18000e4fe
movzx eax, word [r15 + 0x18]
mov ebx, dword [r15 + 0x18]
mov qword [rsp + 0xe0], rsi
mov esi, dword [r15 + 0x14]
mov qword [rsp + 0x98], rdi
mov edi, dword [r15 + 0x10]
mov qword [rsp + 0x90], r13
mov r13, r12
nop dword [rax]
nop dword [rax + rax]
movzx eax, ax
lea rdx, [rbp - 0x49]
or eax, 2
not edi
mov ecx, eax
mov r8d, 1
xor ecx, 1
imul ecx, eax
shr ecx, 8
xor cl, byte [rbp + r13 + 7]
mov byte [rbp - 0x49], cl
mov byte [rbp + r13 + 7], cl
mov ecx, edi
call fcn.18000f120
mov edi, eax
lea rdx, [rbp - 0x49]
not eax
not ebx
mov dword [r15 + 0x10], eax
mov r8d, 1
movzx eax, al
mov ecx, ebx
add eax, esi
imul esi, eax, 0x8088405
inc esi
mov eax, esi
mov dword [r15 + 0x14], esi
shr eax, 0x18
mov byte [rbp - 0x49], al
call fcn.18000f120
mov ebx, eax
lea rdx, [rbp - 0x49]
not eax
mov r8d, 1
movzx ecx, ax
mov dword [r15 + 0x18], eax
or ecx, 2
mov eax, ecx
xor eax, 1
imul eax, ecx
mov ecx, edi
shr eax, 8
xor al, byte [rbp + r13 + 8]
mov byte [rbp - 0x49], al
mov byte [rbp + r13 + 8], al
call fcn.18000f120
mov edi, eax
lea rdx, [rbp - 0x49]
not eax
mov r8d, 1
mov dword [r15 + 0x10], eax
mov ecx, ebx
movzx eax, al
add eax, esi
imul esi, eax, 0x8088405
inc esi
mov eax, esi
mov dword [r15 + 0x14], esi
shr eax, 0x18
mov byte [rbp - 0x49], al
call fcn.18000f120
mov ebx, eax
lea rdx, [rbp - 0x49]
not eax
mov r8d, 1
movzx ecx, ax
mov dword [r15 + 0x18], eax
or ecx, 2
mov eax, ecx
xor eax, 1
imul eax, ecx
mov ecx, edi
shr eax, 8
xor al, byte [rbp + r13 + 9]
mov byte [rbp - 0x49], al
mov byte [rbp + r13 + 9], al
call fcn.18000f120
mov edi, eax
not eax
mov dword [r15 + 0x10], eax
movzx eax, al
add eax, esi
lea rdx, [rbp - 0x49]
imul esi, eax, 0x8088405
mov r8d, 1
mov ecx, ebx
inc esi
mov eax, esi
mov dword [r15 + 0x14], esi
shr eax, 0x18
mov byte [rbp - 0x49], al
call fcn.18000f120
mov ebx, eax
lea rdx, [rbp - 0x49]
not eax
mov r8d, 1
movzx ecx, ax
mov dword [r15 + 0x18], eax
or ecx, 2
mov eax, ecx
xor eax, 1
imul eax, ecx
mov ecx, edi
shr eax, 8
xor al, byte [rbp + r13 + 0xa]
mov byte [rbp - 0x49], al
mov byte [rbp + r13 + 0xa], al
call fcn.18000f120
mov edi, eax
lea rdx, [rbp - 0x49]
not edi
mov r8d, 1
movzx eax, dil
mov ecx, ebx
add eax, esi
mov dword [r15 + 0x10], edi
imul esi, eax, 0x8088405
inc esi
mov eax, esi
mov dword [r15 + 0x14], esi
shr eax, 0x18
mov byte [rbp - 0x49], al
call fcn.18000f120
not eax
add r13, 4
mov dword [r15 + 0x18], eax
mov ebx, eax
cmp r13, 0xc
jb 0x18000e260
mov r13, qword [rsp + 0x90]
mov rdi, qword [rsp + 0x98]
mov rsi, qword [rsp + 0xe0]
cmp byte [r14 + 0x38], r12b
jne 0x18000e485
mov rcx, qword [r14]
mov qword [rbp - 0x39], r12
mov qword [rbp - 0x31], r12
mov qword [rbp - 0x29], 0xffffffffffffffff
mov qword [rbp - 9], r12
mov qword [rbp - 0x11], 0xffffffffffffffff
mov qword [rbp - 0x21], r12
mov qword [rbp - 0x19], r12
test rcx, rcx
je 0x18000e48c
lea rdx, [rbp - 0x39]
call fcn.18000aa50
test eax, eax
jns 0x18000e48c
mov rcx, qword [r14]
lea rdx, [r14 + 0x18]
test rdx, rdx
je 0x18000e485
mov eax, dword [rcx + 0x18]
mov dword [rdx], eax
mov eax, dword [rcx + 0x1c]
mov dword [rdx + 4], eax
xor eax, eax
jmp 0x18000e535
mov r9d, 3
lea rdx, [rbp - 0x39]
mov rcx, r14
lea r8d, [r9 + 0x3d]
call fcn.18000cbf0
test rax, rax
js 0x18000e485
mov rax, qword [rbp - 0x11]
lea rcx, [rbp - 0x41]
mov qword [rbp - 0x41], rax
call fcn.1800b31e4
cmp dword [rax + 0x14], 0x50
jge 0x18000e4c5
mov dword [rax + 0x14], 0x50
mov edx, dword [rbp - 9]
movzx r8d, byte [rbp + 0x12]
shr edx, 0x18
cmp r8b, dl
je 0x18000e485
movzx edx, word [rax + 8]
mov ecx, dword [rax]
shl dx, 6
add dx, word [rax + 4]
shl dx, 5
sar ecx, 1
add dx, cx
shr dx, 8
cmp r8b, dl
je 0x18000e485
mov qword [r15], 0x1b
jmp 0x18000e530
test r15, r15
je 0x18000e530
mov qword [r15], reloc.WS2_32.dll_recvfrom
jmp 0x18000e530
lea rax, [rcx + 0x18]
test rax, rax
je 0x18000e51c
mov qword [rax], reloc.WS2_32.dll_select
test r15, r15
je 0x18000e530
mov eax, dword [r14 + 0x18]
mov dword [r15], eax
mov eax, dword [r14 + 0x1c]
mov dword [r15 + 4], eax
mov eax, 0xffffffff
mov rcx, qword [rbp + 0x17]
xor rcx, rsp
call fcn.1800a1bf0
add rsp, 0xa0
pop r15
pop r14
pop r12
pop rbx
pop rbp
ret