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

Disassembly:
push ebp
mov ebp, esp
sub esp, 0xc4
mov eax, dword [0x10011380]
xor eax, ebp
mov dword [ebp - 4], eax
mov dword [ebp - 0x58], 0
mov dword [ebp - 0x94], 0
mov dword [ebp - 0x6c], 0
mov dword [ebp - 0x54], 0
mov eax, dword [ebp + 0xc]
movzx ecx, word [eax]
cmp ecx, 0x5a4d
je 0x10004654
push str.Invalid_file_n
call fcn.10001eb0
add esp, 4
xor al, al
jmp 0x10005028
mov edx, dword [ebp + 0xc]
mov eax, dword [ebp + 0xc]
add eax, dword [edx + 0x3c]
mov dword [ebp - 0x58], eax
mov ecx, dword [ebp - 0x58]
add ecx, 0x18
mov dword [ebp - 0x94], ecx
mov edx, dword [ebp - 0x58]
add edx, 4
mov dword [ebp - 0x6c], edx
mov eax, dword [ebp - 0x6c]
movzx ecx, word [eax]
cmp ecx, 0x14c
je 0x10004697
push str.Invalid_platform_n
call fcn.10001eb0
add esp, 4
xor al, al
jmp 0x10005028
push str.File_ok_n
call fcn.10001eb0
add esp, 4
push 4
push 0x3000
mov edx, dword [ebp - 0x94]
mov eax, dword [edx + 0x38]
push eax
push 0
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.KERNEL32.dll_VirtualAllocEx]
mov dword [ebp - 0x54], eax
cmp dword [ebp - 0x54], 0
jne 0x100046e5
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.Target_process_memory_allocation_failed__ex__0x_X_n
call fcn.10001eb0
add esp, 8
xor al, al
jmp 0x10005028
mov dword [ebp - 0x14], 0
lea edx, [ebp - 0x14]
push edx
push 0x40
mov eax, dword [ebp - 0x94]
mov ecx, dword [eax + 0x38]
push ecx
mov edx, dword [ebp - 0x54]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_VirtualProtectEx]
xor ecx, ecx
mov dword [ebp - 0x30], ecx
mov dword [ebp - 0x2c], ecx
mov dword [ebp - 0x28], ecx
mov dword [ebp - 0x24], ecx
mov dword [ebp - 0x20], ecx
mov dword [ebp - 0x1c], ecx
mov dword [ebp - 0x18], ecx
mov edx, dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov dword [ebp - 0x30], edx
mov eax, dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov dword [ebp - 0x2c], eax
mov byte [ebp + 0x20], 0
mov ecx, dword [ebp - 0x54]
mov dword [ebp - 0x28], ecx
mov edx, dword [ebp + 0x24]
mov dword [ebp - 0x20], edx
mov eax, dword [ebp + 0x28]
mov dword [ebp - 0x1c], eax
movzx ecx, byte [ebp + 0x20]
mov dword [ebp - 0x18], ecx
push 0
push 0x1000
mov edx, dword [ebp + 0xc]
push edx
mov eax, dword [ebp - 0x54]
push eax
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.KERNEL32.dll_WriteProcessMemory]
test eax, eax
jne 0x1000479c
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.Cant_write_file_header_0x_X_n
call fcn.10001eb0
add esp, 8
push 0x8000
push 0
mov edx, dword [ebp - 0x54]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
xor al, al
jmp 0x10005028
mov ecx, dword [ebp - 0x58]
movzx edx, word [ecx + 0x14]
mov eax, dword [ebp - 0x58]
lea ecx, [eax + edx + 0x18]
mov dword [ebp - 0x50], ecx
mov dword [ebp - 0x98], 0
jmp 0x100047d1
mov edx, dword [ebp - 0x98]
add edx, 1
mov dword [ebp - 0x98], edx
mov eax, dword [ebp - 0x50]
add eax, 0x28
mov dword [ebp - 0x50], eax
mov ecx, dword [ebp - 0x6c]
movzx edx, word [ecx + 2]
cmp dword [ebp - 0x98], edx
je 0x10004849
mov eax, dword [ebp - 0x50]
cmp dword [eax + 0x10], 0
je 0x10004844
push 0
mov ecx, dword [ebp - 0x50]
mov edx, dword [ecx + 0x10]
push edx
mov eax, dword [ebp - 0x50]
mov ecx, dword [ebp + 0xc]
add ecx, dword [eax + 0x14]
push ecx
mov edx, dword [ebp - 0x50]
mov eax, dword [ebp - 0x54]
add eax, dword [edx + 0xc]
push eax
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.KERNEL32.dll_WriteProcessMemory]
test eax, eax
jne 0x10004844
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.Cant_map_sections:_0x_x_n
call fcn.10001eb0
add esp, 8
push 0x8000
push 0
mov edx, dword [ebp - 0x54]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
xor al, al
jmp 0x10005028
jmp 0x100047b9
push 4
push 0x3000
push 0x1c
push 0
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.KERNEL32.dll_VirtualAllocEx]
mov dword [ebp - 0x5c], eax
cmp dword [ebp - 0x5c], 0
jne 0x10004897
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.Target_process_mapping_allocation_failed__ex__0x_X_n
call fcn.10001eb0
add esp, 8
push 0x8000
push 0
mov edx, dword [ebp - 0x54]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
xor al, al
jmp 0x10005028
push 0
push 0x1c
lea ecx, [ebp - 0x30]
push ecx
mov edx, dword [ebp - 0x5c]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_WriteProcessMemory]
test eax, eax
jne 0x100048f6
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.Cant_write_mapping_0x_X_n
call fcn.10001eb0
add esp, 8
push 0x8000
push 0
mov ecx, dword [ebp - 0x54]
push ecx
mov edx, dword [ebp + 8]
push edx
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
push 0x8000
push 0
mov eax, dword [ebp - 0x5c]
push eax
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
xor al, al
jmp 0x10005028
push 0x40
push 0x3000
push 0x1000
push 0
mov edx, dword [ebp + 8]
push edx
call dword [sym.imp.KERNEL32.dll_VirtualAllocEx]
mov dword [ebp - 0x60], eax
cmp dword [ebp - 0x60], 0
jne 0x1000495c
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.Memory_shellcode_allocation_failed__ex__0x_X_n
call fcn.10001eb0
add esp, 8
push 0x8000
push 0
mov eax, dword [ebp - 0x54]
push eax
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
push 0x8000
push 0
mov edx, dword [ebp - 0x5c]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
xor al, al
jmp 0x10005028
push 0
push 0x1000
push 0x10005040
mov ecx, dword [ebp - 0x60]
push ecx
mov edx, dword [ebp + 8]
push edx
call dword [sym.imp.KERNEL32.dll_WriteProcessMemory]
test eax, eax
jne 0x100049d4
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.Cant_write_shellcode_0x_X_n
call fcn.10001eb0
add esp, 8
push 0x8000
push 0
mov eax, dword [ebp - 0x54]
push eax
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
push 0x8000
push 0
mov edx, dword [ebp - 0x5c]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
push 0x8000
push 0
mov ecx, dword [ebp - 0x60]
push ecx
mov edx, dword [ebp + 8]
push edx
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
xor al, al
jmp 0x10005028
mov eax, dword [ebp - 0x54]
push eax
push str.Mapped_DLL_at__p_n
call fcn.10001eb0
add esp, 8
mov ecx, dword [ebp - 0x5c]
push ecx
push str.Mapping_info_at__p_n
call fcn.10001eb0
add esp, 8
mov edx, dword [ebp - 0x60]
push edx
push str.Shell_code_at__p_n
call fcn.10001eb0
add esp, 8
push str.Data_allocated_n
call fcn.10001eb0
add esp, 4
push 0
push 0
mov eax, dword [ebp - 0x5c]
push eax
mov ecx, dword [ebp - 0x60]
push ecx
push 0
push 0
mov edx, dword [ebp + 8]
push edx
call dword [sym.imp.KERNEL32.dll_CreateRemoteThread]
mov dword [ebp - 0xa4], eax
cmp dword [ebp - 0xa4], 0
jne 0x10004a97
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.Thread_creation_failed_0x_X_n
call fcn.10001eb0
add esp, 8
push 0x8000
push 0
mov eax, dword [ebp - 0x54]
push eax
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
push 0x8000
push 0
mov edx, dword [ebp - 0x5c]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
push 0x8000
push 0
mov ecx, dword [ebp - 0x60]
push ecx
mov edx, dword [ebp + 8]
push edx
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
xor al, al
jmp 0x10005028
mov eax, dword [ebp - 0xa4]
push eax
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov ecx, dword [ebp - 0x60]
push ecx
push str.Thread_created_at:__p__waiting_for_return..._n
call fcn.10001eb0
add esp, 8
mov dword [ebp - 0x78], 0
cmp dword [ebp - 0x78], 0
jne 0x10004bb2
mov dword [ebp - 8], 0
lea edx, [ebp - 8]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_GetExitCodeProcess]
nop
cmp dword [ebp - 8], 0x103
je 0x10004afd
mov ecx, dword [ebp - 8]
push ecx
push str.Process_crashed__exit_code:__d_n
call fcn.10001eb0
add esp, 8
xor al, al
jmp 0x10005028
xor edx, edx
mov dword [ebp - 0x4c], edx
mov dword [ebp - 0x48], edx
mov dword [ebp - 0x44], edx
mov dword [ebp - 0x40], edx
mov dword [ebp - 0x3c], edx
mov dword [ebp - 0x38], edx
mov dword [ebp - 0x34], edx
push 0
push 0x1c
lea eax, [ebp - 0x4c]
push eax
mov ecx, dword [ebp - 0x5c]
push ecx
mov edx, dword [ebp + 8]
push edx
call dword [sym.imp.KERNEL32.dll_ReadProcessMemory]
mov eax, dword [ebp - 0x40]
mov dword [ebp - 0x78], eax
cmp dword [ebp - 0x78], 0x404040
jne 0x10004b8e
push str.Wrong_mapping_ptr_n
call fcn.10001eb0
add esp, 4
push 0x8000
push 0
mov ecx, dword [ebp - 0x54]
push ecx
mov edx, dword [ebp + 8]
push edx
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
push 0x8000
push 0
mov eax, dword [ebp - 0x5c]
push eax
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
push 0x8000
push 0
mov edx, dword [ebp - 0x60]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
xor al, al
jmp 0x10005028
cmp dword [ebp - 0x78], 0x505050
jne 0x10004ba4
push str.WARNING:_Exception_support_failed__n
call fcn.10001eb0
add esp, 4
push 0xa
call dword [sym.imp.KERNEL32.dll_Sleep]
nop
jmp 0x10004abc
push 0x1400000
call dword [sym.imp.api_ms_win_crt_heap_l1_1_0.dll_malloc]
add esp, 4
mov dword [ebp - 0x74], eax
cmp dword [ebp - 0x74], 0
jne 0x10004bdd
push str.Unable_to_allocate_memory_n
call fcn.10001eb0
add esp, 4
xor al, al
jmp 0x10005028
push 0x1400000
push 0
mov ecx, dword [ebp - 0x74]
push ecx
call sub.VCRUNTIME140.dll_memset
add esp, 0xc
movzx edx, byte [ebp + 0x14]
test edx, edx
je 0x10004c22
push 0
push 0x1000
mov eax, dword [ebp - 0x74]
push eax
mov ecx, dword [ebp - 0x54]
push ecx
mov edx, dword [ebp + 8]
push edx
call dword [sym.imp.KERNEL32.dll_WriteProcessMemory]
test eax, eax
jne 0x10004c22
push str.WARNING_:_Cant_clear_HEADER_n
call fcn.10001eb0
add esp, 4
movzx eax, byte [ebp + 0x18]
test eax, eax
je 0x10004e93
mov ecx, dword [ebp - 0x58]
movzx edx, word [ecx + 0x14]
mov eax, dword [ebp - 0x58]
lea ecx, [eax + edx + 0x18]
mov dword [ebp - 0x50], ecx
mov dword [ebp - 0x9c], 0
jmp 0x10004c63
mov edx, dword [ebp - 0x9c]
add edx, 1
mov dword [ebp - 0x9c], edx
mov eax, dword [ebp - 0x50]
add eax, 0x28
mov dword [ebp - 0x50], eax
mov ecx, dword [ebp - 0x6c]
movzx edx, word [ecx + 2]
cmp dword [ebp - 0x9c], edx
je 0x10004e93
mov eax, dword [ebp - 0x50]
cmp dword [eax + 8], 0
je 0x10004e8e
movzx ecx, byte [ebp + 0x20]
test ecx, ecx
je 0x10004c9a
mov dword [ebp - 0xb0], 0
jmp 0x10004d41
mov dword [ebp - 0x88], str..pdata
mov edx, dword [ebp - 0x50]
mov dword [ebp - 0x8c], edx
mov eax, dword [ebp - 0x8c]
mov cl, byte [eax]
mov byte [ebp - 0x66], cl
mov edx, dword [ebp - 0x88]
cmp cl, byte [edx]
jne 0x10004cff
cmp byte [ebp - 0x66], 0
je 0x10004cf3
mov eax, dword [ebp - 0x8c]
mov cl, byte [eax + 1]
mov byte [ebp - 0x61], cl
mov edx, dword [ebp - 0x88]
cmp cl, byte [edx + 1]
jne 0x10004cff
add dword [ebp - 0x8c], 2
add dword [ebp - 0x88], 2
cmp byte [ebp - 0x61], 0
jne 0x10004cad
mov dword [ebp - 0xa8], 0
jmp 0x10004d0a
sbb eax, eax
or eax, 1
mov dword [ebp - 0xa8], eax
mov ecx, dword [ebp - 0xa8]
mov dword [ebp - 0xbc], ecx
cmp dword [ebp - 0xbc], 0
jne 0x10004d2b
mov dword [ebp - 0xac], 1
jmp 0x10004d35
mov dword [ebp - 0xac], 0
mov edx, dword [ebp - 0xac]
mov dword [ebp - 0xb0], edx
cmp dword [ebp - 0xb0], 0
jne 0x10004e40
mov dword [ebp - 0x80], str..rsrc
mov eax, dword [ebp - 0x50]
mov dword [ebp - 0x84], eax
mov ecx, dword [ebp - 0x84]
mov dl, byte [ecx]
mov byte [ebp - 0x62], dl
mov eax, dword [ebp - 0x80]
cmp dl, byte [eax]
jne 0x10004da7
cmp byte [ebp - 0x62], 0
je 0x10004d9b
mov ecx, dword [ebp - 0x84]
mov dl, byte [ecx + 1]
mov byte [ebp - 0x63], dl
mov eax, dword [ebp - 0x80]
cmp dl, byte [eax + 1]
jne 0x10004da7
add dword [ebp - 0x84], 2
add dword [ebp - 0x80], 2
cmp byte [ebp - 0x63], 0
jne 0x10004d5e
mov dword [ebp - 0xb4], 0
jmp 0x10004db2
sbb ecx, ecx
or ecx, 1
mov dword [ebp - 0xb4], ecx
mov edx, dword [ebp - 0xb4]
mov dword [ebp - 0xc0], edx
cmp dword [ebp - 0xc0], 0
je 0x10004e40
mov dword [ebp - 0x90], str..reloc
mov eax, dword [ebp - 0x50]
mov dword [ebp - 0x7c], eax
mov ecx, dword [ebp - 0x7c]
mov dl, byte [ecx]
mov byte [ebp - 0x64], dl
mov eax, dword [ebp - 0x90]
cmp dl, byte [eax]
jne 0x10004e20
cmp byte [ebp - 0x64], 0
je 0x10004e14
mov ecx, dword [ebp - 0x7c]
mov dl, byte [ecx + 1]
mov byte [ebp - 0x65], dl
mov eax, dword [ebp - 0x90]
cmp dl, byte [eax + 1]
jne 0x10004e20
add dword [ebp - 0x7c], 2
add dword [ebp - 0x90], 2
cmp byte [ebp - 0x65], 0
jne 0x10004dd7
mov dword [ebp - 0xb8], 0
jmp 0x10004e2b
sbb ecx, ecx
or ecx, 1
mov dword [ebp - 0xb8], ecx
mov edx, dword [ebp - 0xb8]
mov dword [ebp - 0xc4], edx
cmp dword [ebp - 0xc4], 0
jne 0x10004e8e
mov eax, dword [ebp - 0x50]
push eax
push str.Processing__s_removal_n
call fcn.10001eb0
add esp, 8
push 0
mov ecx, dword [ebp - 0x50]
mov edx, dword [ecx + 8]
push edx
mov eax, dword [ebp - 0x74]
push eax
mov ecx, dword [ebp - 0x50]
mov edx, dword [ebp - 0x54]
add edx, dword [ecx + 0xc]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_WriteProcessMemory]
test eax, eax
jne 0x10004e8e
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
mov ecx, dword [ebp - 0x50]
push ecx
push str.Cant_clear_section__s:_0x_x_n
call fcn.10001eb0
add esp, 0xc
jmp 0x10004c4b
movzx edx, byte [ebp + 0x1c]
test edx, edx
je 0x10004fb0
mov eax, dword [ebp - 0x58]
movzx ecx, word [eax + 0x14]
mov edx, dword [ebp - 0x58]
lea eax, [edx + ecx + 0x18]
mov dword [ebp - 0x50], eax
mov dword [ebp - 0xa0], 0
jmp 0x10004ed4
mov ecx, dword [ebp - 0xa0]
add ecx, 1
mov dword [ebp - 0xa0], ecx
mov edx, dword [ebp - 0x50]
add edx, 0x28
mov dword [ebp - 0x50], edx
mov eax, dword [ebp - 0x6c]
movzx ecx, word [eax + 2]
cmp dword [ebp - 0xa0], ecx
je 0x10004f85
mov edx, dword [ebp - 0x50]
cmp dword [edx + 8], 0
je 0x10004f80
mov dword [ebp - 0x10], 0
mov dword [ebp - 0x70], 2
mov eax, dword [ebp - 0x50]
mov ecx, dword [eax + 0x24]
and ecx, 0x80000000
jbe 0x10004f19
mov dword [ebp - 0x70], 4
jmp 0x10004f2d
mov edx, dword [ebp - 0x50]
mov eax, dword [edx + 0x24]
and eax, 0x20000000
jbe 0x10004f2d
mov dword [ebp - 0x70], 0x20
lea ecx, [ebp - 0x10]
push ecx
mov edx, dword [ebp - 0x70]
push edx
mov eax, dword [ebp - 0x50]
mov ecx, dword [eax + 8]
push ecx
mov edx, dword [ebp - 0x50]
mov eax, dword [ebp - 0x54]
add eax, dword [edx + 0xc]
push eax
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.KERNEL32.dll_VirtualProtectEx]
test eax, eax
je 0x10004f6b
mov edx, dword [ebp - 0x70]
push edx
mov eax, dword [ebp - 0x50]
push eax
push str.section__s_set_as__lX_n
call fcn.10001eb0
add esp, 0xc
jmp 0x10004f80
mov ecx, dword [ebp - 0x70]
push ecx
mov edx, dword [ebp - 0x50]
push edx
push str.FAIL:_section__s_not_set_as__lX_n
call fcn.10001eb0
add esp, 0xc
jmp 0x10004ebc
mov dword [ebp - 0xc], 0
lea eax, [ebp - 0xc]
push eax
push 2
mov ecx, dword [ebp - 0x58]
movzx edx, word [ecx + 0x14]
mov eax, dword [ebp - 0x58]
mov ecx, dword [eax + edx + 0x24]
push ecx
mov edx, dword [ebp - 0x54]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_VirtualProtectEx]
nop
push 0
push 0x1000
mov ecx, dword [ebp - 0x74]
push ecx
mov edx, dword [ebp - 0x60]
push edx
mov eax, dword [ebp + 8]
push eax
call dword [sym.imp.KERNEL32.dll_WriteProcessMemory]
test eax, eax
jne 0x10004fda
push str.WARNING:_Cant_clear_shellcode_n
call fcn.10001eb0
add esp, 4
push 0x8000
push 0
mov ecx, dword [ebp - 0x60]
push ecx
mov edx, dword [ebp + 8]
push edx
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
test eax, eax
jne 0x10005000
push str.WARNING:_cant_release_shell_code_memory_n
call fcn.10001eb0
add esp, 4
push 0x8000
push 0
mov eax, dword [ebp - 0x5c]
push eax
mov ecx, dword [ebp + 8]
push ecx
call dword [sym.imp.KERNEL32.dll_VirtualFreeEx]
test eax, eax
jne 0x10005026
push str.WARNING:_cant_release_mapping_data_memory_n
call fcn.10001eb0
add esp, 4
mov al, 1
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.1000a4f0
mov esp, ebp
pop ebp
ret