Function at 0x4097f0
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
xor eax, eax
test rdx, rdx
mov r10, rdx
mov qword [rsp + 0x80], r8
je 0x4097a3
cmp qword [rsp + 0x80], 0x2e
not ecx
mov r8d, ecx
jbe 0x40969b
mov rax, qword [rsp + 0x80]
lea rbx, [0x004160a0]
nop dword [rax]
test r10b, 7
je 0x4097b4
add r10, 1
mov edx, r8d
xor r8b, byte [r10 - 1]
shr edx, 8
movzx r8d, r8b
xor edx, dword [rbx + r8*4]
sub rax, 1
mov r8d, edx
jne 0x4094a0
mov qword [rsp + 0x80], rax
mov qword [rsp + 0x10], 0
mov rax, qword [rsp + 0x10]
mov r13, r10
xor r12d, r12d
xor ebp, ebp
lea r9, [0x004140a0]
xor edi, edi
xor esi, esi
mov qword [rsp + 0x78], r10
mov qword [rsp + 0x18], rbx
mov qword [rsp + 8], rax
xor rdi, qword [r13 + 0x10]
mov eax, r8d
mov r15d, esi
mov r14d, ebp
xor rax, qword [r13]
mov r11d, r12d
add r13, 0x28
xor r15, qword [r13 - 0x20]
xor r14, qword [r13 - 0x10]
xor r11, qword [r13 - 8]
mov qword [rsp], rdi
sub qword [rsp + 8], 1
movzx edx, al
je 0x4095e2
mov rcx, qword [rsp]
mov r10d, 1
mov qword [rsp], r13
mov r8d, dword [r9 + rdx*4]
movzx edx, r15b
mov esi, dword [r9 + rdx*4]
movzx edx, cl
mov r13, rcx
mov edi, dword [r9 + rdx*4]
movzx edx, r14b
mov ebp, dword [r9 + rdx*4]
movzx edx, r11b
mov r12d, dword [r9 + rdx*4]
nop dword [rax]
lea ecx, [r10*8]
mov rbx, rax
movsxd rdx, r10d
shr rbx, cl
shl rdx, 8
add r10d, 1
movzx ebx, bl
add rbx, rdx
xor r8d, dword [r9 + rbx*4]
mov rbx, r15
shr rbx, cl
movzx ebx, bl
add rbx, rdx
xor esi, dword [r9 + rbx*4]
mov rbx, r13
shr rbx, cl
movzx ebx, bl
add rbx, rdx
xor edi, dword [r9 + rbx*4]
mov rbx, r14
shr rbx, cl
movzx ebx, bl
add rbx, rdx
xor ebp, dword [r9 + rbx*4]
mov rbx, r11
shr rbx, cl
movzx ecx, bl
add rdx, rcx
xor r12d, dword [r9 + rdx*4]
cmp r10d, 8
jne 0x409570
mov r13, qword [rsp]
jmp 0x409501
mov rsi, qword [rsp + 0x10]
mov r9d, 8
mov r10, qword [rsp + 0x78]
mov rbx, qword [rsp + 0x18]
lea rcx, [rsi + rsi*4]
lea r10, [r10 + rcx*8]
jmp 0x409604
movzx edx, al
mov edx, dword [rbx + rdx*4]
shr rax, 8
xor rax, rdx
sub r9d, 1
jne 0x409601
mov eax, eax
xor r15, rax
mov eax, 8
nop
mov rdx, r15
movzx r15d, r15b
mov r15d, dword [rbx + r15*4]
shr rdx, 8
xor r15, rdx
sub eax, 1
jne 0x409620
mov edi, r15d
xor rdi, qword [rsp]
mov eax, 8
mov rdx, rdi
movzx edi, dil
mov edi, dword [rbx + rdi*4]
shr rdx, 8
xor rdi, rdx
sub eax, 1
jne 0x409643
mov ebp, edi
mov eax, 8
xor rbp, r14
mov rdx, rbp
movzx ebp, bpl
mov ebp, dword [rbx + rbp*4]
shr rdx, 8
xor rbp, rdx
sub eax, 1
jne 0x409663
mov r8d, ebp
mov eax, 8
xor r8, r11
mov rdx, r8
movzx r8d, r8b
mov r8d, dword [rbx + r8*4]
shr rdx, 8
xor r8, rdx
sub eax, 1
jne 0x409684
cmp qword [rsp + 0x80], 7
jbe 0x409763
mov rax, qword [rsp + 0x80]
lea rbx, [0x004160a0]
sub rax, 8
shr rax, 3
lea r9, [r10 + rax*8 + 8]
nop word cs:[rax + rax]
mov eax, r8d
xor r8b, byte [r10]
add r10, 8
shr eax, 8
movzx r8d, r8b
xor eax, dword [rbx + r8*4]
mov edx, eax
xor al, byte [r10 - 7]
shr edx, 8
movzx eax, al
xor edx, dword [rbx + rax*4]
mov eax, edx
xor dl, byte [r10 - 6]
shr eax, 8
movzx edx, dl
xor eax, dword [rbx + rdx*4]
mov edx, eax
xor al, byte [r10 - 5]
shr edx, 8
movzx eax, al
xor edx, dword [rbx + rax*4]
mov eax, edx
xor dl, byte [r10 - 4]
shr eax, 8
movzx edx, dl
xor eax, dword [rbx + rdx*4]
mov edx, eax
xor al, byte [r10 - 3]
shr edx, 8
movzx eax, al
xor edx, dword [rbx + rax*4]
mov eax, edx
xor dl, byte [r10 - 2]
shr eax, 8
movzx edx, dl
xor eax, dword [rbx + rdx*4]
mov r8d, eax
xor al, byte [r10 - 1]
shr r8d, 8
movzx eax, al
xor r8d, dword [rbx + rax*4]
cmp r10, r9
jne 0x4096d0
and qword [rsp + 0x80], 7
cmp qword [rsp + 0x80], 0
je 0x40979e
mov rdx, qword [rsp + 0x80]
lea rbx, [0x004160a0]
add rdx, r10
add r10, 1
mov eax, r8d
xor r8b, byte [r10 - 1]
shr eax, 8
movzx r8d, r8b
xor eax, dword [rbx + r8*4]
cmp r10, rdx
mov r8d, eax
jne 0x409780
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 0x4094da
mov r8d, r8d
jmp 0x409450