Function at 0x591015
Capabilities:
Allocate or change rwx memory
Execute shellcode via indirect call
Read file on windows

Disassembly:
push dword [esp + 4]
pop dword [0x5922fa]
push ebp
mov ebp, esp
push dword [0x592014]
push eax
push ebx
push ecx
push edx
push esi
push edi
push str.shell32.dll
call sub.KERNEL32.dll_LoadLibraryA
mov dword [0x5922ea], 2
mov eax, 0x592312
mov dword [0x5922ee], eax
mov dword [0x592c1f], 0x58
test dword [0x592014], 0x20
jne 0x59107f
push dword [0x592c1f]
push str.Error__d
push 0x59273f
call sub.USER32.dll_wsprintfA
add esp, 0xc
jmp 0x5912ef
mov eax, 0x593046
mov dword [0x59200c], eax
mov dword [0x593046], 0x92
call fcn.00591827
mov dword [0x592c1f], 0x50
jb 0x5912b5
cmp eax, 0
mov dword [0x592c1f], 0x51
jne 0x59112c
cmp dword [0x592b74], 1
jne 0x591100
mov dword [0x592c1f], 0x51
push 0x59273f
push 0x592537
call sub.KERNEL32.dll_lstrcpy
push 0x592433
push 0x592537
push dword [0x592c1f]
push str.Error__d_r_n_s__specified_in__s__was_not_found.
push 0x59273f
call sub.USER32.dll_wsprintfA
add esp, 0x14
jmp 0x5912ef
mov dword [0x592c1f], 0x51
push 0x5928a8
push dword [0x592c1f]
push str.Error__d_r_n_s_was_not_found.
push 0x59273f
call sub.USER32.dll_wsprintfA
add esp, 0x10
jmp 0x5912ef
push 0x592537
push 0x592018
call sub.KERNEL32.dll_lstrcpy
push 0x40
push 0x1000
mov eax, dword [0x5929d8]
add eax, 0x10000
push eax
push 0
call sub.KERNEL32.dll_VirtualAlloc
cmp eax, 0
jne 0x591168
mov dword [0x592c1f], 0x52
jmp 0x5912b5
mov dword [0x592af6], eax
and eax, 0xffff0000
mov dword [0x592afa], eax
push 0
push 0
push 3
push 0
push 3
push 0x80000000
push 0x592537
call sub.KERNEL32.dll_CreateFileA
mov dword [0x592afe], eax
cmp eax, 0xffffffff
jne 0x5911a9
mov dword [0x592c1f], 0x53
jmp 0x59129a
push 0
push 0x592b56
push dword [0x5929d8]
push dword [0x592afa]
push dword [0x592afe]
call sub.KERNEL32.dll_ReadFile
cmp eax, 0
jne 0x5911db
mov dword [0x592c1f], 0x54
jmp 0x59129a
push dword [0x592afe]
call sub.KERNEL32.dll_CloseHandle
test dword [0x592014], 0x10000
je 0x591206
call fcn.00591b63
mov dword [0x592c1f], 0
jmp 0x59129a
push str.KERNEL32.DLL
call sub.KERNEL32.dll_LoadLibraryA
cmp eax, 0
jne 0x591221
mov dword [0x592c1f], 0x55
jmp 0x59129a
mov dword [0x592b1b], eax
push 0x592b1f
push eax
call sub.KERNEL32.dll_GetProcAddress
cmp eax, 0
jne 0x591242
mov dword [0x592c1f], 0x56
jmp 0x59129a
mov dword [0x592008], eax
push 0x592b2e
push dword [0x592b1b]
call sub.KERNEL32.dll_GetProcAddress
cmp eax, 0
jne 0x591268
mov dword [0x592c1f], 0x57
jmp 0x59129a
mov dword [0x592004], eax
or dword [0x592014], 8
mov eax, dword [0x592afa]
push section..data
add eax, dword [eax]
call eax
cmp eax, 0x2a3
jne 0x59128e
mov eax, 0
mov dword [0x592c1f], eax
mov byte [0x592c23], 1
push 0x4000
mov eax, dword [0x5929d8]
add eax, 0x10000
push eax
push dword [0x592af6]
call sub.KERNEL32.dll_VirtualFree
cmp dword [0x592c1f], 0
je 0x59130e
push 0x592537
push 0x59211d
push dword [0x592c1f]
push str.Error__d_s_accessing__s
push 0x59273f
call sub.USER32.dll_wsprintfA
add esp, 0x14
push str._r_nMore_details_can_be_found_at_www.copyminder.com_kb
push 0x59273f
call sub.KERNEL32.dll_lstrcat
test dword [0x592014], 0x10
jne 0x59130e
push 0
push str.Error
push 0x59273f
push 0
call sub.USER32.dll_MessageBoxA
cmp byte [0x592c23], 1
je 0x591317
pop edi
pop esi
pop edx
pop ecx
pop ebx
pop eax
push dword [0x592014]
pop dword [0x592b5e]
pop dword [0x592014]
pop ebp
mov eax, dword [0x592c1f]
cmp eax, 0x28f
je section..text
ret 4