Function at 0x478730
Capabilities:
Encode data using xor

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x128
mov qword [rsp + 0x188], r9
mov eax, r8d
mov r9d, dword [rcx + 4]
mov qword [rsp + 0x170], rcx
add rax, qword [rcx + 0xa0]
bswap rax
mov qword [rsp + 0x54], rax
mov eax, r9d
or eax, r8d
je 0x478798
cmp r9d, 3
jbe 0x4791e0
test r8d, r8d
jne 0x4791e0
mov r8d, 0x10
lea rdx, [rsp + r9 + 0x50]
sub r8, r9
jmp 0x4787a3
lea rdx, [rsp + 0x54]
mov r8d, 0xc
mov rcx, qword [rsp + 0x170]
mov ebx, 0x1e
call fcn.004705a0
mov rax, qword [rsp + 0x170]
mov rdi, qword [rsp + 0x170]
mov eax, dword [rax + 8]
lea r15, [rdi + 0xc]
lea rdi, [rsp + 0xa0]
mov rcx, rdi
mov qword [rsp + 0x48], r15
lea eax, [rax + rax*2]
add eax, eax
lea rsi, [rax*4]
sub rbx, rax
lea rdx, [r15 + rbx*4]
mov r8, rsi
call sub.msvcrt.dll_memcpy
mov r8d, ebx
lea rcx, [rdi + rsi]
mov rdx, r15
shl r8, 2
lea rsi, [0x0061a3c0]
lea r15, [0x0061afc0]
call sub.msvcrt.dll_memcpy
lea rax, [rsp + 0xac]
mov qword [rsp + 0x20], rdi
mov dword [rsp + 0x2c], 0xa
mov qword [rsp + 0x30], rax
nop dword [rax + rax]
mov rdx, qword [rsp + 0x20]
mov rax, qword [rsp + 0x10c]
mov r8d, 0x6c
lea r14, [0x0061abc0]
mov rcx, qword [rsp + 0x30]
lea rbp, [0x0061a7c0]
mov qword [rsp + 0x60], rax
mov eax, dword [rsp + 0x114]
mov dword [rsp + 0x68], eax
call sub.msvcrt.dll_memmove
mov r9, qword [rsp + 0x60]
mov r10d, dword [rsp + 0x68]
mov edi, dword [rsp + 0xb0]
mov rdx, qword [rsp + 0xb4]
xor qword [rsp + 0xe0], rdx
xor r10d, dword [rsp + 0xb8]
mov eax, edi
mov dword [rsp + 0x38], edi
xor edi, dword [rsp + 0xdc]
xor eax, r9d
shr r9, 0x20
xor r9d, dword [rsp + 0xb4]
mov dword [rsp + 0xdc], edi
mov edx, eax
movzx r8d, al
mov ebx, r9d
shr edx, 0x10
mov r11d, dword [rsi + r8*4]
movzx r8d, r9b
movzx ebx, bh
movzx edx, dl
mov r8d, dword [rsi + r8*4]
mov ecx, dword [r14 + rdx*4]
movzx edx, ah
shr eax, 0x18
mov r13d, dword [r15 + rax*4]
mov eax, r9d
shr r9d, 0x10
mov edx, dword [rbp + rdx*4]
shr eax, 0x18
movzx r9d, r9b
mov ebp, dword [rbp + rbx*4]
mov ebx, r10d
mov eax, dword [r15 + rax*4]
xor r13d, r11d
movzx ebx, bh
xor r13d, ecx
mov r12d, eax
xor r13d, edx
xor edx, ebp
xor r12d, r8d
xor r12d, dword [r14 + r9*4]
mov r9d, r10d
xor r8d, r11d
shr r9d, 0x18
xor r12d, ebp
mov r11d, dword [r15 + r9*4]
mov r9d, r10d
shr r9d, 0x10
movzx r9d, r9b
xor eax, r11d
mov r14d, dword [r14 + r9*4]
movzx r9d, r10b
mov r10, rbx
lea rbx, [0x0061a7c0]
mov ebp, dword [rsi + r9*4]
mov r9d, dword [rbx + r10*4]
xor ecx, r14d
xor r8d, ebp
xor r11d, ebp
mov ebp, dword [rsp + 0xac]
xor r11d, r14d
lea r14, [0x0061abc0]
mov r10d, ebp
xor r9d, r11d
mov ebx, ebp
shr r10d, 0x18
movzx ebx, bh
mov r11d, dword [r15 + r10*4]
mov r10d, ebp
movzx ebp, bpl
shr r10d, 0x10
movzx r10d, r10b
xor eax, r11d
mov r10d, dword [r14 + r10*4]
mov r14, rbx
lea rbx, [0x0061a7c0]
mov r14d, dword [rbx + r14*4]
xor ecx, r10d
xor edx, r14d
xor r11d, dword [rsi + rbp*4]
mov ebp, r13d
xor r10d, r11d
mov r11d, r12d
xor ebp, eax
xor r11d, ecx
and ebp, 0xff000000
xor r10d, r14d
mov r14d, r8d
and r11d, 0xff0000
shr r14d, 0x18
or ebp, r11d
mov r11d, r8d
xor r14d, r13d
xor r11d, r10d
movzx r14d, r14b
movzx r11d, r11b
or ebp, r11d
mov r11d, r9d
xor r11d, edx
and r11d, 0xff00
or ebp, r11d
mov r11d, eax
shl r11d, 8
mov dword [rsp + 0xa0], ebp
xor r11d, r12d
and r11d, 0xff000000
or r11d, r14d
mov r14d, ecx
shl r14d, 8
xor r14d, r9d
and r14d, 0xff0000
or r11d, r14d
mov r14d, edx
shl r14d, 8
xor r14d, r10d
and r14d, 0xff00
or r11d, r14d
mov r14d, r8d
mov dword [rsp + 0xa4], r11d
mov r11d, eax
shr r14d, 0x10
shl r11d, 0x10
xor r14d, r12d
xor r11d, r9d
movzx r14d, r14b
and r11d, 0xff000000
or r11d, r14d
mov r14d, ecx
shl eax, 0x18
shl r14d, 0x10
shr r8d, 8
xor eax, r10d
xor r14d, r10d
xor r9d, r8d
shr ecx, 8
and eax, 0xff000000
and r14d, 0xff0000
movzx r9d, r9b
or r11d, r14d
mov r14d, edx
shr edx, 8
or eax, r9d
shr r14d, 0x10
xor r12d, edx
xor r14d, r13d
xor r13d, ecx
and r12d, 0xff00
and r13d, 0xff0000
and r14d, 0xff00
or eax, r13d
or r11d, r14d
or r12d, eax
mov dword [rsp + 0xa8], r11d
mov dword [rsp + 0xac], r12d
sub dword [rsp + 0x2c], 1
jne 0x478838
lea rcx, [rsp + 0xdc]
mov ebx, dword [rsp + 0x38]
mov eax, edi
mov r14d, ebp
mov qword [rsp + 0x40], rcx
lea rcx, [rsp + 0xd8]
mov rdi, qword [rsp + 0x20]
mov dword [rsp + 0x30], 0xd
mov qword [rsp + 0x38], rcx
jmp 0x478b2e
mov ebx, dword [rsp + 0xb0]
mov eax, dword [rsp + 0xdc]
xor ebx, r14d
xor eax, r14d
mov r14, qword [rsp + 0x40]
mov r10, qword [rsp + 0xec]
mov dword [rsp + 0xb0], ebx
movdqu xmm0, xmmword [rdi]
mov dword [rsp + 0xdc], eax
mov r11, qword [rsp + 0xf4]
mov r12, qword [rsp + 0xdc]
mov r8, qword [rsp + 0xfc]
mov dword [rsp + 0x20], ebx
mov r9, qword [rsp + 0x104]
mov rcx, qword [rsp + 0x10c]
mov edx, dword [rsp + 0x114]
mov r13, qword [rsp + 0xe4]
movups xmmword [r14], xmm0
movdqu xmm1, xmmword [rdi + 0x10]
movups xmmword [r14 + 0x10], xmm1
movdqu xmm2, xmmword [rdi + 0x20]
movups xmmword [r14 + 0x20], xmm2
mov rbx, qword [rdi + 0x30]
mov qword [r14 + 0x30], rbx
mov ebx, dword [rdi + 0x38]
mov dword [rsp + 0xd8], edx
mov edx, eax
shr edx, 0x10
mov qword [rsp + 0xc8], r9
lea r9, [0x0061abc0]
movzx edx, dl
mov qword [rsp + 0xa0], r12
mov qword [rsp + 0xc0], r8
mov r12d, dword [r9 + rdx*4]
lea r8, [0x0061a7c0]
movzx edx, ah
mov dword [r14 + 0x38], ebx
mov r14d, dword [r8 + rdx*4]
movzx edx, al
shr eax, 0x18
mov qword [rsp + 0xb0], r10
mov qword [rsp + 0xb8], r11
mov qword [rsp + 0xd0], rcx
mov qword [rsp + 0xa8], r13
mov r13d, dword [rsi + rdx*4]
movdqu xmm4, xmmword [rsp + 0xf0]
mov ecx, dword [r15 + rax*4]
movdqu xmm5, xmmword [rsp + 0x100]
xor ecx, r13d
movups xmmword [rsp + 0x70], xmm4
mov ebx, ecx
mov ecx, dword [rsp + 0xa4]
xor ebx, r12d
mov eax, ecx
movzx edx, ch
xor ebx, r14d
shr eax, 0x18
mov r10d, dword [r8 + rdx*4]
movzx r8d, cl
shr ecx, 0x10
mov eax, dword [r15 + rax*4]
mov ebp, dword [rsi + r8*4]
movzx ecx, cl
mov rdx, r9
mov dword [rsp + 0x2c], r10d
mov r11d, eax
xor r11d, ebp
xor r11d, dword [r9 + rcx*4]
xor r11d, r10d
mov r10d, dword [rsp + 0xa8]
mov ecx, r10d
movzx r8d, r10b
shr ecx, 0x18
mov r8d, dword [rsi + r8*4]
mov r9d, dword [r15 + rcx*4]
mov ecx, r10d
shr ecx, 0x10
xor eax, r9d
movzx ecx, cl
xor r9d, r8d
xor r8d, ebp
mov ebp, dword [rsp + 0xac]
mov ecx, dword [rdx + rcx*4]
mov edx, r10d
xor r8d, r13d
movzx edx, dh
mov r13d, ebp
mov r10, rdx
lea rdx, [0x0061a7c0]
xor r9d, ecx
shr r13d, 0x10
xor r9d, dword [rdx + r10*4]
lea rdx, [0x0061abc0]
mov r10d, ebp
movzx r13d, r13b
shr r10d, 0x18
mov r13d, dword [rdx + r13*4]
mov edx, ebp
mov r10d, dword [r15 + r10*4]
movzx ebp, bpl
movzx edx, dh
xor ecx, r13d
xor eax, r10d
xor r10d, dword [rsi + rbp*4]
mov ebp, r11d
xor ecx, r12d
mov r12, rdx
lea rdx, [0x0061a7c0]
xor r10d, r13d
mov r12d, dword [rdx + r12*4]
mov edx, dword [rsp + 0x2c]
xor ebp, ecx
and ebp, 0xff0000
xor edx, r12d
xor r12d, r10d
mov r10d, r9d
xor edx, r14d
lea r14, [0x0061abc0]
xor r10d, edx
and r10d, 0xff00
or ebp, r10d
mov r10d, r8d
xor r10d, r12d
movzx r10d, r10b
or ebp, r10d
mov r10d, ebx
xor r10d, eax
and r10d, 0xff000000
or ebp, r10d
mov r10d, ecx
shl r10d, 8
mov dword [rsp + 0xa0], ebp
xor r10d, r9d
and r10d, 0xff0000
mov r13d, r10d
mov r10d, edx
shl r10d, 8
xor r10d, r12d
and r10d, 0xff00
or r10d, r13d
mov r13d, eax
shl r13d, 8
xor r13d, r11d
and r13d, 0xff000000
or r10d, r13d
mov r13d, r8d
shr r13d, 0x18
xor r13d, ebx
movzx r13d, r13b
or r10d, r13d
mov r13d, r8d
mov dword [rsp + 0xa4], r10d
mov r10d, eax
shr r13d, 0x10
shl r10d, 0x10
xor r13d, r11d
xor r10d, r9d
movzx r13d, r13b
and r10d, 0xff000000
or r10d, r13d
mov r13d, ecx
shl r13d, 0x10
xor r13d, r12d
and r13d, 0xff0000
or r10d, r13d
mov r13d, edx
shr r13d, 0x10
shr r8d, 8
xor dword [rsp + 0xb0], ebp
xor ebp, dword [rsp + 0xe0]
shl eax, 0x18
xor r9d, r8d
shr ecx, 8
xor r13d, ebx
xor eax, r12d
movzx r9d, r9b
xor ebx, ecx
shr edx, 8
and eax, 0xff000000
xor edx, r11d
and ebx, 0xff0000
mov dword [rsp + 0xe0], ebp
or eax, r9d
and r13d, 0xff00
movdqu xmm3, xmmword [rsp + 0xe0]
and edx, 0xff00
or eax, ebx
or r10d, r13d
mov r8d, 0x40
mov ebx, ebp
or edx, eax
mov dword [rsp + 0xa8], r10d
mov dword [rsp + 0xac], edx
mov rdx, rdi
movups xmmword [rsp + 0x60], xmm3
movups xmmword [rsp + 0x80], xmm5
mov rax, qword [rsp + 0x110]
mov rcx, qword [rsp + 0x38]
mov qword [rsp + 0x90], rax
call sub.msvcrt.dll_memmove
mov rax, qword [rsp + 0x90]
movdqu xmm0, xmmword [rsp + 0x60]
lea rdx, [0x0061a7c0]
movdqu xmm2, xmmword [rsp + 0x80]
movdqu xmm1, xmmword [rsp + 0x70]
mov qword [rsp + 0xd0], rax
mov eax, ebp
shr eax, 0x10
movups xmmword [rsp + 0xa0], xmm0
mov ecx, dword [rsp + 0xa4]
movzx eax, al
movups xmmword [rsp + 0xb0], xmm1
mov r12d, dword [r14 + rax*4]
movzx eax, bh
movups xmmword [rsp + 0xc0], xmm2
mov ebp, dword [rdx + rax*4]
movzx eax, bl
shr ebx, 0x18
mov r13d, dword [rsi + rax*4]
mov eax, ecx
mov r11d, dword [r15 + rbx*4]
shr eax, 0x18
mov r8d, dword [r15 + rax*4]
movzx eax, ch
xor r11d, r13d
mov ebx, dword [rdx + rax*4]
movzx eax, cl
shr ecx, 0x10
xor r11d, r12d
mov eax, dword [rsi + rax*4]
movzx ecx, cl
mov r10d, r8d
xor r11d, ebp
mov dword [rsp + 0x2c], ebx
xor r10d, eax
xor r10d, dword [r14 + rcx*4]
xor r10d, ebx
mov ebx, dword [rsp + 0xa8]
mov ecx, ebx
shr ecx, 0x18
mov r9d, dword [r15 + rcx*4]
mov ecx, ebx
xor r8d, r9d
shr ecx, 0x10
movzx ecx, cl
mov ecx, dword [r14 + rcx*4]
movzx r14d, bl
movzx ebx, bh
mov r14d, dword [rsi + r14*4]
xor r9d, r14d
xor eax, r14d
lea r14, [0x0061abc0]
xor r9d, ecx
xor r9d, dword [rdx + rbx*4]
mov edx, dword [rsp + 0x20]
xor r13d, eax
mov ebx, edx
mov eax, edx
shr ebx, 0x10
shr eax, 0x18
movzx ebx, bl
mov eax, dword [r15 + rax*4]
mov ebx, dword [r14 + rbx*4]
mov r14d, edx
xor r8d, eax
xor ecx, ebx
xor r12d, ecx
movzx ecx, dh
lea rdx, [0x0061a7c0]
mov ecx, dword [rdx + rcx*4]
mov edx, dword [rsp + 0x2c]
xor edx, ecx
xor ebp, edx
movzx edx, r14b
mov r14d, r10d
xor eax, dword [rsi + rdx*4]
xor r14d, r12d
mov edx, r13d
xor eax, ebx
and r14d, 0xff0000
mov ebx, r12d
xor ecx, eax
mov eax, r9d
shl ebx, 8
xor eax, ebp
xor ebx, r9d
and eax, 0xff00
and ebx, 0xff0000
or r14d, eax
mov eax, r13d
xor eax, ecx
movzx eax, al
or r14d, eax
mov eax, r11d
xor eax, r8d
and eax, 0xff000000
or r14d, eax
mov eax, ebp
shl eax, 8
mov dword [rsp + 0xa0], r14d
xor eax, ecx
and eax, 0xff00
shr edx, 0x10
or ebx, eax
mov eax, r8d
xor edx, r10d
shl eax, 8
movzx edx, dl
xor eax, r10d
and eax, 0xff000000
or ebx, eax
mov eax, r13d
shr r13d, 8
shr eax, 0x18
xor eax, r11d
movzx eax, al
or ebx, eax
mov eax, r8d
shl r8d, 0x18
shl eax, 0x10
mov dword [rsp + 0xa4], ebx
xor eax, r9d
xor r9d, r13d
and eax, 0xff000000
or eax, edx
mov edx, r12d
shr r12d, 8
shl edx, 0x10
xor edx, ecx
xor ecx, r8d
movzx r8d, r9b
and edx, 0xff0000
and ecx, 0xff000000
or eax, edx
mov edx, ebp
or ecx, r8d
shr edx, 0x10
xor edx, r11d
xor r11d, r12d
and edx, 0xff00
and r11d, 0xff0000
or eax, edx
or ecx, r11d
shr ebp, 8
xor r10d, ebp
mov dword [rsp + 0xa8], eax
and r10d, 0xff00
or r10d, ecx
mov dword [rsp + 0xac], r10d
sub dword [rsp + 0x30], 1
jne 0x478b20
mov edx, dword [rsp + 0xb0]
mov ebp, r14d
mov r9d, r10d
xor ebp, dword [rsp + 0xdc]
xor edx, r14d
bswap ebx
mov rdi, qword [rsp + 0x188]
mov dword [rdi], ebx
bswap eax
mov dword [rdi + 4], eax
bswap r9d
mov dword [rdi + 8], r9d
mov eax, edx
bswap eax
mov dword [rdi + 0xc], eax
bswap ebp
mov dword [rdi + 0x10], ebp
mov eax, dword [rsp + 0xe0]
bswap eax
mov dword [rdi + 0x14], eax
mov eax, dword [rsp + 0xe4]
bswap eax
cmp qword [rsp + 0x190], 8
mov dword [rdi + 0x18], eax
je 0x479248
mov rax, qword [rsp + 0x170]
movdqu xmm3, xmmword [0x0061b460]
mov qword [rax + 0xc], 0
mov rax, qword [rsp + 0x170]
mov qword [rax + 0x60], 0
lea rdx, [rax + 0x68]
mov rax, qword [rsp + 0x170]
mov rcx, qword [rsp + 0x48]
lea rdi, [rax + 0x14]
xor eax, eax
and rdi, 0xfffffffffffffff8
sub rcx, rdi
add ecx, 0x5c
shr ecx, 3
rep stosq qword [rdi], rax
mov rax, qword [rsp + 0x170]
movups xmmword [rax + 0x68], xmm3
mov rax, qword [0x0061b470]
mov qword [rdx + 0x10], rax
mov eax, dword [0x0061b478]
mov dword [rdx + 0x18], eax
mov rax, qword [rsp + 0x170]
mov qword [rax], 0
mov dword [rax + 8], 0
mov qword [rax + 0xa0], 0
add rsp, 0x128
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
mov eax, 0xff
mov ecx, r8d
shr eax, cl
not eax
and edx, eax
cmp r9d, 4
je 0x4792d5
mov ecx, r9d
mov r8d, 0x10
lea eax, [r9 + 1]
mov byte [rsp + rcx + 0x50], dl
sub r8, rcx
lea rdx, [rsp + rcx + 0x50]
cmp eax, 3
ja 0x4787a3
mov byte [rsp + rax + 0x50], 0
lea eax, [r9 + 2]
cmp r9d, 2
je 0x4787a3
mov byte [rsp + rax + 0x50], 0
lea eax, [r9 + 3]
cmp r9d, 1
jne 0x4792f0
jmp 0x4787a3
mov eax, dword [rsp + 0xe8]
bswap eax
mov dword [rdi + 0x1c], eax
mov rax, qword [rsp + 0x170]
movdqu xmm4, xmmword [0x0061b440]
movdqu xmm5, xmmword [0x0061b450]
mov qword [rax + 0xc], 0
mov rax, qword [rsp + 0x170]
mov qword [rax + 0x5c], 0
mov rax, qword [rsp + 0x170]
mov rcx, qword [rsp + 0x48]
lea rdi, [rax + 0x14]
xor eax, eax
and rdi, 0xfffffffffffffff8
sub rcx, rdi
add ecx, 0x58
shr ecx, 3
rep stosq qword [rdi], rax
mov rax, qword [rsp + 0x170]
mov qword [rax], 0
mov dword [rax + 8], 0
mov qword [rax + 0xa0], 0
movups xmmword [rax + 0x64], xmm4
movups xmmword [rax + 0x74], xmm5
jmp 0x4791c2
xor eax, eax
mov byte [rsp + 0x50], dl
mov r8d, 0x10
lea rdx, [rsp + 0x50]
mov word [rsp + 0x51], ax
mov eax, 3
mov ecx, eax
mov byte [rsp + rcx + 0x50], 0
cmp eax, 2
jne 0x4787a3
mov byte [rsp + 0x53], 0
jmp 0x4787a3