Function at 0x46c71c
Capabilities:
Encode data using xor
Encrypt data using aes via x86 extensions

Disassembly:
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0x148
movaps xmmword [rsp + 0x130], xmm6
mov rsi, rcx
mov al, byte [0x005b7070]
cmp al, 1
jne 0x46c2e8
mov rcx, rsi
movaps xmm6, xmmword [rsp + 0x130]
add rsp, 0x148
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
jmp 0x46c71c
mov rbp, qword [rdx + 0x18]
mov r11, qword [rdx]
mov r13, qword [rdx + 8]
mov rcx, qword [rdx + 0x10]
mov eax, ecx
and eax, 3
lea edx, [rcx + rcx]
and edx, 6
mov qword [rsp + 0x98], rdx
mov qword [rsp + 0x38], rax
sub rdx, rax
mov qword [rsp + 0xa0], rdx
mov qword [rsp + 0x30], rcx
cmp rcx, 4
jb 0x46c503
mov rax, qword [rsp + 0x30]
shr rax, 2
mov qword [rsp + 0x28], rax
movabs rdi, 0x7ffffffffffffffb
xor r15d, r15d
xorps xmm6, xmm6
mov qword [rsp + 0xa8], r13
mov r13, r11
mov rbx, rsi
movaps xmmword [rsp + 0x120], xmm6
movaps xmmword [rsp + 0x110], xmm6
movaps xmmword [rsp + 0x100], xmm6
movaps xmmword [rsp + 0xf0], xmm6
movaps xmmword [rsp + 0x70], xmm6
movaps xmmword [rsp + 0x60], xmm6
movaps xmmword [rsp + 0x50], xmm6
movaps xmmword [rsp + 0x40], xmm6
mov eax, dword [rbp + 0x10]
lea rdx, [rsp + 0x40]
xor ecx, ecx
movaps xmmword [rsp + 0xb0], xmm6
mov r8d, dword [rbp + 0xc]
add r8d, eax
bswap r8d
xor r9d, r9d
lea r10, [r9 + 1]
mov r11d, r8d
cmp r9, 3
je 0x46c3ba
mov r11d, dword [rbp + r9*4]
mov esi, r9d
and esi, 4
mov r14, r9
or r9, 4
imul r9, rsi
xor rsi, 4
and r14, rdi
imul r14, rsi
add r9, r14
mov dword [rsp + r9 + 0xb0], r11d
mov r9, r10
cmp r10, 4
jne 0x46c3a8
inc rcx
inc eax
mov dword [rbp + 0x10], eax
movaps xmm0, xmmword [rsp + 0xb0]
movups xmmword [rdx], xmm0
mov rdx, rcx
shl rdx, 4
add rdx, rsp
add rdx, 0x40
cmp rcx, 4
jne 0x46c393
mov r14, r15
shl r14, 6
lea r12, [rsp + 0xf0]
mov rcx, r12
mov rsi, rbx
mov rdx, rbx
lea rbx, [rsp + 0x40]
mov r8, rbx
call fcn.00416336
mov r11, r13
movups xmm0, xmmword [r13 + r14]
movups xmm1, xmmword [r13 + r14 + 0x10]
movups xmm2, xmmword [r13 + r14 + 0x20]
movups xmm3, xmmword [r13 + r14 + 0x30]
movaps xmmword [rsp + 0xe0], xmm3
movaps xmmword [rsp + 0xd0], xmm2
movaps xmmword [rsp + 0xc0], xmm1
movaps xmmword [rsp + 0xb0], xmm0
movaps xmmword [rsp + 0x70], xmm6
movaps xmmword [rsp + 0x60], xmm6
movaps xmmword [rsp + 0x50], xmm6
movaps xmmword [rsp + 0x40], xmm6
lea rax, [rsp + 0xb0]
xor r8d, r8d
mov r13, qword [rsp + 0xa8]
xor r9d, r9d
mov r10b, byte [r12 + r9]
xor r10b, byte [rax + r9]
mov byte [rbx + r9], r10b
lea r10, [r9 + 1]
mov r9, r10
cmp r10, 0x10
jne 0x46c49b
inc r8
add rbx, 0x10
add r12, 0x10
add rax, 0x10
cmp r8, 4
jne 0x46c498
inc r15
movaps xmm0, xmmword [rsp + 0x40]
movaps xmm1, xmmword [rsp + 0x50]
movaps xmm2, xmmword [rsp + 0x60]
movaps xmm3, xmmword [rsp + 0x70]
movups xmmword [r13 + r14 + 0x30], xmm3
movups xmmword [r13 + r14 + 0x20], xmm2
movups xmmword [r13 + r14 + 0x10], xmm1
movups xmmword [r13 + r14], xmm0
cmp qword [rsp + 0x28], r15
jne 0x46c34f
xorps xmm0, xmm0
movaps xmmword [rsp + 0x120], xmm0
movaps xmmword [rsp + 0x110], xmm0
movaps xmmword [rsp + 0x100], xmm0
movaps xmmword [rsp + 0xf0], xmm0
mov rcx, qword [rsp + 0xa0]
cmp rcx, 5
jae 0x46c6ef
cmp rcx, 4
je 0x46c702
mov rax, qword [rsp + 0x98]
cmp rax, qword [rsp + 0x38]
je 0x46c6d3
mov qword [rsp + 0x28], rsi
movabs rax, 0xffffffffffffffc
mov rdx, qword [rsp + 0x30]
and rdx, rax
shl rdx, 4
add r11, rdx
mov r12, r11
add r13, rdx
shl rcx, 4
lea rdi, [rsp + rcx]
add rdi, 0xf0
movabs r14, 0x7ffffffffffffffb
lea rsi, [rsp + 0xf0]
xorps xmm6, xmm6
lea rbx, [rsp + 0xb0]
movaps xmmword [rsp + 0x80], xmm6
mov eax, dword [rbp + 0x10]
mov ecx, dword [rbp + 0xc]
add ecx, eax
bswap ecx
xor edx, edx
lea r8, [rdx + 1]
mov r9d, ecx
cmp rdx, 3
je 0x46c5cb
mov r9d, dword [rbp + rdx*4]
mov r10d, edx
and r10d, 4
mov r11, rdx
or rdx, 4
imul rdx, r10
xor r10, 4
and r11, r14
imul r11, r10
add rdx, r11
mov dword [rsp + rdx + 0x80], r9d
mov rdx, r8
cmp r8, 4
jne 0x46c5b9
inc eax
mov dword [rbp + 0x10], eax
lea r15, [rsi + 0x10]
movaps xmmword [rsp + 0xe0], xmm6
movaps xmmword [rsp + 0xd0], xmm6
movaps xmmword [rsp + 0xc0], xmm6
movaps xmmword [rsp + 0xb0], xmm6
mov rcx, rbx
lea rdx, [rsp + 0x90]
lea r8, [rsp + 0x80]
call fcn.0044e7d9
lea rcx, [rsp + 0x40]
mov rdx, qword [rsp + 0x28]
mov r8, rbx
call fcn.00416336
movups xmm0, xmmword [rsp + 0x40]
movups xmmword [rsi], xmm0
mov rsi, r15
cmp r15, rdi
jne 0x46c5a5
mov rcx, qword [rsp + 0x38]
cmp rcx, 2
mov eax, 1
cmovae rax, rcx
lea rcx, [rsp + 0xf0]
xor edx, edx
xorps xmm0, xmm0
mov r8, rdx
shl r8, 4
movups xmm1, xmmword [r12 + r8]
movaps xmmword [rsp + 0xb0], xmm1
movaps xmmword [rsp + 0x40], xmm0
xor r9d, r9d
mov r10b, byte [rcx + r9]
xor r10b, byte [rsp + r9 + 0xb0]
mov byte [rsp + r9 + 0x40], r10b
lea r10, [r9 + 1]
mov r9, r10
cmp r10, 0x10
jne 0x46c69e
inc rdx
movaps xmm1, xmmword [rsp + 0x40]
movups xmmword [r13 + r8], xmm1
add rcx, 0x10
cmp rdx, rax
jne 0x46c682
movaps xmm6, xmmword [rsp + 0x130]
add rsp, 0x148
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret
lea r8, [0x005d7120]
mov edx, 4
call fcn.004292f0
ud2
lea rcx, str.assertion_failed:_blocks.len_____Self::ParBlocksSize::USIZE
lea r8, [0x005da940]
mov edx, 0x3b
call fcn.00426370
ud2
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbp
push rbx
sub rsp, 0x308
movdqa xmmword [rsp + 0x2f0], xmm15
movdqa xmmword [rsp + 0x2e0], xmm14
movdqa xmmword [rsp + 0x2d0], xmm13
movdqa xmmword [rsp + 0x2c0], xmm12
movdqa xmmword [rsp + 0x2b0], xmm11
movdqa xmmword [rsp + 0x2a0], xmm10
movdqa xmmword [rsp + 0x290], xmm9
movdqa xmmword [rsp + 0x280], xmm8
movdqa xmmword [rsp + 0x270], xmm7
movdqa xmmword [rsp + 0x260], xmm6
mov qword [rsp + 0xb8], rcx
mov rsi, qword [rdx + 0x18]
mov rbp, qword [rdx]
mov rax, qword [rdx + 8]
mov qword [rsp + 0x28], rax
mov rdx, qword [rdx + 0x10]
mov rcx, rdx
shr rcx, 3
mov eax, ecx
and eax, 8
mov r8, rcx
or r8, 8
imul r8, rax
xor rax, 8
mov qword [rsp + 0xd8], rcx
and rcx, 0xfffffffffffffff7
imul rcx, rax
add r8, rcx
mov rax, rdx
mov qword [rsp + 0xc8], r8
sub rax, r8
mov qword [rsp + 0xd0], rax
mov qword [rsp + 0xc0], rdx
cmp rdx, 8
jb 0x46ccff
movabs rbx, 0x7ffffffffffffffb
mov rax, qword [rsp + 0xb8]
movaps xmm0, xmmword [rax]
movaps xmmword [rsp + 0x120], xmm0
movaps xmm0, xmmword [rax + 0x10]
movaps xmmword [rsp + 0x110], xmm0
movaps xmm0, xmmword [rax + 0x20]
movaps xmmword [rsp + 0x100], xmm0
movaps xmm0, xmmword [rax + 0x30]
movaps xmmword [rsp + 0xf0], xmm0
movdqa xmm0, xmmword [rax + 0x40]
movdqa xmmword [rsp + 0xe0], xmm0
movdqa xmm11, xmmword [rax + 0x50]
movdqa xmm12, xmmword [rax + 0x60]
movdqa xmm13, xmmword [rax + 0x70]
movdqa xmm14, xmmword [rax + 0x80]
movdqa xmm15, xmmword [rax + 0x90]
movdqa xmm6, xmmword [rax + 0xa0]
movdqa xmm7, xmmword [rax + 0xb0]
movdqa xmm8, xmmword [rax + 0xc0]
movdqa xmm9, xmmword [rax + 0xd0]
movdqa xmm10, xmmword [rax + 0xe0]
xor edi, edi
lea r14, [rsp + 0x160]
lea r15, [rsp + 0x30]
lea rcx, [rsp + 0x1e0]
call fcn.0044d8fa
mov rcx, r14
call fcn.0044d8fa
mov eax, dword [rsi + 0x10]
mov rdx, r14
xor ecx, ecx
pxor xmm1, xmm1
movdqa xmmword [rsp + 0x30], xmm1
mov r8d, dword [rsi + 0xc]
add r8d, eax
bswap r8d
xor r9d, r9d
lea r10, [r9 + 1]
mov r11d, r8d
cmp r9, 3
je 0x46c8f5
mov r11d, dword [rsi + r9*4]
mov r12d, r9d
and r12d, 4
mov r13, r9
or r9, 4
imul r9, r12
xor r12, 4
and r13, rbx
imul r13, r12
add r9, r13
mov dword [rsp + r9 + 0x30], r11d
mov r9, r10
cmp r10, 4
jne 0x46c8e4
inc rcx
inc eax
mov dword [rsi + 0x10], eax
movdqa xmm0, xmmword [rsp + 0x30]
movdqu xmmword [rdx], xmm0
mov rdx, rcx
shl rdx, 4
add rdx, rsp
add rdx, 0x160
cmp rcx, 8
jne 0x46c8d1
movaps xmm0, xmmword [rsp + 0x160]
movaps xmm1, xmmword [rsp + 0x120]
xorps xmm0, xmm1
movaps xmmword [rsp + 0x30], xmm0
movaps xmm0, xmmword [rsp + 0x170]
xorps xmm0, xmm1
movaps xmmword [rsp + 0x40], xmm0
movaps xmm0, xmmword [rsp + 0x180]
xorps xmm0, xmm1
movaps xmmword [rsp + 0x50], xmm0
movaps xmm0, xmmword [rsp + 0x190]
xorps xmm0, xmm1
movaps xmmword [rsp + 0x60], xmm0
movaps xmm0, xmmword [rsp + 0x1a0]
xorps xmm0, xmm1
movaps xmmword [rsp + 0x70], xmm0
movaps xmm0, xmmword [rsp + 0x1b0]
xorps xmm0, xmm1
movaps xmmword [rsp + 0x80], xmm0
movaps xmm0, xmmword [rsp + 0x1c0]
xorps xmm0, xmm1
movaps xmmword [rsp + 0x90], xmm0
movaps xmm0, xmmword [rsp + 0x1d0]
xorps xmm0, xmm1
movaps xmmword [rsp + 0xa0], xmm0
xor eax, eax
movdqa xmm1, xmmword [rsp + 0x110]
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm1
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46c9e8
mov rdx, rdi
shl rdx, 7
mov rax, qword [rsp + 0x28]
lea r12, [rax + rdx]
xor eax, eax
movdqa xmm1, xmmword [rsp + 0x100]
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm1
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46ca20
xor eax, eax
movdqa xmm1, xmmword [rsp + 0xf0]
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm1
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46ca48
xor eax, eax
movdqa xmm1, xmmword [rsp + 0xe0]
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm1
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46ca70
xor eax, eax
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm11
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46ca8f
xor eax, eax
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm12
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46caaf
xor eax, eax
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm13
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46cacf
xor eax, eax
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm14
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46caef
xor eax, eax
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm15
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46cb0f
xor eax, eax
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm6
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46cb2f
xor eax, eax
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm7
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46cb4e
xor eax, eax
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm8
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46cb6d
xor eax, eax
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenc xmm0, xmm9
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46cb8d
xor eax, eax
movdqa xmm0, xmmword [rsp + rax + 0x30]
aesenclast xmm0, xmm10
movdqa xmmword [rsp + rax + 0x30], xmm0
add rax, 0x10
cmp rax, 0x80
jne 0x46cbad
add rdx, rbp
movaps xmm0, xmmword [rsp + 0x30]
movaps xmmword [rsp + 0x140], xmm0
movdqa xmm1, xmmword [rsp + 0x40]
movdqa xmm2, xmmword [rsp + 0x50]
movdqa xmm3, xmmword [rsp + 0x60]
movdqa xmm4, xmmword [rsp + 0x70]
movdqa xmm5, xmmword [rsp + 0x80]
movaps xmm0, xmmword [rsp + 0x90]
movaps xmmword [rsp + 0x150], xmm0
movaps xmm0, xmmword [rsp + 0xa0]
movaps xmmword [rsp + 0x130], xmm0
movaps xmm0, xmmword [rsp + 0x140]
movaps xmmword [rsp + 0x1e0], xmm0
movdqa xmmword [rsp + 0x1f0], xmm1
movdqa xmmword [rsp + 0x200], xmm2
movdqa xmmword [rsp + 0x210], xmm3
movdqa xmmword [rsp + 0x220], xmm4
movdqa xmmword [rsp + 0x230], xmm5
movaps xmm0, xmmword [rsp + 0x150]
movaps xmmword [rsp + 0x240], xmm0
movdqa xmm0, xmmword [rsp + 0x130]
movdqa xmmword [rsp + 0x250], xmm0
mov r8d, pe_nt_image_headers64
mov rcx, r14
call sub.msvcrt.dll_memcpy
mov rcx, r15
call fcn.0044d8fa
mov rax, r14
lea rcx, [rsp + 0x1e0]
mov rdx, r15
xor r8d, r8d
xor r9d, r9d
mov r10b, byte [rcx + r9]
xor r10b, byte [rax + r9]
mov byte [rdx + r9], r10b
lea r10, [r9 + 1]
mov r9, r10
cmp r10, 0x10
jne 0x46cca5
inc r8
add rdx, 0x10
add rcx, 0x10
add rax, 0x10
cmp r8, 8
jne 0x46cca2
mov eax, edi
and eax, 1
xor rdi, 1
lea rdi, [rdi + rax*2]
mov r8d, pe_nt_image_headers64
mov rcx, r12
mov rdx, r15
call sub.msvcrt.dll_memcpy
cmp qword [rsp + 0xd8], rdi
jne 0x46c8b0
lea rbx, [rsp + 0x30]
mov rcx, rbx
call fcn.0044d8fa
mov rcx, qword [rsp + 0xd0]
cmp rcx, 9
jae 0x46cf95
cmp rcx, 8
mov rax, qword [rsp + 0xc8]
je 0x46cfa8
cmp qword [rsp + 0xc0], rax
je 0x46cf29
shl rax, 4
add rbp, rax
add qword [rsp + 0x28], rax
mov rax, rcx
shl rax, 4
add rax, rsp
add rax, 0x30
movabs r15, 0x7ffffffffffffffb
mov rdx, qword [rsp + 0xb8]
movdqa xmm0, xmmword [rdx]
movdqa xmm1, xmmword [rdx + 0x10]
movdqa xmm2, xmmword [rdx + 0x20]
movdqa xmm3, xmmword [rdx + 0x30]
movdqa xmm4, xmmword [rdx + 0x40]
movdqa xmm5, xmmword [rdx + 0x50]
movdqa xmm6, xmmword [rdx + 0x60]
movdqa xmm7, xmmword [rdx + 0x70]
movdqa xmm8, xmmword [rdx + 0x80]
movdqa xmm9, xmmword [rdx + 0x90]
movdqa xmm10, xmmword [rdx + 0xa0]
movdqa xmm11, xmmword [rdx + 0xb0]
movdqa xmm12, xmmword [rdx + 0xc0]
movdqa xmm13, xmmword [rdx + 0xd0]
movdqa xmm14, xmmword [rdx + 0xe0]
pxor xmm15, xmm15
movdqa xmmword [rsp + 0x160], xmm15
mov edx, dword [rsi + 0x10]
mov r8d, dword [rsi + 0xc]
add r8d, edx
bswap r8d
xor r9d, r9d
lea r10, [r9 + 1]
mov r11d, r8d
cmp r9, 3
je 0x46ce00
mov r11d, dword [rsi + r9*4]
mov edi, r9d
and edi, 4
mov r14, r9
or r9, 4
imul r9, rdi
xor rdi, 4
and r14, r15
imul r14, rdi
add r9, r14
mov dword [rsp + r9 + 0x160], r11d
mov r9, r10
cmp r10, 4
jne 0x46cdef
inc edx
mov dword [rsi + 0x10], edx
movdqa xmm15, xmmword [rsp + 0x160]
pxor xmm15, xmm0
aesenc xmm15, xmm1
aesenc xmm15, xmm2
aesenc xmm15, xmm3
aesenc xmm15, xmm4
aesenc xmm15, xmm5
aesenc xmm15, xmm6
aesenc xmm15, xmm7
aesenc xmm15, xmm8
aesenc xmm15, xmm9
aesenc xmm15, xmm10
aesenc xmm15, xmm11
aesenc xmm15, xmm12
aesenc xmm15, xmm13
aesenclast xmm15, xmm14
movdqu xmmword [rbx], xmm15
lea rdx, [rbx + 0x10]
mov rbx, rdx
cmp rdx, rax
jne 0x46cdd0
cmp rcx, 2
mov eax, 1
cmovae rax, rcx
lea rcx, [rsp + 0x30]
xor edx, edx
pxor xmm0, xmm0
mov r8, rdx
shl r8, 4
movdqu xmm1, xmmword [rbp + r8]
movdqa xmmword [rsp + 0x1e0], xmm1
movdqa xmmword [rsp + 0x160], xmm0
xor r9d, r9d
mov r10b, byte [rcx + r9]
xor r10b, byte [rsp + r9 + 0x1e0]
mov byte [rsp + r9 + 0x160], r10b
lea r10, [r9 + 1]
mov r9, r10
cmp r10, 0x10
jne 0x46cee8
inc rdx
movdqa xmm1, xmmword [rsp + 0x160]
mov r9, qword [rsp + 0x28]
movdqu xmmword [r9 + r8], xmm1
add rcx, 0x10
cmp rdx, rax
jne 0x46cec5
movaps xmm6, xmmword [rsp + 0x260]
movaps xmm7, xmmword [rsp + 0x270]
movaps xmm8, xmmword [rsp + 0x280]
movaps xmm9, xmmword [rsp + 0x290]
movaps xmm10, xmmword [rsp + 0x2a0]
movaps xmm11, xmmword [rsp + 0x2b0]
movaps xmm12, xmmword [rsp + 0x2c0]
movaps xmm13, xmmword [rsp + 0x2d0]
movaps xmm14, xmmword [rsp + 0x2e0]
movaps xmm15, xmmword [rsp + 0x2f0]
add rsp, 0x308
pop rbx
pop rbp
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
ret
lea r8, [0x005d7120]
mov edx, 8
call fcn.004292f0
ud2
lea rcx, str.assertion_failed:_blocks.len_____Self::ParBlocksSize::USIZE
lea r8, [0x005da940]
mov edx, 0x3b
call fcn.00426370
ud2