Function at 0x180029c30
Capabilities:
Encode data using xor
Encrypt data using rc4 prga

Disassembly:
push rbp
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbx
sub rsp, 0x88
lea rbp, [rsp + 0x80]
mov qword [rbp], 0xfffffffffffffffe
mov qword [rbp - 8], r8
cmp rdx, 2
jb 0x18002a181
mov rdi, rdx
lea rax, [rdx + 0x10]
cmp rax, r9
ja 0x18002a19a
mov rbx, rdi
shr rbx, 1
mov r12, rbx
shl r12, 5
lea r15, [rcx + r12]
mov rdx, qword [rbp - 8]
lea r14, [rdx + r12]
cmp rdi, 7
mov qword [rbp - 0x20], r15
mov qword [rbp - 0x50], r14
jbe 0x180029cbe
mov rsi, rcx
mov rdx, qword [rbp - 8]
call fcn.180028ec0
mov rcx, r15
mov rdx, r14
call fcn.180028ec0
mov rcx, rsi
mov rdx, qword [rbp - 8]
mov r8d, 4
jmp 0x180029ce4
movups xmm0, xmmword [rcx]
movups xmm1, xmmword [rcx + 0x10]
movups xmmword [rdx + 0x10], xmm1
movups xmmword [rdx], xmm0
movups xmm0, xmmword [r15]
movups xmm1, xmmword [r15 + 0x10]
movups xmmword [r14 + 0x10], xmm1
movups xmmword [r14], xmm0
mov r8d, 1
mov qword [rbp - 0x28], rcx
mov qword [rbp - 0x40], rdi
sub rdi, rbx
mov qword [rbp - 0x48], rdi
mov qword [rbp - 0x30], rbx
mov qword [rbp - 0x10], r8
cmp r8, rbx
jae 0x180029e7a
mov rsi, qword [rbp - 0x10]
mov eax, esi
shl eax, 5
mov qword [rbp - 0x18], rax
jmp 0x180029d5e
mov rax, rdx
mov rcx, qword [rbp - 0x58]
mov qword [rax], rcx
mov qword [rdx + r13 - 0x18], r14
mov qword [rdx + r13 - 0x10], rbx
mov byte [rdx + r13 - 8], r15b
mov rcx, qword [rbp - 0x38]
mov eax, dword [rcx]
mov ecx, dword [rcx + 3]
mov dword [rdx + r13 - 7], eax
mov dword [rdx + r13 - 4], ecx
inc rsi
add qword [rbp - 0x18], 0x20
cmp rsi, qword [rbp - 0x30]
je 0x180029e7a
mov r13, rsi
shl r13, 5
mov rax, qword [rbp - 0x28]
movups xmm0, xmmword [rax + r13]
movups xmm1, xmmword [rax + r13 + 0x10]
movups xmmword [rdx + r13], xmm0
movups xmmword [rdx + r13 + 0x10], xmm1
mov r14, qword [rdx + r13 + 8]
mov rbx, qword [rdx + r13 + 0x10]
mov rax, qword [rbp - 8]
mov rdx, qword [rax + r13 - 0x18]
mov rax, qword [rbp - 8]
mov r8, qword [rax + r13 - 0x10]
mov rdi, rbx
sub rdi, r8
cmovb r8, rbx
mov rcx, r14
call sub.VCRUNTIME140.dll_memcmp
mov rdx, qword [rbp - 8]
cdqe
test eax, eax
cmovne rdi, rax
movzx r15d, byte [rdx + r13 + 0x18]
mov eax, r15d
sub al, byte [rdx + r13 - 8]
xor ecx, ecx
cmp al, 0xff
sete cl
xor eax, eax
test rdi, rdi
sets al
cmovne ecx, eax
cmp cl, 1
jne 0x180029d4c
mov rax, qword [rbp - 0x28]
add rax, r13
add r13, rdx
mov rcx, qword [r13]
mov qword [rbp - 0x58], rcx
add rax, 0x19
mov qword [rbp - 0x38], rax
mov rax, qword [rbp - 0x18]
mov r13, rax
movups xmm0, xmmword [rdx + rax - 0x20]
movups xmm1, xmmword [rdx + rax - 0x10]
movups xmmword [rdx + rax + 0x10], xmm1
movups xmmword [rdx + rax], xmm0
cmp rax, 0x20
je 0x180029d20
mov rax, qword [rbp - 8]
mov rdx, qword [rax + r13 - 0x38]
mov rax, qword [rbp - 8]
mov r8, qword [rax + r13 - 0x30]
mov rdi, rbx
sub rdi, r8
cmovb r8, rbx
mov rcx, r14
call sub.VCRUNTIME140.dll_memcmp
mov rdx, qword [rbp - 8]
cdqe
test eax, eax
cmovne rdi, rax
mov eax, r15d
sub al, byte [rdx + r13 - 0x28]
xor ecx, ecx
cmp al, 0xff
sete cl
xor eax, eax
test rdi, rdi
sets al
cmovne ecx, eax
lea rax, [r13 - 0x20]
test cl, cl
jne 0x180029e00
add rax, rdx
jmp 0x180029d23
mov r15, qword [rbp - 0x10]
cmp r15, qword [rbp - 0x48]
jae 0x180029ff1
add r12, qword [rbp - 8]
mov r13d, r15d
shl r13d, 5
jmp 0x180029ee1
mov rax, r12
mov rcx, qword [rbp - 0x38]
mov qword [rax], rcx
mov qword [r12 + r15 - 0x18], r14
mov qword [r12 + r15 - 0x10], rsi
mov byte [r12 + r15 - 8], bl
mov rcx, qword [rbp - 0x18]
mov eax, dword [rcx]
mov ecx, dword [rcx + 3]
mov dword [r12 + r15 - 7], eax
mov dword [r12 + r15 - 4], ecx
mov r15, qword [rbp - 0x10]
inc r15
add r13, 0x20
cmp r15, qword [rbp - 0x48]
je 0x180029ff1
mov qword [rbp - 0x10], r15
shl r15, 5
mov rax, qword [rbp - 0x20]
movups xmm0, xmmword [rax + r15]
movups xmm1, xmmword [rax + r15 + 0x10]
movups xmmword [r12 + r15], xmm0
movups xmmword [r12 + r15 + 0x10], xmm1
mov r14, qword [r12 + r15 + 8]
mov rsi, qword [r12 + r15 + 0x10]
mov rdx, qword [r12 + r15 - 0x18]
mov r8, qword [r12 + r15 - 0x10]
mov rdi, rsi
sub rdi, r8
cmovb r8, rsi
mov rcx, r14
call sub.VCRUNTIME140.dll_memcmp
cdqe
test eax, eax
cmovne rdi, rax
movzx ebx, byte [r12 + r15 + 0x18]
mov eax, ebx
sub al, byte [r12 + r15 - 8]
xor ecx, ecx
cmp al, 0xff
sete cl
xor eax, eax
test rdi, rdi
sets al
cmovne ecx, eax
cmp cl, 1
jne 0x180029ecc
mov rax, qword [rbp - 0x20]
add rax, r15
add r15, r12
mov rcx, qword [r15]
mov qword [rbp - 0x38], rcx
add rax, 0x19
mov qword [rbp - 0x18], rax
mov rax, r13
nop word cs:[rax + rax]
mov r15, rax
movups xmm0, xmmword [r12 + rax - 0x20]
movups xmm1, xmmword [r12 + rax - 0x10]
movups xmmword [r12 + rax + 0x10], xmm1
movups xmmword [r12 + rax], xmm0
cmp rax, 0x20
je 0x180029ea0
mov rdx, qword [r12 + r15 - 0x38]
mov r8, qword [r12 + r15 - 0x30]
mov rdi, rsi
sub rdi, r8
cmovb r8, rsi
mov rcx, r14
call sub.VCRUNTIME140.dll_memcmp
cdqe
test eax, eax
cmovne rdi, rax
mov eax, ebx
sub al, byte [r12 + r15 - 0x28]
xor ecx, ecx
cmp al, 0xff
sete cl
xor eax, eax
test rdi, rdi
sets al
cmovne ecx, eax
lea rax, [r15 - 0x20]
test cl, cl
jne 0x180029f80
add rax, r12
jmp 0x180029ea3
mov r9, qword [rbp - 0x50]
lea r12, [r9 - 0x20]
mov rdx, qword [rbp - 0x40]
shl rdx, 5
mov rax, qword [rbp - 8]
lea rbx, [rax + rdx]
add rbx, 0xffffffffffffffe0
mov rsi, qword [rbp - 0x28]
mov qword [rbp - 0x20], rdx
lea r8, [rsi + rdx]
add r8, 0xffffffffffffffe0
mov rcx, qword [rbp - 0x30]
nop word cs:[rax + rax]
mov qword [rbp - 0x30], rcx
mov qword [rbp - 0x10], r8
mov r15, r9
mov r13, rax
mov rcx, qword [r9 + 8]
mov rax, qword [r9 + 0x10]
mov rdx, qword [r13 + 8]
mov r8, qword [r13 + 0x10]
mov r14, rax
sub r14, r8
cmovb r8, rax
call sub.VCRUNTIME140.dll_memcmp
cdqe
test eax, eax
cmovne r14, rax
movzx eax, byte [r15 + 0x18]
sub al, byte [r13 + 0x18]
xor edi, edi
cmp al, 0xff
sete dil
xor eax, eax
test r14, r14
sets al
cmovne edi, eax
test dil, dil
mov rax, r13
cmovne rax, r15
movups xmm0, xmmword [rax]
movups xmm1, xmmword [rax + 0x10]
movups xmmword [rsi + 0x10], xmm1
movups xmmword [rsi], xmm0
mov rcx, qword [rbx + 8]
mov rax, qword [rbx + 0x10]
mov rdx, qword [r12 + 8]
mov r8, qword [r12 + 0x10]
mov r14, rax
sub r14, r8
cmovb r8, rax
call sub.VCRUNTIME140.dll_memcmp
mov r8, qword [rbp - 0x10]
cdqe
test eax, eax
cmovne r14, rax
add rsi, 0x20
movzx r9d, dil
xor dil, 1
movzx eax, dil
shl eax, 5
add rax, r13
shl r9d, 5
add r9, r15
movzx ecx, byte [rbx + 0x18]
sub cl, byte [r12 + 0x18]
xor edx, edx
cmp cl, 0xff
sete dl
xor ecx, ecx
test r14, r14
sets cl
cmovne edx, ecx
test dl, dl
mov rcx, rbx
cmovne rcx, r12
movups xmm0, xmmword [rcx]
movups xmm1, xmmword [rcx + 0x10]
movups xmmword [r8 + 0x10], xmm1
movups xmmword [r8], xmm0
movzx ecx, dl
shl ecx, 5
add rbx, rcx
add rbx, 0xffffffffffffffe0
sub r12, rcx
mov rcx, qword [rbp - 0x30]
add r8, 0xffffffffffffffe0
dec rcx
jne 0x18002a030
add r12, 0x20
test byte [rbp - 0x40], 1
je 0x18002a173
xor ecx, ecx
xor edx, edx
cmp rax, r12
setae cl
setb dl
mov r8, r9
cmovb r8, rax
movups xmm0, xmmword [r8]
movups xmm1, xmmword [r8 + 0x10]
movups xmmword [rsi + 0x10], xmm1
movups xmmword [rsi], xmm0
shl edx, 5
add rax, rdx
shl ecx, 5
add r9, rcx
cmp rax, r12
jne 0x18002a195
add rbx, 0x20
cmp r9, rbx
jne 0x18002a195
add rsp, 0x88
pop rbx
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
call fcn.18010d910
ud2