Function at 0x57f5e8
Capabilities:
Allocate or change rwx memory
Execute shellcode via indirect call
Parse pe header

Disassembly:
push ebp
mov ebp, esp
add esp, 0xffffffa0
push ebx
push esi
push edi
mov esi, dword [ebp + 8]
xor eax, eax
mov dword [ebp - 4], eax
test esi, esi
je 0x57f8c4
mov eax, esi
cmp word [eax], 0x5a4d
jne 0x57f8c4
mov eax, dword [eax + 0x3c]
add eax, esi
mov dword [ebp - 0x10], eax
mov eax, dword [ebp - 0x10]
cmp dword [eax], 0x4550
jne 0x57f8c4
test byte [eax + 0x17], 0x20
je 0x57f8c4
push 4
push 0x1000
mov eax, dword [ebp - 0x10]
mov eax, dword [eax + 0x50]
push eax
mov eax, dword [ebp - 0x10]
mov eax, dword [eax + 0x34]
push eax
call sub.kernel32.dll_VirtualAlloc_1
mov dword [ebp - 8], eax
cmp dword [ebp - 8], 0
jne 0x57f674
push 0x40
push 0x3000
mov eax, dword [ebp - 0x10]
mov eax, dword [eax + 0x50]
push eax
push 0
call sub.kernel32.dll_VirtualAlloc_1
mov dword [ebp - 8], eax
cmp dword [ebp - 8], 0
je 0x57f8c4
mov eax, dword [ebp - 0x10]
mov ecx, dword [eax + 0x54]
mov edx, esi
mov eax, dword [ebp - 8]
call fcn.00407e98
mov edx, dword [ebp - 0x10]
mov edx, dword [edx + 0x28]
mov eax, dword [ebp - 8]
add edx, eax
mov dword [ebp - 0xc], edx
mov edx, dword [ebp - 0x10]
mov edx, dword [edx + 0xa0]
add edx, eax
mov dword [ebp - 0x28], edx
mov edx, dword [ebp - 0x10]
mov edx, dword [edx + 0xa4]
mov dword [ebp - 0x30], edx
mov edx, dword [ebp - 0x10]
mov ecx, eax
sub ecx, dword [edx + 0x34]
mov dword [ebp - 0x3c], ecx
mov edx, dword [ebp - 0x10]
mov edx, dword [edx + 0x80]
add edx, eax
mov dword [ebp - 0x4c], edx
mov eax, dword [ebp - 0x10]
mov eax, dword [eax + 0x84]
mov dword [ebp - 0x50], eax
mov eax, dword [ebp - 0x10]
movzx ebx, word [eax + 6]
dec ebx
test ebx, ebx
jl 0x57f723
inc ebx
mov dword [ebp - 0x18], 0
mov eax, dword [ebp - 0x10]
add eax, 0xf8
mov edx, dword [ebp - 0x18]
shl edx, 3
lea edx, [edx + edx*4]
add eax, edx
mov dword [ebp - 0x14], eax
mov eax, dword [ebp - 0x14]
mov edx, dword [eax + 0xc]
add edx, dword [ebp - 8]
mov dword [ebp - 0x1c], edx
mov edx, dword [eax + 0x14]
add edx, esi
mov dword [ebp - 0x20], edx
mov ecx, dword [eax + 0x10]
mov edx, dword [ebp - 0x20]
mov eax, dword [ebp - 0x1c]
call fcn.00407e98
inc dword [ebp - 0x18]
dec ebx
jne 0x57f6e5
cmp dword [ebp - 0x50], 0
jbe 0x57f80a
cmp dword [ebp - 0x4c], 0
je 0x57f80a
xor eax, eax
mov dword [ebp - 0x54], eax
mov eax, dword [ebp - 0x4c]
mov dword [ebp - 0x48], eax
jmp 0x57f7fc
add edi, dword [ebp - 8]
mov dword [ebp - 0x5c], edi
mov eax, dword [ebp - 0x5c]
push eax
call sub.kernel32.dll_GetModuleHandleA_2
mov esi, eax
test esi, esi
jne 0x57f767
mov eax, dword [ebp - 0x5c]
push eax
call sub.kernel32.dll_LoadLibraryA
mov esi, eax
test esi, esi
jbe 0x57f8c4
mov eax, dword [ebp - 0x48]
cmp dword [eax + 0x10], 0
jbe 0x57f786
mov eax, dword [ebp - 0x48]
mov eax, dword [eax + 0x10]
add eax, dword [ebp - 8]
mov dword [ebp - 0x54], eax
jmp 0x57f7ea
mov eax, dword [ebp - 0x48]
cmp dword [eax], 0
jbe 0x57f8c4
mov eax, dword [ebp - 0x48]
mov eax, dword [eax]
add eax, dword [ebp - 8]
mov dword [ebp - 0x54], eax
jmp 0x57f7ea
test ebx, 0x80000000
jbe 0x57f7b9
and ebx, 0xffff
push ebx
push esi
call sub.kernel32.dll_GetProcAddress_1
mov dword [ebp - 0x60], eax
jmp 0x57f7cf
add ebx, dword [ebp - 8]
mov dword [ebp - 0x58], ebx
mov eax, dword [ebp - 0x58]
add eax, 2
push eax
push esi
call sub.kernel32.dll_GetProcAddress_1
mov dword [ebp - 0x60], eax
cmp dword [ebp - 0x60], 0
je 0x57f8c4
mov eax, dword [ebp - 0x54]
mov edx, dword [ebp - 0x60]
mov dword [eax], edx
mov eax, dword [ebp - 0x54]
add eax, 4
mov dword [ebp - 0x54], eax
mov eax, dword [ebp - 0x54]
mov ebx, dword [eax]
test ebx, ebx
jne 0x57f79f
mov eax, dword [ebp - 0x48]
add eax, 0x14
mov dword [ebp - 0x48], eax
mov eax, dword [ebp - 0x48]
mov edi, dword [eax + 0xc]
test edi, edi
jne 0x57f747
cmp dword [ebp - 0x30], 0
jbe 0x57f8af
cmp dword [ebp - 0x28], 0
je 0x57f8af
mov eax, dword [ebp - 0x28]
mov dword [ebp - 0x24], eax
jmp 0x57f89a
mov eax, dword [ebp - 0x24]
mov eax, dword [eax]
add eax, dword [ebp - 8]
mov dword [ebp - 0x2c], eax
mov eax, dword [ebp - 0x24]
add eax, 8
mov dword [ebp - 0x40], eax
mov eax, dword [ebp - 0x24]
mov eax, dword [eax + 4]
sub eax, 8
shr eax, 1
dec eax
mov dword [ebp - 0x34], eax
cmp dword [ebp - 0x34], 0
jle 0x57f88e
mov ebx, dword [ebp - 0x34]
test ebx, ebx
jb 0x57f88e
inc ebx
mov eax, dword [ebp - 0x40]
mov dx, word [eax]
movzx eax, dx
shr eax, 0xc
mov esi, edx
and si, 0xfff
movzx esi, si
cmp eax, 3
jne 0x57f882
mov eax, dword [ebp - 0x2c]
add eax, esi
mov dword [ebp - 0x44], eax
mov eax, dword [ebp - 0x44]
mov edx, dword [ebp - 0x3c]
add dword [eax], edx
mov eax, dword [ebp - 0x40]
add eax, 2
mov dword [ebp - 0x40], eax
dec ebx
jne 0x57f857
mov eax, dword [ebp - 0x24]
mov eax, dword [eax + 4]
add eax, dword [ebp - 0x24]
mov dword [ebp - 0x24], eax
mov eax, dword [ebp - 0x24]
cmp dword [eax], 0
jbe 0x57f8af
mov eax, dword [ebp - 0x24]
cmp dword [eax + 4], 0
ja 0x57f826
push 0
push 1
mov eax, dword [ebp - 8]
push eax
call dword [ebp - 0xc]
test eax, eax
je 0x57f8c4
mov eax, dword [ebp - 8]
mov dword [ebp - 4], eax
mov eax, dword [ebp - 4]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 4