Function at 0x18008e980
Capabilities:
Encode data using xor

Disassembly:
push rsi
push rdi
push rbx
push rbp
push r12
push r13
push r14
push r15
sub rsp, 0x48
mov rdi, rcx
mov rsi, rdx
mov rdx, r8
mov rcx, r9
mov r8, qword [rsp + 0xb0]
mov r9, qword [rsp + 0xb8]
mov qword [rsp + 0x10], rsi
mov rsi, qword [rsp + 0x108]
mov r11, rdx
mov r12, rcx
mov esi, dword [rsi]
mov qword [rsp], rdi
mov qword [rsp + 8], r8
mov r8, qword [rsp + 0xc8]
mov ecx, dword [rsp + 0xd0]
sub ecx, 1
xor eax, eax
mov r10d, ecx
mov qword [rsp + 0x18], rax
jmp 0x18008e9f2
add eax, 1
add esi, 1
mov dword [rsp + 0x18], eax
cmp esi, dword [rsp + 0xe0]
jge 0x18008ec13
cmp eax, dword [rsp + 0xe8]
jge 0x18008ec13
movzx ebp, byte [rsi + rdi]
movzx edx, byte [rsi + rdi + 1]
movzx ebx, byte [rsi + rdi + 2]
movsx ebp, word [r9 + rbp*2]
movsx edx, word [r9 + rdx*2 + 0x200]
movsx ebx, word [r9 + rbx*2 + 0x400]
xor ebp, edx
mov rdx, qword [rsp + 0xc0]
xor ebp, ebx
and ebp, dword [rsp + 0xd8]
movsxd r13, dword [rdx + rbp*4]
mov dword [rdx + rbp*4], esi
mov edx, r10d
mov rbp, r13
and edx, esi
mov eax, esi
mov dword [r8 + rdx*4], r13d
mov ecx, 2
sub rax, rbp
mov qword [rsp + 0x20], rcx
xor edx, edx
jmp 0x18008ea7e
mov rcx, qword [rsp + 0x20]
and ebp, r10d
movsxd rbp, dword [r8 + rbp*4]
mov eax, esi
sub rax, rbp
add edx, 1
mov ebx, ebp
sub ebx, dword [rsp + 0xf0]
shr ebx, 0x1f
mov r15, qword [rsp + rbx*8]
cmp eax, dword [rsp + 0xd0]
jge 0x18008eb0d
cmp ecx, 0x102
jge 0x18008eb0d
cmp edx, 0x10
jge 0x18008eb0d
lea r14, [rsi + rdi]
lea r15, [rbp + r15]
movzx eax, word [rcx + r14 - 1]
movzx ebx, word [rcx + r15 - 1]
cmp eax, ebx
jne 0x18008ea6f
mov dword [rsp + 0x20], ecx
xor ecx, ecx
mov rax, qword [rcx + r14]
mov rbx, qword [rcx + r15]
xor rax, rbx
jne 0x18008eaee
add ecx, 8
cmp ecx, 0x100
jl 0x18008eac3
movzx eax, word [rcx + r14]
movzx ebx, word [rcx + r15]
xor eax, ebx
jne 0x18008eaee
add ecx, 2
jmp 0x18008eaf8
bsf rax, rax
shr rax, 3
add ecx, eax
mov rax, qword [rsp + 0x20]
cmp eax, ecx
jge 0x18008ea6a
mov r13, rbp
jmp 0x18008ea6f
mov edx, esi
mov rax, r13
sub rdx, rax
cmp ecx, 3
jl 0x18008ebe4
jg 0x18008eb2c
cmp edx, 0x1000
jg 0x18008ebe4
lea rax, [rdx - 1]
cmp edx, 0x101
jl 0x18008eb40
shr eax, 7
add eax, 0x100
mov r14, qword [rsp + 0x10]
movzx eax, byte [rax + r14 + 0x100]
mov qword [rsp + 0x28], rdx
add word [r12 + rax*4], 1
lea rax, [rcx - 3]
movzx ebp, byte [rax + r14]
mov qword [rsp + 0x38], rax
add ebp, 0x101
mov qword [rsp + 0x30], rbp
lea rbp, [rcx - 1]
lea rcx, [rsi + 1]
lea rsi, [rbp + rsi]
mov r14, qword [rsp + 0xc0]
mov r15d, dword [rsp + 0xd8]
movzx ebp, byte [rcx + rdi]
movzx edx, byte [rcx + rdi + 1]
movzx ebx, byte [rcx + rdi + 2]
movsx ebp, word [r9 + rbp*2]
movsx edx, word [r9 + rdx*2 + 0x200]
movsx ebx, word [r9 + rbx*2 + 0x400]
xor ebp, edx
mov edx, r10d
xor ebp, ebx
and ebp, r15d
movsxd rax, dword [r14 + rbp*4]
mov dword [r14 + rbp*4], ecx
and edx, ecx
mov dword [r8 + rdx*4], eax
add ecx, 1
cmp ecx, esi
jle 0x18008eb8f
mov rdx, qword [rsp + 0x28]
mov rbx, qword [rsp + 0x38]
mov rcx, qword [rsp + 0x30]
jmp 0x18008ebec
movzx ebx, byte [rsi + rdi]
xor edx, edx
mov ecx, ebx
mov rax, qword [rsp + 0x18]
add word [r11 + rcx*4], 1
mov rcx, qword [rsp + 0x100]
mov rbp, qword [rsp + 0xf8]
mov word [rcx + rax*2], dx
mov byte [rax + rbp], bl
jmp 0x18008e9e8
mov rdi, qword [rsp + 0x108]
mov eax, dword [rsp + 0x18]
mov dword [rdi], esi
add rsp, 0x48
pop r15
pop r14
pop r13
pop r12
pop rbp
pop rbx
pop rdi
pop rsi
ret