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

Disassembly:
push rsi
push rbx
mov eax, ecx
test r8, r8
not eax
je 0x51c43f
test dl, 3
je 0x51c444
lea r9, [0x0054a720]
jmp 0x51c425
test dl, 3
je 0x51c444
add rdx, 1
movzx ecx, byte [rdx - 1]
xor ecx, eax
shr eax, 8
movzx ecx, cl
xor eax, dword [r9 + rcx*4]
sub r8, 1
jne 0x51c420
not eax
pop rbx
pop rsi
ret
cmp r8, 0x1f
jbe 0x51c61a
lea rcx, [r8 - 0x20]
lea r9, [0x0054a720]
and rcx, 0xffffffffffffffe0
lea r10, [rdx + rcx + 0x20]
xor eax, dword [rdx]
mov ebx, eax
movzx ecx, al
mov r11d, eax
shr ebx, 0x18
mov ecx, dword [r9 + rcx*4 + 0xc00]
shr r11d, 0x10
xor ecx, dword [r9 + rbx*4]
movzx eax, ah
movzx r11d, r11b
xor ecx, dword [rdx + 4]
xor ecx, dword [r9 + rax*4 + 0x800]
xor ecx, dword [r9 + r11*4 + 0x400]
mov ebx, ecx
movzx eax, cl
mov r11d, ecx
shr ebx, 0x18
mov eax, dword [r9 + rax*4 + 0xc00]
shr r11d, 0x10
xor eax, dword [r9 + rbx*4]
movzx ecx, ch
movzx r11d, r11b
xor eax, dword [rdx + 8]
xor eax, dword [r9 + rcx*4 + 0x800]
xor eax, dword [r9 + r11*4 + 0x400]
mov ebx, eax
movzx ecx, al
mov r11d, eax
shr ebx, 0x18
mov ecx, dword [r9 + rcx*4 + 0xc00]
shr r11d, 0x10
xor ecx, dword [r9 + rbx*4]
movzx eax, ah
movzx r11d, r11b
xor ecx, dword [rdx + 0xc]
xor ecx, dword [r9 + rax*4 + 0x800]
xor ecx, dword [r9 + r11*4 + 0x400]
mov ebx, ecx
movzx eax, cl
mov r11d, ecx
shr ebx, 0x18
mov eax, dword [r9 + rax*4 + 0xc00]
shr r11d, 0x10
xor eax, dword [r9 + rbx*4]
movzx ecx, ch
movzx r11d, r11b
xor eax, dword [rdx + 0x10]
xor eax, dword [r9 + rcx*4 + 0x800]
xor eax, dword [r9 + r11*4 + 0x400]
mov ebx, eax
movzx ecx, al
mov r11d, eax
shr ebx, 0x18
mov ecx, dword [r9 + rcx*4 + 0xc00]
shr r11d, 0x10
xor ecx, dword [r9 + rbx*4]
movzx eax, ah
movzx r11d, r11b
xor ecx, dword [rdx + 0x14]
xor ecx, dword [r9 + rax*4 + 0x800]
xor ecx, dword [r9 + r11*4 + 0x400]
mov r11d, ecx
mov ebx, ecx
movzx eax, cl
shr r11d, 0x10
shr ebx, 0x18
mov eax, dword [r9 + rax*4 + 0xc00]
xor eax, dword [r9 + rbx*4]
movzx ecx, ch
movzx r11d, r11b
xor eax, dword [rdx + 0x18]
add rdx, 0x20
xor eax, dword [r9 + rcx*4 + 0x800]
xor eax, dword [r9 + r11*4 + 0x400]
mov ebx, eax
movzx ecx, al
mov r11d, eax
shr ebx, 0x18
mov ecx, dword [r9 + rcx*4 + 0xc00]
shr r11d, 0x10
xor ecx, dword [r9 + rbx*4]
movzx eax, ah
movzx r11d, r11b
xor ecx, dword [rdx - 4]
xor ecx, dword [r9 + rax*4 + 0x800]
xor ecx, dword [r9 + r11*4 + 0x400]
mov ebx, ecx
mov r11d, ecx
movzx eax, cl
shr ebx, 0x18
shr r11d, 0x10
mov eax, dword [r9 + rax*4 + 0xc00]
movzx ecx, ch
xor eax, dword [r9 + rbx*4]
movzx r11d, r11b
xor eax, dword [r9 + rcx*4 + 0x800]
xor eax, dword [r9 + r11*4 + 0x400]
cmp rdx, r10
jne 0x51c462
and r8d, 0x1f
cmp r8, 3
jbe 0x51c67a
lea rcx, [r8 - 4]
lea r9, [0x0054a720]
shr rcx, 2
lea rsi, [rdx + rcx*4 + 4]
add rdx, 4
xor eax, dword [rdx - 4]
mov r11d, eax
mov r10d, eax
movzx ecx, al
shr r11d, 0x18
shr r10d, 0x10
movzx eax, ah
mov ecx, dword [r9 + rcx*4 + 0xc00]
xor ecx, dword [r9 + r11*4]
movzx r10d, r10b
xor ecx, dword [r9 + rax*4 + 0x800]
mov eax, dword [r9 + r10*4 + 0x400]
xor eax, ecx
cmp rdx, rsi
jne 0x51c634
and r8d, 3
test r8, r8
je 0x51c43f
lea r9, [0x0054a720]
add r8, rdx
add rdx, 1
movzx ecx, byte [rdx - 1]
xor ecx, eax
shr eax, 8
movzx ecx, cl
xor eax, dword [r9 + rcx*4]
cmp rdx, r8
jne 0x51c68d
not eax
pop rbx
pop rsi
ret
test rdx, rdx
je 0x51c870
mov r8d, r8d
jmp 0x51c400
xor eax, eax
ret