Function at 0x140016090
Capabilities:
Allocate or change rwx memory
Execute shellcode via indirect call

Disassembly:
push rbx
push rdi
sub rsp, 0x38
mov qword [rsp + 0x60], rsi
mov r8d, 0x1000
mov qword [rsp + 0x68], r12
mov qword [rsp + 0x30], r13
mov r13, rcx
mov qword [rsp + 0x28], r14
movsxd r14, dword [rcx + 0x3c]
add r14, rcx
xor ecx, ecx
mov qword [rsp + 0x50], r14
mov edx, dword [r14 + 0x50]
lea r9d, [rcx + 0x40]
call qword [sym.imp.KERNEL32.dll_VirtualAlloc]
mov ebx, dword [r14 + 0x54]
mov rdi, rax
mov rax, qword [0x140224140]
test rax, rax
jne 0x140016107
lea rcx, [0x140022828]
call qword [sym.imp.KERNEL32.dll_GetModuleHandleA]
mov rcx, rax
lea rdx, [0x140022820]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [0x140224140], rax
mov r8, rbx
mov qword [rsp + 0x58], rbp
mov rdx, r13
mov rcx, rdi
call rax
movzx eax, word [r14 + 0x14]
xor r12d, r12d
cmp r12w, word [r14 + 6]
jae 0x1400161ec
lea rbx, [r14 + 0x28]
mov qword [rsp + 0x20], r15
add rbx, rax
nop word [rax + rax]
mov esi, dword [rbx - 4]
mov rax, qword [0x140224148]
add rsi, rdi
movsxd r14, dword [rbx - 8]
mov r15d, dword [rbx]
test rax, rax
jne 0x14001617d
lea rcx, [0x140022848]
call qword [sym.imp.KERNEL32.dll_GetModuleHandleA]
mov rcx, rax
lea rdx, [0x140022838]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [0x140224148], rax
mov rdx, r14
mov rcx, rsi
call rax
mov ebp, dword [rbx + 4]
mov rax, qword [0x140224140]
add rbp, r13
test rax, rax
jne 0x1400161bb
lea rcx, [0x140022828]
call qword [sym.imp.KERNEL32.dll_GetModuleHandleA]
mov rcx, rax
lea rdx, [0x140022820]
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [0x140224140], rax
cmp r14d, r15d
mov rdx, rbp
mov rcx, rsi
cmovl r15d, r14d
movsxd r8, r15d
call rax
mov r14, qword [rsp + 0x50]
inc r12d
add rbx, 0x28
movzx eax, word [r14 + 6]
cmp r12d, eax
jl 0x140016140
mov r15, qword [rsp + 0x20]
mov r11d, dword [r14 + 0xb0]
mov r10, rdi
sub r10, qword [r14 + 0x30]
add r11, rdi
movsxd rbx, dword [r14 + 0xb4]
mov r9, r11
mov r13, qword [rsp + 0x30]
mov r12, qword [rsp + 0x68]
test rbx, rbx
jle 0x140016262
mov esi, 0xf000
nop dword [rax + rax]
mov eax, dword [r9 + 4]
lea rdx, [r9 + 8]
sub rax, 8
shr rax, 1
test eax, eax
jle 0x140016257
mov r8d, eax
movzx eax, word [rdx]
test si, ax
je 0x14001624d
mov ecx, dword [r9]
and eax, 0xfff
add rax, rdi
add qword [rcx + rax], r10
add rdx, 2
sub r8, 1
jne 0x140016236
mov r9, rdx
sub rdx, r11
cmp rdx, rbx
jl 0x140016220
mov esi, dword [r14 + 0x90]
add rsi, rdi
mov eax, dword [rsi + 0xc]
test eax, eax
je 0x1400162ce
mov ecx, eax
add rcx, rdi
call qword [sym.imp.KERNEL32.dll_LoadLibraryA]
cmp dword [rsi + 4], 0
lea rcx, [rsi + 0x10]
mov rdx, rsi
mov rbp, rax
cmove rdx, rcx
mov ebx, dword [rdx]
add rbx, rdi
mov rcx, qword [rbx]
test rcx, rcx
je 0x1400162c3
jns 0x1400162a4
movzx edx, cx
jmp 0x1400162ab
lea rdx, [rdi + 2]
add rdx, rcx
mov rcx, rbp
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov qword [rbx], rax
add rbx, 8
mov rcx, qword [rbx]
test rcx, rcx
jne 0x14001629d
mov eax, dword [rsi + 0x20]
add rsi, 0x14
test eax, eax
jne 0x140016273
mov ebx, dword [r14 + 0x50]
call qword [sym.imp.KERNEL32.dll_GetCurrentProcess]
mov r8d, ebx
mov rdx, rdi
mov rcx, rax
call qword [sym.imp.KERNEL32.dll_FlushInstructionCache]
mov eax, dword [r14 + 0x28]
mov r14, qword [rsp + 0x28]
mov rsi, qword [rsp + 0x60]
mov rbp, qword [rsp + 0x58]
test eax, eax
je 0x14001631d
mov ebx, eax
add rbx, rdi
je 0x14001631d
xor r8d, r8d
mov rcx, rdi
lea edx, [r8 + 1]
call rbx
xor r8d, r8d
mov rcx, rdi
lea edx, [r8 + 2]
call rbx
mov rax, rdi
add rsp, 0x38
pop rdi
pop rbx
ret