Function at 0x40f820
Capabilities:
Encode data using xor

Disassembly:
sub rsp, 0x58
lea eax, [r8 - 1]
mov qword [rsp + 0x60], rbx
mov rbx, rcx
test eax, eax
movsxd r8, eax
js 0x40f852
lea rcx, [rcx + r8*8]
sub rdx, rbx
nop
mov rax, qword [rdx + rcx]
sub rcx, 8
xor qword [rcx + 8], rax
sub r8, 1
jns 0x40f840
mov qword [rsp + 0x70], rsi
mov qword [rsp + 0x50], r12
mov qword [rsp + 0x48], r13
mov qword [rsp + 0x40], r14
mov qword [rsp + 0x38], r15
mov qword [rsp + 0x68], rbp
mov qword [rsp + 0x78], rdi
lea rsi, [0x00438e00]
lea r15, [0x00438f9c]
lea r13, [0x00400000]
lea r14, [0x00438ec0]
mov rax, qword [rbx + 0x78]
mov r10, rbx
mov r9, r15
xor rax, qword [rbx]
mov r11d, 5
xor rax, qword [rbx + 0x28]
xor rax, qword [rbx + 0xa0]
xor rax, qword [rbx + 0x50]
mov qword [rsp], rax
mov rax, qword [rbx + 0xa8]
xor rax, qword [rbx + 0x58]
xor rax, qword [rbx + 0x80]
xor rax, qword [rbx + 8]
xor rax, qword [rbx + 0x30]
mov qword [rsp + 8], rax
mov rax, qword [rbx + 0x10]
xor rax, qword [rbx + 0x38]
xor rax, qword [rbx + 0xb0]
xor rax, qword [rbx + 0x60]
xor rax, qword [rbx + 0x88]
mov qword [rsp + 0x10], rax
mov rax, qword [rbx + 0x40]
xor rax, qword [rbx + 0xb8]
xor rax, qword [rbx + 0x68]
xor rax, qword [rbx + 0x90]
xor rax, qword [rbx + 0x18]
mov qword [rsp + 0x18], rax
mov rax, qword [rbx + 0xc0]
xor rax, qword [rbx + 0x70]
xor rax, qword [rbx + 0x98]
xor rax, qword [rbx + 0x20]
xor rax, qword [rbx + 0x48]
mov qword [rsp + 0x20], rax
nop
nop
nop
nop
mov eax, dword [r9]
mov rdx, qword [rsp + rax*8]
mov eax, dword [r9 + 0xc]
mov r8, qword [rsp + rax*8]
lea rax, [rdx + rdx]
mov rcx, rdx
shr rcx, 0x3f
xor r8, rcx
mov ecx, 5
xor r8, rax
mov rax, r10
nop
nop
xor qword [rax], r8
add rax, 0x28
sub rcx, 1
jne 0x40f970
add r9, 4
add r10, 8
sub r11, 1
jne 0x40f940
mov r11, qword [rbx + 8]
xor edi, edi
lea ebp, [rcx + 4]
nop
nop
nop
mov dl, byte [rdi + r13 + 0x38ec0]
mov r9d, dword [rdi + r13 + 0x38f30]
mov r8, r11
mov r10, qword [rbx + r9*8]
and edx, 0x3f
mov ecx, 0x40
sub cl, dl
add rdi, 0x18
shr r8, cl
mov rcx, rdx
shl r11, cl
mov ecx, 0x40
xor r8, r11
mov qword [rbx + r9*8], r8
mov dl, byte [rdi + r13 + 0x38eac]
mov r9d, dword [rdi + r13 + 0x38f1c]
mov r11, qword [rbx + r9*8]
and edx, 0x3f
mov r8, r10
sub cl, dl
shr r8, cl
mov rcx, rdx
shl r10, cl
mov ecx, 0x40
xor r8, r10
mov qword [rbx + r9*8], r8
mov dl, byte [rdi + r13 + 0x38eb0]
mov r9d, dword [rdi + r13 + 0x38f20]
mov r10, qword [rbx + r9*8]
and edx, 0x3f
mov r8, r11
sub cl, dl
shr r8, cl
mov rcx, rdx
shl r11, cl
mov ecx, 0x40
xor r8, r11
mov qword [rbx + r9*8], r8
mov dl, byte [rdi + r13 + 0x38eb4]
mov r9d, dword [rdi + r13 + 0x38f24]
mov r11, qword [rbx + r9*8]
and edx, 0x3f
mov r8, r10
sub cl, dl
shr r8, cl
mov rcx, rdx
shl r10, cl
mov ecx, 0x40
xor r8, r10
mov qword [rbx + r9*8], r8
mov dl, byte [rdi + r13 + 0x38eb8]
mov r9d, dword [rdi + r13 + 0x38f28]
mov r10, qword [rbx + r9*8]
and edx, 0x3f
mov r8, r11
sub cl, dl
shr r8, cl
mov rcx, rdx
shl r11, cl
mov ecx, 0x40
xor r8, r11
mov qword [rbx + r9*8], r8
mov dl, byte [rdi + r13 + 0x38ebc]
mov r9d, dword [rdi + r13 + 0x38f2c]
mov r11, qword [rbx + r9*8]
and edx, 0x3f
mov r8, r10
sub cl, dl
shr r8, cl
mov rcx, rdx
shl r10, cl
xor r8, r10
sub rbp, 1
mov qword [rbx + r9*8], r8
jne 0x40f9a0
lea r11, [rbx + 0x10]
lea edi, [rbp + 5]
nop
nop
mov r9, qword [r11 - 8]
mov rcx, qword [r11]
mov r10, qword [r11 - 0x10]
mov rdx, qword [r11 + 8]
mov r8, qword [r11 + 0x10]
mov rax, r9
not rax
add r11, 0x28
and rax, rcx
xor rax, r10
mov qword [r11 - 0x38], rax
mov rax, rcx
not rax
and rax, rdx
xor rax, r9
mov qword [r11 - 0x30], rax
mov rax, rdx
not rax
and rax, r8
xor rax, rcx
mov qword [r11 - 0x28], rax
mov rax, r8
not rax
and rax, r10
not r10
and r10, r9
xor rax, rdx
xor r10, r8
sub rdi, 1
mov qword [r11 - 0x20], rax
mov qword [r11 - 0x18], r10
jne 0x40fae0
mov rax, qword [rsi]
add rsi, 8
xor qword [rbx], rax
cmp rsi, r14
jl 0x40f891
mov r15, qword [rsp + 0x38]
mov r14, qword [rsp + 0x40]
mov r13, qword [rsp + 0x48]
mov r12, qword [rsp + 0x50]
mov rdi, qword [rsp + 0x78]
mov rsi, qword [rsp + 0x70]
mov rbp, qword [rsp + 0x68]
mov rbx, qword [rsp + 0x60]
add rsp, 0x58
ret