Function at 0x18016d770
Capabilities:
Encode data using xor

Disassembly:
push rbx
push rsi
push r14
push r15
mov eax, 0x58
call fcn.1800f84e0
sub rsp, rax
mov rax, qword [rcx + 0x178]
mov rbx, rcx
mov qword [rsp + 0x30], rax
mov r15, r9
mov rax, qword [rcx + 0x180]
mov r14, r8
mov rcx, qword [rcx + 0x38]
mov rsi, rdx
mov qword [rsp + 0x28], rax
add rcx, r9
movabs rax, 0xfffffffe0
cmp rcx, rax
ja 0x18016daa7
cmp rcx, r9
jb 0x18016daa7
cmp dword [rbx + 0x174], 0
mov qword [rsp + 0x88], rbp
mov qword [rsp + 0x50], rdi
mov qword [rsp + 0x48], r12
lea r12, [rbx + 0x60]
mov qword [rsp + 0x40], r13
lea r13, [rbx + 0x40]
mov qword [rsp + 0x20], r13
mov qword [rbx + 0x38], rcx
je 0x18016d813
mov rdx, r12
mov rcx, r13
call fcn.18016e4f0
mov dword [rbx + 0x174], 0
jmp 0x18016d818
mov qword [rsp + 0x20], r13
movzx eax, byte [rbx + 0xd]
mov ebp, dword [rbx + 0x170]
movzx edi, byte [rbx + 0xc]
shl edi, 8
or edi, eax
mov dword [rsp + 0x80], ebp
movzx eax, byte [rbx + 0xe]
shl edi, 8
or edi, eax
movzx eax, byte [rbx + 0xf]
shl edi, 8
or edi, eax
test ebp, ebp
je 0x18016d898
mov rax, r13
nop dword [rax + rax]
test r15, r15
je 0x18016d885
movzx edx, byte [rsi]
dec r15
mov ecx, ebp
inc rsi
movzx eax, byte [rcx + rbx + 0x10]
xor al, dl
mov byte [r14], al
inc r14
xor byte [rcx + rbx + 0x40], dl
lea rax, [rbx + 0x40]
inc ebp
and ebp, 0xf
mov dword [rsp + 0x80], ebp
jne 0x18016d850
jmp 0x18016d88d
test ebp, ebp
jne 0x18016da7d
mov rdx, r12
mov rcx, rax
call fcn.18016e4f0
cmp r15, 0xc00
jb 0x18016d972
movabs rax, 0xaaaaaaaaaaaaaaab
mul r15
mov rbp, rdx
shr rbp, 0xb
imul rax, rbp, 0xfffffffffffff400
mov qword [rsp + 0x38], rbp
add r15, rax
mov qword [rsp + 0x98], r15
mov r15, qword [rsp + 0x28]
nop word [rax + rax]
mov r9d, 0xc00
mov r8, rsi
mov rdx, r12
mov rcx, r13
call fcn.18016e670
mov rbp, qword [rsp + 0x30]
mov r12d, 0xc0
nop
mov r8, r15
lea rdx, [rbx + 0x10]
mov rcx, rbx
call rbp
inc edi
mov byte [rbx + 0xf], dil
mov eax, edi
shr eax, 0x18
mov byte [rbx + 0xc], al
mov eax, edi
shr eax, 0x10
mov byte [rbx + 0xd], al
mov eax, edi
shr eax, 8
mov byte [rbx + 0xe], al
mov rax, qword [rbx + 0x10]
xor rax, qword [rsi]
mov qword [r14], rax
mov rax, qword [rsi + 8]
add rsi, 0x10
xor rax, qword [rbx + 0x18]
mov qword [r14 + 8], rax
add r14, 0x10
sub r12, 1
jne 0x18016d900
sub qword [rsp + 0x38], 1
lea r12, [rbx + 0x60]
mov r13, qword [rsp + 0x20]
jne 0x18016d8e0
mov r15, qword [rsp + 0x98]
lea r12, [rbx + 0x60]
mov ebp, dword [rsp + 0x80]
mov r9, r15
and r9, 0xfffffffffffffff0
je 0x18016da22
mov r8, rsi
mov rdx, r12
mov rcx, r13
call fcn.18016e670
cmp r15, 0x10
jb 0x18016da22
mov rbp, qword [rsp + 0x30]
mov r12, r15
shr r12, 4
imul rax, r12, 0xfffffffffffffff0
add r15, rax
mov qword [rsp + 0x98], r15
mov r15, qword [rsp + 0x28]
nop word [rax + rax]
mov r8, r15
lea rdx, [rbx + 0x10]
mov rcx, rbx
call rbp
inc edi
mov byte [rbx + 0xf], dil
mov eax, edi
shr eax, 0x18
mov byte [rbx + 0xc], al
mov eax, edi
shr eax, 0x10
mov byte [rbx + 0xd], al
mov eax, edi
shr eax, 8
mov byte [rbx + 0xe], al
mov rax, qword [rbx + 0x10]
xor rax, qword [rsi]
mov qword [r14], rax
mov rax, qword [rsi + 8]
add rsi, 0x10
xor rax, qword [rbx + 0x18]
mov qword [r14 + 8], rax
add r14, 0x10
sub r12, 1
jne 0x18016d9c0
mov r15, qword [rsp + 0x98]
mov ebp, dword [rsp + 0x80]
mov r13, qword [rsp + 0x20]
test r15, r15
je 0x18016da7d
mov r8, qword [rsp + 0x28]
lea rdx, [rbx + 0x10]
mov rcx, rbx
call qword [rsp + 0x30]
inc edi
mov eax, edi
mov byte [rbx + 0xf], dil
shr eax, 0x18
mov byte [rbx + 0xc], al
mov eax, edi
shr eax, 0x10
mov byte [rbx + 0xd], al
mov eax, edi
shr eax, 8
mov byte [rbx + 0xe], al
nop word [rax + rax]
mov edx, ebp
inc ebp
movzx ecx, byte [rdx + rsi]
movzx eax, byte [rbx + rdx + 0x10]
xor byte [rdx + r13], cl
xor al, cl
mov byte [rdx + r14], al
sub r15, 1
jne 0x18016da60
mov r12, qword [rsp + 0x48]
xor eax, eax
mov rdi, qword [rsp + 0x50]
mov r13, qword [rsp + 0x40]
mov dword [rbx + 0x170], ebp
mov rbp, qword [rsp + 0x88]
add rsp, 0x58
pop r15
pop r14
pop rsi
pop rbx
ret
mov eax, 0xffffffff
add rsp, 0x58
pop r15
pop r14
pop rsi
pop rbx
ret