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

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x90
mov eax, dword [0x431de4]
push ebx
xor ebx, ebx
push esi
push edi
mov dword [ebp - 0x10], ebx
cmp eax, ebx
jne 0x4048f5
mov esi, dword [sym.imp.KERNEL32.dll_VirtualAlloc]
push 0x40
mov edi, 0x3000
push edi
push 0x10000
push ebx
call esi
mov dword [0x431ef4], eax
cmp eax, ebx
jne 0x4048cd
xor eax, eax
jmp 0x404a9f
push 4
push edi
push 0x5000
push ebx
call esi
mov dword [0x431ef8], eax
cmp eax, ebx
jne 0x4048fe
push 0x8000
push ebx
push dword [0x431ef4]
call dword [sym.imp.KERNEL32.dll_VirtualFree]
jmp 0x4048c6
cmp eax, 0x400
jl 0x404903
jmp 0x4048c6
mov eax, dword [0x431de4]
xor edx, edx
cmp eax, ebx
jle 0x40491b
mov ecx, dword [0x431ef8]
cmp dword [ecx], ebx
je 0x404927
inc edx
add ecx, 0x14
cmp edx, eax
jl 0x40490f
cmp eax, 0x400
jge 0x40492c
mov dword [ebp - 4], eax
jmp 0x404930
mov dword [ebp - 4], edx
jmp 0x404930
or dword [ebp - 4], 0xffffffff
cmp dword [ebp - 4], 0xffffffff
je 0x4048c6
mov esi, dword [ebp + 8]
push esi
call fcn.00404822
mov dword [ebp - 8], eax
cmp eax, 5
jge 0x404977
cmp dword [0x431de4], ebx
jne 0x4048c6
mov esi, dword [sym.imp.KERNEL32.dll_VirtualFree]
mov edi, 0x8000
push edi
push ebx
push dword [0x431ef4]
call esi
push edi
push ebx
push dword [0x431ef8]
call esi
jmp 0x4048c6
mov ebx, dword [ebp - 4]
lea edi, [ebp - 0x50]
mov ecx, eax
rep movsb byte es:[edi], byte [esi]
mov esi, dword [ebp + 8]
shl ebx, 6
add ebx, dword [0x431ef4]
mov ecx, esi
sub ecx, ebx
sub ecx, 5
mov dword [ebp + eax - 0x4f], ecx
push 5
lea edi, [ebp + eax - 0x4b]
pop ecx
mov byte [ebp + eax - 0x50], 0xe9
rep movsb byte es:[edi], byte [esi]
mov esi, dword [ebp - 0x10]
lea eax, [ebp + esi - 0x50]
cmp byte [eax], 0xe8
jne 0x4049bb
mov ecx, dword [ebp + 8]
sub ecx, ebx
add dword [ebp + esi - 0x4f], ecx
push 0
push eax
call section.code
add esi, eax
mov dword [ebp - 0x10], esi
cmp esi, dword [ebp - 8]
jl 0x4049a6
mov edi, dword [ebp + 8]
mov ecx, dword [ebp - 8]
mov esi, 0x40455b
mov eax, esi
sub eax, edi
sub eax, 5
mov dword [ebp - 0x8f], eax
mov eax, dword [ebp - 4]
imul eax, eax, 0x14
add eax, dword [0x431ef8]
inc dword [0x431de4]
lea edx, [ecx + 5]
mov dword [eax], esi
mov dword [eax + 8], edi
mov byte [eax + 0x12], 5
mov byte [eax + 0x11], dl
mov dword [eax + 4], ebx
add ecx, 0xa
lea esi, [ebp - 0x50]
mov edi, ebx
rep movsb byte es:[edi], byte [esi]
mov byte [ebp - 0x90], 0xe9
mov dword [0x431d14], ebx
call dword [sym.imp.KERNEL32.dll_GetCurrentThread]
mov ebx, eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetThreadPriority]
mov edi, dword [sym.imp.KERNEL32.dll_SetThreadPriority]
push 2
push ebx
mov dword [ebp - 8], eax
call edi
mov esi, dword [sym.imp.KERNEL32.dll_VirtualProtect]
lea eax, [ebp - 0xc]
push eax
push 0x40
push 5
push dword [ebp + 8]
call esi
test eax, eax
je 0x404a85
mov eax, dword [ebp + 8]
mov ecx, dword [ebp - 0x90]
mov edx, eax
xchg dword [edx], ecx
movzx edx, byte [ebp - 0x8c]
add eax, 4
mov ecx, dword [eax]
and ecx, 0xffffff00
add ecx, edx
xchg dword [eax], ecx
lea eax, [ebp - 0xc]
push eax
push dword [ebp - 0xc]
push 5
push dword [ebp + 8]
call esi
push dword [ebp - 8]
push ebx
call edi
push 0
push 0
call dword [sym.imp.KERNEL32.dll_GetCurrentProcess]
push eax
call dword [sym.imp.KERNEL32.dll_FlushInstructionCache]
xor eax, eax
inc eax
pop edi
pop esi
pop ebx
leave
ret 4