Function at 0x1400409a0
Capabilities:
Allocate or change rwx memory
Create thread
Inject thread
Parse pe header
Spawn thread to rwx shellcode

Disassembly:
mov qword [rsp + 0x10], rbx
mov qword [rsp + 0x18], rbp
mov qword [rsp + 0x20], rsi
push rdi
push r14
push r15
sub rsp, 0x90
mov rax, qword [0x1400ef0c0]
xor rax, rsp
mov qword [rsp + 0x80], rax
mov eax, 0x5a4d
lea r14, [0x1401a6f40]
cmp word [0x1401a6f40], ax
mov rdi, rcx
je 0x140040a08
xor edx, edx
mov r8d, 0x8000
mov rcx, r14
call qword [sym.imp.KERNEL32.dll_VirtualFree]
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, eax
mov ecx, 0x9f
call fcn.140040660
movsxd rbx, dword [0x1401a6f7c]
add rbx, r14
cmp dword [rbx], 0x4550
je 0x140040a3d
xor edx, edx
mov r8d, 0x8000
mov rcx, r14
call qword [sym.imp.KERNEL32.dll_VirtualFree]
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, eax
mov ecx, 0xa7
call fcn.140040660
mov eax, 0x2000
test word [rbx + 0x16], ax
jne 0x140040a6b
xor edx, edx
mov r8d, 0x8000
mov rcx, r14
call qword [sym.imp.KERNEL32.dll_VirtualFree]
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, eax
mov ecx, 0xad
call fcn.140040660
mov r8d, edi
xor edx, edx
mov ecx, 0x1fffff
call qword [sym.imp.KERNEL32.dll_OpenProcess]
mov rdi, rax
test rax, rax
jne 0x140040a95
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, eax
mov ecx, 0xb2
call fcn.140040660
mov r8d, dword [rbx + 0x50]
xor edx, edx
mov r9d, 0x1000
mov dword [rsp + 0x20], 0x40
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_VirtualAllocEx]
mov rbp, rax
test rax, rax
jne 0x140040acc
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, eax
mov ecx, 0xb6
call fcn.140040660
mov r9d, dword [rbx + 0x54]
xor r15d, r15d
mov r8, r14
mov qword [rsp + 0x20], r15
mov rdx, rbp
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_WriteProcessMemory]
test eax, eax
jne 0x140040b2c
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, eax
mov ecx, 0xba
call fcn.140040660
mov r9d, 0x8000
xor r8d, r8d
mov rdx, rbp
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_VirtualFreeEx]
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_CloseHandle]
xor edx, edx
mov r8d, 0x8000
mov rcx, r14
call qword [sym.imp.KERNEL32.dll_VirtualFree]
mov esi, r15d
cmp r15w, word [rbx + 6]
jae 0x140040b7b
nop word [rax + rax]
mov eax, esi
mov qword [rsp + 0x20], r15
lea rcx, [rax + rax*4]
mov r8d, dword [rbx + rcx*8 + 0x11c]
mov edx, dword [rbx + rcx*8 + 0x114]
add r8, r14
mov r9d, dword [rbx + rcx*8 + 0x118]
add rdx, rbp
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_WriteProcessMemory]
movzx eax, word [rbx + 6]
inc esi
cmp esi, eax
jb 0x140040b40
xor edx, edx
mov dword [rsp + 0x20], 0x40
mov r9d, 0x3000
mov r8d, 0x1000
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_VirtualAllocEx]
mov rsi, rax
test rax, rax
jne 0x140040be3
mov r9d, 0x8000
xor r8d, r8d
mov rdx, rbp
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_VirtualFreeEx]
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_CloseHandle]
xor edx, edx
mov r8d, 0x8000
mov rcx, r14
call qword [sym.imp.KERNEL32.dll_VirtualFree]
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, eax
mov ecx, 0xcc
call fcn.140040660
movsxd rax, dword [0x1401a6f7c]
lea r8, [rsp + 0x40]
add rax, rbp
mov qword [rsp + 0x48], r15
mov qword [rsp + 0x50], rax
mov r9d, Ordinal_60
mov qword [rsp + 0x40], rbp
mov rdx, rsi
mov eax, dword [rbx + 0xb0]
mov rcx, rdi
add rax, rbp
mov qword [rsp + 0x20], r15
mov qword [rsp + 0x58], rax
mov eax, dword [rbx + 0x90]
add rax, rbp
mov qword [rsp + 0x60], rax
mov rax, qword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov qword [rsp + 0x68], rax
mov rax, qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rsp + 0x70], rax
call qword [sym.imp.KERNEL32.dll_WriteProcessMemory]
lea r8, [0x140040500]
mov qword [rsp + 0x20], r15
lea r9, [fcn.140040650]
mov rcx, rdi
sub r9, r8
lea rdx, [rsi + 0x38]
call qword [sym.imp.KERNEL32.dll_WriteProcessMemory]
mov qword [rsp + 0x30], r15
lea r9, [rsi + 0x38]
mov dword [rsp + 0x28], r15d
xor r8d, r8d
xor edx, edx
mov qword [rsp + 0x20], rsi
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_CreateRemoteThread]
mov rbx, rax
test rax, rax
jne 0x140040cc8
mov r9d, 0x8000
xor r8d, r8d
mov rdx, rsi
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_VirtualFreeEx]
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_CloseHandle]
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov edx, eax
mov ecx, 0xdf
call fcn.140040660
mov edx, 0xffffffff
mov rcx, rbx
call qword [sym.imp.KERNEL32.dll_WaitForSingleObject]
lea rdx, [rsp + 0x78]
mov rcx, rbx
call qword [sym.imp.KERNEL32.dll_GetExitCodeThread]
mov rcx, rbx
call qword [sym.imp.KERNEL32.dll_CloseHandle]
mov r9d, 0x8000
xor r8d, r8d
mov rdx, rsi
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_VirtualFreeEx]
mov rcx, rdi
call qword [sym.imp.KERNEL32.dll_CloseHandle]
xor edx, edx
mov r8d, 0x8000
mov rcx, r14
call qword [sym.imp.KERNEL32.dll_VirtualFree]
mov al, 1
mov rcx, qword [rsp + 0x80]
xor rcx, rsp
call fcn.1400cd290
lea r11, [rsp + 0x90]
mov rbx, qword [r11 + 0x28]
mov rbp, qword [r11 + 0x30]
mov rsi, qword [r11 + 0x38]
mov rsp, r11
pop r15
pop r14
pop rdi
ret