Function at 0x409050
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 0x40904a
cmp qword [rsp + 0x80], 0x2e
not ecx
mov r8d, ecx
jbe 0x408ef4
mov rax, qword [rsp + 0x80]
lea rdi, [0x00416180]
nop word [rax + rax]
test r11b, 7
je 0x409004
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 0x408cd0
mov qword [rsp + 0x80], rax
mov qword [rsp + 0x18], 0
mov rax, qword [rsp + 0x80]
mov qword [rsp], r11
xor ebp, ebp
xor ebx, ebx
xor r13d, r13d
xor r12d, r12d
mov qword [rsp + 0x78], r11
lea r9, [0x00414180]
mov qword [rsp + 0x10], rdi
mov qword [rsp + 8], rax
nop word cs:[rax + 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 0x408e20
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 dword [rax]
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 0x408db0
jmp 0x408d40
mov r10, r11
mov rbx, qword [rsp + 0x80]
mov r9d, 8
mov r11, qword [rsp + 0x78]
mov rdi, qword [rsp + 0x10]
lea rcx, [rbx + rbx*4]
lea r11, [r11 + rcx*8]
jmp 0x408e48
movzx edx, al
mov edx, dword [rdi + rdx*4]
shr rax, 8
xor rax, rdx
sub r9d, 1
jne 0x408e45
mov eax, eax
xor rsi, rax
mov eax, 8
mov rdx, rsi
movzx esi, sil
mov esi, dword [rdi + rsi*4]
shr rdx, 8
xor rsi, rdx
sub eax, 1
jne 0x408e62
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 0x408e82
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 0x408ea4
mov r8d, r12d
mov eax, 8
xor r8, r10
nop word cs:[rax + rax]
mov rdx, r8
movzx r8d, r8b
mov r8d, dword [rdi + r8*4]
shr rdx, 8
xor r8, rdx
sub eax, 1
jne 0x408ed0
mov rax, qword [rsp + 0x18]
mov qword [rsp + 0x80], rax
cmp qword [rsp + 0x80], 7
jbe 0x408fb3
mov rax, qword [rsp + 0x80]
lea rdi, [0x00416180]
sub rax, 8
shr rax, 3
lea r9, [r11 + rax*8 + 8]
nop
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 0x408f20
and qword [rsp + 0x80], 7
cmp qword [rsp + 0x80], 0
je 0x408fee
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 0x408fd0
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 rsi, qword [rsp + 0x80]
mov rax, rdx
mul qword [rsp + 0x80]
shr rdx, 5
lea rax, [rdx + rdx*4]
mov qword [rsp + 0x80], rdx
shl rax, 3
sub rsi, rax
mov qword [rsp + 0x18], rsi
jmp 0x408d0a
xor eax, eax
jmp 0x408ff3
mov r8d, r8d
jmp 0x408c80