Function at 0x4faaa0
Capabilities:
Encode data using xor

Disassembly:
push r12
push rdi
push rsi
push rbx
sub rsp, 0x28
cmp dword [rcx + 0x88], 0xffffffff
mov rbx, rcx
mov r12, rdx
mov rdi, r8
je 0x4fac8b
mov rcx, qword [rcx]
call sym.EVP_CIPHER_CTX_get_block_size
mov esi, eax
test eax, eax
js 0x4fac8b
test rdi, rdi
je 0x4faadb
cdqe
mov qword [rdi], rax
test r12, r12
je 0x4fac6d
mov eax, dword [rbx + 0x88]
cmp esi, eax
je 0x4facc0
mov r8d, esi
movsxd rdx, eax
sub r8d, eax
mov byte [rbx + rdx + 0x68], pe_nt_image_headers64
cmp r8d, 1
jg 0x4faca0
test esi, esi
jle 0x4fac58
lea rdx, [rbx + 0x29]
mov rax, r12
lea ecx, [rsi - 1]
mov r9d, esi
sub rax, rdx
cmp rax, 0x4e
jbe 0x4fae48
cmp ecx, 6
jbe 0x4fae48
cmp ecx, 0xe
jbe 0x4fae93
movdqu xmm0, xmmword [rbx + 0x68]
movdqu xmm2, xmmword [rbx + 0x28]
mov eax, esi
shr eax, 4
pxor xmm0, xmm2
movups xmmword [r12], xmm0
cmp eax, 1
je 0x4fab6f
movdqu xmm0, xmmword [rbx + 0x78]
movdqu xmm4, xmmword [rbx + 0x38]
pxor xmm0, xmm4
movups xmmword [r12 + 0x10], xmm0
mov eax, esi
and eax, 0xfffffff0
mov edx, eax
cmp esi, eax
je 0x4fac58
mov r9d, esi
sub ecx, eax
sub r9d, eax
cmp ecx, 6
jbe 0x4fabb8
lea r8d, [rax + 0x68]
lea ecx, [rax + 0x28]
movq xmm0, qword [rbx + r8]
movq xmm1, qword [rbx + rcx]
pxor xmm0, xmm1
movq qword [r12 + rax], xmm0
mov eax, r9d
and eax, 0xfffffff8
add edx, eax
cmp eax, r9d
je 0x4fac58
movsxd rax, edx
movzx ecx, byte [rbx + rax + 0x68]
xor cl, byte [rbx + rax + 0x28]
mov byte [r12 + rax], cl
lea eax, [rdx + 1]
cmp esi, eax
jle 0x4fac58
cdqe
movzx ecx, byte [rbx + rax + 0x68]
xor cl, byte [rbx + rax + 0x28]
mov byte [r12 + rax], cl
lea eax, [rdx + 2]
cmp esi, eax
jle 0x4fac58
cdqe
movzx ecx, byte [rbx + rax + 0x68]
xor cl, byte [rbx + rax + 0x28]
mov byte [r12 + rax], cl
lea eax, [rdx + 3]
cmp esi, eax
jle 0x4fac58
cdqe
movzx ecx, byte [rbx + rax + 0x68]
xor cl, byte [rbx + rax + 0x28]
mov byte [r12 + rax], cl
lea eax, [rdx + 4]
cmp esi, eax
jle 0x4fac58
cdqe
movzx ecx, byte [rbx + rax + 0x68]
xor cl, byte [rbx + rax + 0x28]
mov byte [r12 + rax], cl
lea eax, [rdx + 5]
cmp esi, eax
jle 0x4fac58
cdqe
add edx, 6
movzx ecx, byte [rbx + rax + 0x68]
xor cl, byte [rbx + rax + 0x28]
mov byte [r12 + rax], cl
cmp esi, edx
jle 0x4fac58
movsxd rdx, edx
movzx eax, byte [rbx + rdx + 0x68]
xor al, byte [rbx + rdx + 0x28]
mov byte [r12 + rdx], al
nop dword [rax]
mov rcx, qword [rbx]
mov r9d, esi
mov r8, r12
mov rdx, r12
call sym.EVP_Cipher
test eax, eax
jle 0x4fac80
mov eax, 1
add rsp, 0x28
pop rbx
pop rsi
pop rdi
pop r12
ret
movsxd rdx, esi
mov rcx, r12
call sym.OPENSSL_cleanse
xor eax, eax
add rsp, 0x28
pop rbx
pop rsi
pop rdi
pop r12
ret
sub r8d, 1
lea rcx, [rbx + rdx + 0x69]
xor edx, edx
movsxd r8, r8d
call sym.memset
jmp 0x4fab0a
test esi, esi
jle 0x4fac58
lea rcx, [rbx + 9]
mov rdx, r12
lea r8d, [rsi - 1]
mov r10d, esi
sub rdx, rcx
cmp rdx, 0x6e
jbe 0x4fae70
cmp r8d, 6
jbe 0x4fae70
cmp r8d, 0xe
jbe 0x4fae9c
movdqu xmm0, xmmword [rbx + 0x68]
movdqu xmm3, xmmword [rbx + 8]
mov edx, esi
shr edx, 4
pxor xmm0, xmm3
movups xmmword [r12], xmm0
cmp edx, 1
jne 0x4fae28
mov edx, esi
and edx, 0xfffffff0
mov ecx, edx
cmp esi, edx
je 0x4fac58
mov r10d, esi
sub r8d, edx
sub r10d, edx
cmp r8d, 6
jbe 0x4fad61
lea r9d, [rdx + 0x68]
lea r8d, [rdx + 8]
movq xmm0, qword [rbx + r9]
movq xmm1, qword [rbx + r8]
pxor xmm0, xmm1
movq qword [r12 + rdx], xmm0
mov edx, r10d
and edx, 0xfffffff8
add ecx, edx
cmp edx, r10d
je 0x4fac58
movsxd rdx, ecx
movzx r8d, byte [rbx + rdx + 0x68]
xor r8b, byte [rbx + rdx + 8]
mov byte [r12 + rdx], r8b
lea edx, [rcx + 1]
cmp edx, eax
jge 0x4fac58
movsxd rdx, edx
movzx r8d, byte [rbx + rdx + 0x68]
xor r8b, byte [rbx + rdx + 8]
mov byte [r12 + rdx], r8b
lea edx, [rcx + 2]
cmp eax, edx
jle 0x4fac58
movsxd rdx, edx
movzx r8d, byte [rbx + rdx + 0x68]
xor r8b, byte [rbx + rdx + 8]
mov byte [r12 + rdx], r8b
lea edx, [rcx + 3]
cmp eax, edx
jle 0x4fac58
movsxd rdx, edx
movzx r8d, byte [rbx + rdx + 8]
xor r8b, byte [rbx + rdx + 0x68]
mov byte [r12 + rdx], r8b
lea edx, [rcx + 4]
cmp edx, eax
jge 0x4fac58
movsxd rdx, edx
movzx r8d, byte [rbx + rdx + 8]
xor r8b, byte [rbx + rdx + 0x68]
mov byte [r12 + rdx], r8b
lea edx, [rcx + 5]
cmp eax, edx
jle 0x4fac58
movsxd rdx, edx
add ecx, 6
movzx r8d, byte [rbx + rdx + 0x68]
xor r8b, byte [rbx + rdx + 8]
mov byte [r12 + rdx], r8b
cmp eax, ecx
jle 0x4fac58
movsxd rcx, ecx
movzx eax, byte [rbx + rcx + 0x68]
xor al, byte [rbx + rcx + 8]
mov byte [r12 + rcx], al
jmp 0x4fac58
movdqu xmm0, xmmword [rbx + 0x78]
movdqu xmm5, xmmword [rbx + 0x18]
pxor xmm0, xmm5
movups xmmword [r12 + 0x10], xmm0
jmp 0x4fad14
mov ecx, esi
xor eax, eax
nop dword [rax]
movzx edx, byte [rbx + rax + 0x68]
xor dl, byte [rbx + rax + 0x28]
mov byte [r12 + rax], dl
add rax, 1
cmp rcx, rax
jne 0x4fae50
jmp 0x4fac58
mov ecx, esi
xor eax, eax
nop dword [rax]
movzx edx, byte [rbx + rax + 8]
xor dl, byte [rbx + rax + 0x68]
mov byte [r12 + rax], dl
add rax, 1
cmp rcx, rax
jne 0x4fae78
jmp 0x4fac58
xor eax, eax
xor edx, edx
jmp 0x4fab8b
xor edx, edx
xor ecx, ecx
jmp 0x4fad32