Function at 0x51c580
Capabilities:
Encode data using xor

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x3f8
lea rbx, [rsp + 0xdf]
mov rsi, r9
mov r12, r8
mov qword [rsp + 0x440], rcx
and rbx, 0xffffffffffffff80
mov r8, rdx
mov qword [rsp + 0x448], rdx
mov rdx, rcx
lea rdi, [rbx + 0x100]
mov rcx, rdi
call fcn.0051bd70
mov r8, rsi
mov rdx, r12
mov rcx, rdi
call fcn.00509ea0
cmp qword [rsp + 0x470], 0
je 0x51c90b
lea rsi, [rbx + 0x300]
lea rdi, [rsp + 0x5c]
mov qword [rsp + 0x38], 1
mov eax, 0x1000000
mov qword [rsp + 0x30], 0
lea rbp, [rbx + 0x200]
lea r12, [rbx + 0x280]
mov qword [rsp + 0x48], rsi
mov qword [rsp + 0x40], rdi
lea rdi, [rbx + 0x80]
nop dword [rax]
movdqu xmm0, xmmword [rbx + 0x100]
movdqu xmm1, xmmword [rbx + 0x110]
mov dword [rsp + 0x5c], eax
mov r8d, 4
movdqu xmm2, xmmword [rbx + 0x120]
movdqu xmm3, xmmword [rbx + 0x130]
mov rcx, rbx
movdqu xmm4, xmmword [rbx + 0x140]
movdqu xmm5, xmmword [rbx + 0x150]
movups xmmword [rbx], xmm0
movups xmmword [rbx + 0x10], xmm1
movdqu xmm0, xmmword [rbx + 0x160]
movdqu xmm1, xmmword [rbx + 0x170]
movups xmmword [rbx + 0x20], xmm2
movdqu xmm2, xmmword [rbx + 0x180]
movups xmmword [rbx + 0x30], xmm3
movdqu xmm3, xmmword [rbx + 0x190]
movups xmmword [rbx + 0x40], xmm4
movdqu xmm4, xmmword [rbx + 0x1a0]
movups xmmword [rbx + 0x50], xmm5
movdqu xmm5, xmmword [rbx + 0x1b0]
movups xmmword [rbx + 0x60], xmm0
movdqu xmm0, xmmword [rbx + 0x1c0]
movups xmmword [rbx + 0x70], xmm1
movdqu xmm1, xmmword [rbx + 0x1d0]
movups xmmword [rbx + 0x80], xmm2
movdqu xmm2, xmmword [rbx + 0x1e0]
movups xmmword [rbx + 0x90], xmm3
movdqu xmm3, xmmword [rbx + 0x1f0]
movups xmmword [rbx + 0xa0], xmm4
movups xmmword [rbx + 0xb0], xmm5
movups xmmword [rbx + 0xc0], xmm0
movups xmmword [rbx + 0xd0], xmm1
movups xmmword [rbx + 0xe0], xmm2
movups xmmword [rbx + 0xf0], xmm3
mov rdx, qword [rsp + 0x40]
call fcn.00509ea0
mov rdx, rbp
mov rcx, rbx
call fcn.0050a3c0
mov r8d, 0x20
mov rdx, rbp
mov rcx, rdi
call fcn.00509ea0
mov rdx, r12
mov rcx, rdi
call fcn.0050a3c0
movdqu xmm4, xmmword [rbx + 0x280]
movdqu xmm5, xmmword [rbx + 0x290]
cmp qword [rsp + 0x460], 1
movups xmmword [rbx + 0x300], xmm4
movups xmmword [rbx + 0x310], xmm5
jbe 0x51c844
mov r15, qword [rbx + 0x308]
mov r13, qword [rbx + 0x318]
mov esi, 2
mov r11, qword [rbx + 0x300]
mov r14, qword [rbx + 0x310]
mov r10, r13
mov r13, r15
mov r15, r11
nop dword [rax]
mov r8, qword [rsp + 0x448]
mov rdx, qword [rsp + 0x440]
mov rcx, rbx
add rsi, 1
mov qword [rsp + 0x28], r10
call fcn.0051bd70
mov r8d, 0x20
mov rdx, r12
mov rcx, rbx
call fcn.00509ea0
mov rdx, rbp
mov rcx, rbx
call fcn.0050a3c0
mov r8d, 0x20
mov rdx, rbp
mov rcx, rdi
call fcn.00509ea0
mov rdx, r12
mov rcx, rdi
call fcn.0050a3c0
mov r10, qword [rsp + 0x28]
xor r15, qword [rbx + 0x280]
xor r13, qword [rbx + 0x288]
xor r14, qword [rbx + 0x290]
mov qword [rbx + 0x300], r15
xor r10, qword [rbx + 0x298]
mov qword [rbx + 0x308], r13
mov qword [rbx + 0x310], r14
mov qword [rbx + 0x318], r10
cmp qword [rsp + 0x460], rsi
jae 0x51c7a0
mov rsi, qword [rsp + 0x30]
mov rax, qword [rsp + 0x470]
mov edx, 0x20
mov rcx, qword [rsp + 0x468]
sub rax, rsi
add rcx, rsi
cmp rax, 0x20
cmova rax, rdx
mov edx, eax
cmp eax, 8
jae 0x51c8c0
test al, 4
jne 0x51c91f
test edx, edx
je 0x51c892
mov rax, qword [rsp + 0x48]
movzx eax, byte [rax]
mov byte [rcx], al
test dl, 2
jne 0x51c935
add qword [rsp + 0x30], 0x20
mov rax, qword [rsp + 0x30]
add qword [rsp + 0x38], 1
cmp rax, qword [rsp + 0x470]
jae 0x51c90b
mov eax, dword [rsp + 0x38]
bswap eax
jmp 0x51c630
mov rsi, qword [rsp + 0x48]
mov rdx, qword [rsi]
mov qword [rcx], rdx
mov edx, eax
mov r8, qword [rsi + rdx - 8]
mov qword [rcx + rdx - 8], r8
lea r8, [rcx + 8]
and r8, 0xfffffffffffffff8
sub rcx, r8
lea edx, [rax + rcx]
sub rsi, rcx
and edx, 0xfffffff8
mov r9, rsi
cmp edx, 8
jb 0x51c892
and edx, 0xfffffff8
xor eax, eax
mov ecx, eax
add eax, 8
mov r10, qword [r9 + rcx]
mov qword [r8 + rcx], r10
cmp eax, edx
jb 0x51c8f8
jmp 0x51c892
add rsp, 0x3f8
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
mov rsi, qword [rsp + 0x48]
mov eax, dword [rsi]
mov dword [rcx], eax
mov eax, dword [rsi + rdx - 4]
mov dword [rcx + rdx - 4], eax
jmp 0x51c892
mov rax, qword [rsp + 0x48]
movzx eax, word [rax + rdx - 2]
mov word [rcx + rdx - 2], ax
jmp 0x51c892