Function at 0x403e10
Capabilities:
Allocate or change rwx memory
Execute shellcode via indirect call
Link many functions at runtime
Read .ini file

Disassembly:
push ebp
mov ebp, esp
mov ecx, 0x2c
push 0
push 0
dec ecx
jne 0x403e18
push ecx
push ebx
push esi
push edi
xor edx, edx
push ebp
push 0x4043e7
push dword fs:[edx]
mov dword fs:[edx], esp
sub eax, 1
jb 0x40439e
jne 0x4043af
mov eax, 0x406b50
mov edx, 0x40519c
mov ecx, 0x30
call fcn.00402f48
call sub.kernel32.dll_GetCurrentThreadId_1
mov dword [0x4069b0], eax
push 0x40666c
call sub.kernel32.dll_GetSystemTime
push 0x104
push 0x406884
mov eax, dword [0x406650]
push eax
call sub.kernel32.dll_GetModuleFileNameA
lea eax, [ebp - 0x18]
mov edx, 0x406884
mov ecx, 0x104
call fcn.00402fc4
mov eax, dword [ebp - 0x18]
lea edx, [ebp - 0x14]
call fcn.00403824
mov edx, dword [ebp - 0x14]
mov eax, 0x4069a8
call fcn.00402eac
push 0x104
push 0x406884
push 0
call sub.kernel32.dll_GetModuleHandleA
push eax
call sub.kernel32.dll_GetModuleFileNameA
lea eax, [ebp - 0x1c]
mov edx, 0x406884
mov ecx, 0x104
call fcn.00402fc4
mov eax, dword [ebp - 0x1c]
push eax
lea eax, [ebp - 0x20]
mov edx, 0x405150
mov ecx, 8
call fcn.00402f48
mov eax, dword [ebp - 0x20]
pop edx
call fcn.004031f4
test eax, eax
jle 0x403eff
mov byte [0x4069ac], 3
jmp 0x403fd6
lea eax, [ebp - 0x24]
mov edx, 0x406884
mov ecx, 0x104
call fcn.00402fc4
mov eax, dword [ebp - 0x24]
push eax
lea eax, [ebp - 0x28]
mov edx, 0x405148
mov ecx, 8
call fcn.00402f48
mov eax, dword [ebp - 0x28]
pop edx
call fcn.004031f4
test eax, eax
jle 0x403f40
mov byte [0x4069ac], 2
jmp 0x403fd6
lea eax, [ebp - 0x2c]
mov edx, 0x406884
mov ecx, 0x104
call fcn.00402fc4
mov eax, dword [ebp - 0x2c]
push eax
lea eax, [ebp - 0x30]
mov edx, 0x405140
mov ecx, 7
call fcn.00402f48
mov eax, dword [ebp - 0x30]
pop edx
call fcn.004031f4
test eax, eax
jle 0x403f7e
mov byte [0x4069ac], 1
jmp 0x403fd6
lea eax, [ebp - 0x38]
mov edx, 0x406884
mov ecx, 0x104
call fcn.00402fc4
mov eax, dword [ebp - 0x38]
lea edx, [ebp - 0x34]
call fcn.004038b8
lea eax, [ebp - 0x34]
push eax
lea eax, [ebp - 0x3c]
mov edx, 0x405158
mov ecx, 0xf
call fcn.00402f48
mov edx, dword [ebp - 0x3c]
pop eax
call fcn.00403008
mov eax, dword [ebp - 0x34]
call fcn.00403944
test al, al
je 0x403fcf
mov byte [0x4069ac], 2
jmp 0x403fd6
mov byte [0x4069ac], 1
mov edx, dword [0x4069a8]
mov eax, 0x404400
call fcn.004031f4
mov dword [ebp - 0xc], eax
lea eax, [ebp - 0x40]
push eax
mov ecx, dword [ebp - 0xc]
dec ecx
mov edx, 1
mov eax, dword [0x4069a8]
call fcn.004031b4
mov eax, dword [ebp - 0x40]
push eax
lea eax, [ebp - 0x44]
mov edx, 0x405168
mov ecx, 0xa
call fcn.00402f48
mov ecx, dword [ebp - 0x44]
lea eax, [ebp - 8]
pop edx
call fcn.0040304c
movzx eax, word [0x40666c]
imul eax, eax, 0x2710
movzx edx, word [0x40666e]
imul edx, edx, 0x64
add eax, edx
movzx edx, word [0x406672]
add eax, edx
cmp eax, 0x134d8d8
seta byte [0x40667c]
mov eax, dword [ebp - 8]
call fcn.0040315c
mov esi, eax
push esi
call sub.kernel32.dll_GetModuleHandleA
mov ebx, eax
test ebx, ebx
jne 0x40406e
push esi
call sub.kernel32.dll_LoadLibraryA
mov ebx, eax
push 0x4050c8
push ebx
call sub.kernel32.dll_GetProcAddress
mov dword [0x406b5c], eax
push 0x4050d8
call sub.kernel32.dll_GetModuleHandleA
mov ebx, eax
push 0x4050ec
push ebx
call sub.kernel32.dll_GetProcAddress
mov dword [0x40698c], eax
push 0x4050f8
push ebx
call sub.kernel32.dll_GetProcAddress
mov dword [0x406990], eax
push 0x405108
push ebx
call sub.kernel32.dll_GetProcAddress
mov dword [0x406994], eax
push 0x405110
push ebx
call sub.kernel32.dll_GetProcAddress
mov dword [0x406998], eax
push 0x4050e4
push ebx
call sub.kernel32.dll_GetProcAddress
mov dword [0x406b58], eax
mov eax, dword [0x406b58]
mov dword [0x406988], eax
lea eax, [ebp - 0x4c]
mov edx, 0x406884
mov ecx, 0x104
call fcn.00402fc4
mov eax, dword [ebp - 0x4c]
lea edx, [ebp - 0x48]
call fcn.004038b8
lea eax, [ebp - 0x48]
push eax
lea eax, [ebp - 0x50]
mov edx, 0x405118
mov ecx, 8
call fcn.00402f48
mov edx, dword [ebp - 0x50]
pop eax
call fcn.00403008
mov eax, dword [ebp - 0x48]
call fcn.0040315c
push eax
push 0x201
push 0x406680
push 0x404404
push 0x40518c
push 0x405120
call sub.kernel32.dll_GetPrivateProfileStringA
lea edx, [ebp - 0x54]
mov eax, 0x406680
call fcn.00403810
mov edx, dword [ebp - 0x54]
mov eax, 0x406b50
call fcn.00402eac
push 0x4069b4
push 0x101
call dword [0x40698c]
cmp dword [0x406b50], 0
je 0x404229
xor eax, eax
push ebp
push 0x40421d
push dword fs:[eax]
mov dword fs:[eax], esp
mov edx, dword [0x406b50]
mov eax, 0x404410
call fcn.004031f4
mov dword [ebp - 0xc], eax
cmp dword [ebp - 0xc], 0
jle 0x4041f1
lea eax, [ebp - 4]
push eax
mov eax, dword [0x406b50]
call fcn.00403000
mov ecx, eax
sub ecx, dword [ebp - 0xc]
mov edx, dword [ebp - 0xc]
inc edx
mov eax, dword [0x406b50]
call fcn.004031b4
push 0x406b50
mov ecx, dword [ebp - 0xc]
dec ecx
mov edx, 1
mov eax, dword [0x406b50]
call fcn.004031b4
lea edx, [ebp - 0xc]
mov eax, dword [ebp - 4]
call fcn.00402564
mov word [0x406b54], ax
jmp 0x4041fa
mov word [0x406b54], 0x6982
mov eax, dword [0x406b50]
call fcn.00403a90
mov dword [0x406b44], eax
mov eax, dword [0x406b44]
mov dword [0x406b48], eax
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
jmp 0x404232
mov word [0x406b54], 0
cmp byte [0x40667c], 0
je 0x4042d7
lea eax, [ebp - 0x15c]
mov edx, 0x4050b4
call fcn.00402fb8
mov eax, dword [ebp - 0x15c]
lea edx, [ebp - 0x158]
call fcn.00403744
mov edx, dword [ebp - 0x158]
lea eax, [ebp - 0x154]
mov ecx, 0xff
call fcn.00402fdc
lea edx, [ebp - 0x154]
mov eax, 0x4050b4
mov cl, 0x11
call fcn.004024dc
lea eax, [ebp - 0x160]
mov edx, 0x4050b4
call fcn.00402fb8
mov eax, dword [ebp - 0x160]
call fcn.00403a90
mov dword [0x406b44], eax
cmp byte [0x4069ac], 1
je 0x4042ba
cmp byte [0x4069ac], 3
jne 0x4042c5
mov word [0x406b54], 0x6982
jmp 0x4042d7
cmp byte [0x4069ac], 2
jne 0x4042d7
mov word [0x406b54], 0x6983
mov ax, word [0x406b54]
push eax
call dword [0x406998]
mov word [0x406b54], ax
lea eax, [ebp - 0x164]
mov edx, 0x40512c
mov ecx, 0x12
call fcn.00402f48
mov eax, dword [ebp - 0x164]
call fcn.00403a90
mov dword [0x406b4c], eax
mov eax, dword [0x406b58]
mov dword [0x40699c], eax
mov edx, 0x4069a5
mov ecx, 2
call fcn.00402444
mov byte [0x4069a0], 0xe9
mov eax, 0x403b78
add eax, 5
sub eax, dword [0x40699c]
sub eax, 5
mov dword [0x4069a1], eax
mov ebx, dword [0x40699c]
sub ebx, 5
lea eax, [ebp - 0x10]
push eax
push 0x40
push 5
push ebx
call sub.kernel32.dll_VirtualProtect
mov edx, ebx
mov eax, 0x4069a0
mov ecx, 5
call fcn.00402444
lea eax, [ebp - 0x10]
push eax
mov eax, dword [ebp - 0x10]
push eax
push 5
push ebx
call sub.kernel32.dll_VirtualProtect
push 5
push ebx
call sub.kernel32.dll_GetCurrentProcess
push eax
call sub.kernel32.dll_FlushInstructionCache
mov dx, word [0x4050b0]
mov eax, dword [0x40699c]
call fcn.00403b04
jmp 0x4043af
mov dx, word [0x4069a5]
mov eax, dword [0x40699c]
call fcn.00403b04
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x4043ee
lea eax, [ebp - 0x164]
mov edx, 4
call fcn.00402e7c
lea eax, [ebp - 0x54]
mov edx, 0x11
call fcn.00402e7c
lea eax, [ebp - 8]
mov edx, 2
call fcn.00402e7c
ret