Function at 0x409010
Capabilities:
Encode data using xor
Hash data with crc32

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x28
test rdx, rdx
mov r11, rdx
mov qword [rsp + 0x80], r8
je 0x408fff
cmp qword [rsp + 0x80], 0x2e
not ecx
mov r8d, ecx
jbe 0x408eab
mov rax, qword [rsp + 0x80]
lea rdi, [0x00416180]
nop word [rax + rax]
test r11b, 7
je 0x408fc4
add r11, 1
mov edx, r8d
xor r8b, byte [r11 - 1]
shr edx, 8
movzx r8d, r8b
xor edx, dword [rdi + r8*4]
sub rax, 1
mov r8d, edx
jne 0x408cb0
mov qword [rsp + 0x80], rax
mov qword [rsp + 0x10], 0
mov rax, qword [rsp + 0x10]
mov qword [rsp], r11
xor r13d, r13d
xor r12d, r12d
lea r9, [0x00414180]
xor ebp, ebp
xor ebx, ebx
mov qword [rsp + 0x78], r11
mov qword [rsp + 0x18], rdi
mov qword [rsp + 8], rax
mov rdi, qword [rsp]
mov esi, ebx
mov eax, r8d
mov r15d, ebp
mov r14d, r12d
mov r11d, r13d
mov rbx, rdi
xor rax, qword [rdi]
add rbx, 0x28
xor rsi, qword [rdi + 8]
xor r15, qword [rdi + 0x10]
mov qword [rsp], rbx
xor r14, qword [rdi + 0x18]
xor r11, qword [rdi + 0x20]
movzx edx, al
sub qword [rsp + 8], 1
je 0x408df0
mov r8d, dword [r9 + rdx*4]
movzx edx, sil
mov r10d, 1
mov rdi, rax
mov ebx, dword [r9 + rdx*4]
movzx edx, r15b
mov ebp, dword [r9 + rdx*4]
movzx edx, r14b
mov r12d, dword [r9 + rdx*4]
movzx edx, r11b
mov r13d, dword [r9 + rdx*4]
nop
lea ecx, [r10*8]
mov rdx, rdi
movsxd rax, r10d
shr rdx, cl
shl rax, 8
add r10d, 1
movzx edx, dl
add rdx, rax
xor r8d, dword [r9 + rdx*4]
mov rdx, rsi
shr rdx, cl
movzx edx, dl
add rdx, rax
xor ebx, dword [r9 + rdx*4]
mov rdx, r15
shr rdx, cl
movzx edx, dl
add rdx, rax
xor ebp, dword [r9 + rdx*4]
mov rdx, r14
shr rdx, cl
movzx edx, dl
add rdx, rax
xor r12d, dword [r9 + rdx*4]
mov rdx, r11
shr rdx, cl
movzx edx, dl
add rax, rdx
xor r13d, dword [r9 + rax*4]
cmp r10d, 8
jne 0x408d80
jmp 0x408d13
mov rbx, qword [rsp + 0x10]
mov r10, r11
mov r9d, 8
mov r11, qword [rsp + 0x78]
mov rdi, qword [rsp + 0x18]
lea rcx, [rbx + rbx*4]
lea r11, [r11 + rcx*8]
jmp 0x408e15
movzx edx, al
mov edx, dword [rdi + rdx*4]
shr rax, 8
xor rax, rdx
sub r9d, 1
jne 0x408e12
mov eax, eax
xor rsi, rax
mov eax, 8
nop
mov rdx, rsi
movzx esi, sil
mov esi, dword [rdi + rsi*4]
shr rdx, 8
xor rsi, rdx
sub eax, 1
jne 0x408e30
mov esi, esi
mov eax, 8
xor r15, rsi
mov rdx, r15
movzx r15d, r15b
mov r15d, dword [rdi + r15*4]
shr rdx, 8
xor r15, rdx
sub eax, 1
jne 0x408e50
mov r12d, r15d
mov eax, 8
xor r12, r14
mov rdx, r12
movzx r12d, r12b
mov r12d, dword [rdi + r12*4]
shr rdx, 8
xor r12, rdx
sub eax, 1
jne 0x408e72
mov r8d, r12d
mov eax, 8
xor r8, r10
mov rdx, r8
movzx r8d, r8b
mov r8d, dword [rdi + r8*4]
shr rdx, 8
xor r8, rdx
sub eax, 1
jne 0x408e94
cmp qword [rsp + 0x80], 7
jbe 0x408f73
mov rax, qword [rsp + 0x80]
lea rdi, [0x00416180]
sub rax, 8
shr rax, 3
lea r9, [r11 + rax*8 + 8]
nop word cs:[rax + rax]
mov eax, r8d
xor r8b, byte [r11]
add r11, 8
shr eax, 8
movzx r8d, r8b
xor eax, dword [rdi + r8*4]
mov edx, eax
xor al, byte [r11 - 7]
shr edx, 8
movzx eax, al
xor edx, dword [rdi + rax*4]
mov eax, edx
xor dl, byte [r11 - 6]
shr eax, 8
movzx edx, dl
xor eax, dword [rdi + rdx*4]
mov edx, eax
xor al, byte [r11 - 5]
shr edx, 8
movzx eax, al
xor edx, dword [rdi + rax*4]
mov eax, edx
xor dl, byte [r11 - 4]
shr eax, 8
movzx edx, dl
xor eax, dword [rdi + rdx*4]
mov edx, eax
xor al, byte [r11 - 3]
shr edx, 8
movzx eax, al
xor edx, dword [rdi + rax*4]
mov eax, edx
xor dl, byte [r11 - 2]
shr eax, 8
movzx edx, dl
xor eax, dword [rdi + rdx*4]
mov r8d, eax
xor al, byte [r11 - 1]
shr r8d, 8
movzx eax, al
xor r8d, dword [rdi + rax*4]
cmp r11, r9
jne 0x408ee0
and qword [rsp + 0x80], 7
cmp qword [rsp + 0x80], 0
je 0x408fae
mov rdx, qword [rsp + 0x80]
lea rdi, [0x00416180]
add rdx, r11
add r11, 1
mov eax, r8d
xor r8b, byte [r11 - 1]
shr eax, 8
movzx r8d, r8b
xor eax, dword [rdi + r8*4]
cmp r11, rdx
mov r8d, eax
jne 0x408f90
mov eax, r8d
not eax
add rsp, 0x28
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
movabs rdx, 0xcccccccccccccccd
mov qword [rsp + 0x80], rax
mov rax, rdx
mul qword [rsp + 0x80]
shr rdx, 5
lea rax, [rdx + rdx*4]
mov qword [rsp + 0x10], rdx
shl rax, 3
sub qword [rsp + 0x80], rax
jmp 0x408cea
xor eax, eax
jmp 0x408fb3
mov r8d, r8d
jmp 0x408c60