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

Disassembly:
push dword [esp + 4]
pop dword [0x6052fa]
push ebp
mov ebp, esp
push dword [0x605014]
push eax
push ebx
push ecx
push edx
push esi
push edi
push str.shell32.dll
call sub.KERNEL32.dll_LoadLibraryA
mov dword [0x6052ea], 2
mov eax, 0x605312
mov dword [0x6052ee], eax
mov dword [0x605c1f], 0x58
test dword [0x605014], 0x20
jne 0x60407f
push dword [0x605c1f]
push str.Error__d
push 0x60573f
call sub.USER32.dll_wsprintfA
add esp, 0xc
jmp 0x6042ef
mov eax, 0x606046
mov dword [0x60500c], eax
mov dword [0x606046], 0x92
call fcn.00604827
mov dword [0x605c1f], 0x50
jb 0x6042b5
cmp eax, 0
mov dword [0x605c1f], 0x51
jne 0x60412c
cmp dword [0x605b74], 1
jne 0x604100
mov dword [0x605c1f], 0x51
push 0x60573f
push 0x605537
call sub.KERNEL32.dll_lstrcpy
push 0x605433
push 0x605537
push dword [0x605c1f]
push str.Error__d_r_n_s__specified_in__s__was_not_found.
push 0x60573f
call sub.USER32.dll_wsprintfA
add esp, 0x14
jmp 0x6042ef
mov dword [0x605c1f], 0x51
push 0x6058a8
push dword [0x605c1f]
push str.Error__d_r_n_s_was_not_found.
push 0x60573f
call sub.USER32.dll_wsprintfA
add esp, 0x10
jmp 0x6042ef
push 0x605537
push 0x605018
call sub.KERNEL32.dll_lstrcpy
push 0x40
push 0x1000
mov eax, dword [0x6059d8]
add eax, 0x10000
push eax
push 0
call sub.KERNEL32.dll_VirtualAlloc
cmp eax, 0
jne 0x604168
mov dword [0x605c1f], 0x52
jmp 0x6042b5
mov dword [0x605af6], eax
and eax, 0xffff0000
mov dword [0x605afa], eax
push 0
push 0
push 3
push 0
push 3
push 0x80000000
push 0x605537
call sub.KERNEL32.dll_CreateFileA
mov dword [0x605afe], eax
cmp eax, 0xffffffff
jne 0x6041a9
mov dword [0x605c1f], 0x53
jmp 0x60429a
push 0
push 0x605b56
push dword [0x6059d8]
push dword [0x605afa]
push dword [0x605afe]
call sub.KERNEL32.dll_ReadFile
cmp eax, 0
jne 0x6041db
mov dword [0x605c1f], 0x54
jmp 0x60429a
push dword [0x605afe]
call sub.KERNEL32.dll_CloseHandle
test dword [0x605014], 0x10000
je 0x604206
call fcn.00604b63
mov dword [0x605c1f], 0
jmp 0x60429a
push str.KERNEL32.DLL
call sub.KERNEL32.dll_LoadLibraryA
cmp eax, 0
jne 0x604221
mov dword [0x605c1f], 0x55
jmp 0x60429a
mov dword [0x605b1b], eax
push 0x605b1f
push eax
call sub.KERNEL32.dll_GetProcAddress
cmp eax, 0
jne 0x604242
mov dword [0x605c1f], 0x56
jmp 0x60429a
mov dword [0x605008], eax
push 0x605b2e
push dword [0x605b1b]
call sub.KERNEL32.dll_GetProcAddress
cmp eax, 0
jne 0x604268
mov dword [0x605c1f], 0x57
jmp 0x60429a
mov dword [0x605004], eax
or dword [0x605014], 8
mov eax, dword [0x605afa]
push section..data
add eax, dword [eax]
call eax
cmp eax, 0x2a3
jne 0x60428e
mov eax, 0
mov dword [0x605c1f], eax
mov byte [0x605c23], 1
push 0x4000
mov eax, dword [0x6059d8]
add eax, 0x10000
push eax
push dword [0x605af6]
call sub.KERNEL32.dll_VirtualFree
cmp dword [0x605c1f], 0
je 0x60430e
push 0x605537
push 0x60511d
push dword [0x605c1f]
push str.Error__d_s_accessing__s
push 0x60573f
call sub.USER32.dll_wsprintfA
add esp, 0x14
push str._r_nMore_details_can_be_found_at_www.copyminder.com_kb
push 0x60573f
call sub.KERNEL32.dll_lstrcat
test dword [0x605014], 0x10
jne 0x60430e
push 0
push str.Error
push 0x60573f
push 0
call sub.USER32.dll_MessageBoxA
cmp byte [0x605c23], 1
je 0x604317
pop edi
pop esi
pop edx
pop ecx
pop ebx
pop eax
push dword [0x605014]
pop dword [0x605b5e]
pop dword [0x605014]
pop ebp
mov eax, dword [0x605c1f]
cmp eax, 0x28f
je section..text
ret 4