Function at 0x4051e0
Capabilities:
Create directory
Create process on windows
Query environment variable
Read .ini file
Set environment variable

Disassembly:
push ebp
mov ebp, esp
sub esp, 0xcc4
mov eax, dword [0x42c6a0]
xor eax, ebp
mov dword [ebp - 4], eax
mov dword [ebp - 0xca0], ecx
push 0
mov ecx, dword [ebp - 0xca0]
add ecx, 4
call fcn.004011d0
push 0
push 0xc
call dword [sym.imp.USER32.dll_GetSystemMetrics]
push eax
push 0xb
call dword [sym.imp.USER32.dll_GetSystemMetrics]
push eax
push 1
push 0x80
mov ecx, 0x42d960
call fcn.004027c0
push eax
call dword [sym.imp.USER32.dll_LoadImageW]
mov dword [ebp - 0x214], eax
push 1
mov eax, dword [ebp - 0x214]
push eax
mov ecx, dword [ebp - 0xca0]
add ecx, 4
call fcn.004028e0
push 0
push 0x32
call dword [sym.imp.USER32.dll_GetSystemMetrics]
push eax
push 0x31
call dword [sym.imp.USER32.dll_GetSystemMetrics]
push eax
push 1
push 0x80
mov ecx, 0x42d960
call fcn.004027c0
push eax
call dword [sym.imp.USER32.dll_LoadImageW]
mov dword [ebp - 0x424], eax
push 0
mov ecx, dword [ebp - 0x424]
push ecx
mov ecx, dword [ebp - 0xca0]
add ecx, 4
call fcn.004028e0
call dword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
push eax
mov ecx, 0x42d960
call fcn.0040a490
mov dword [ebp - 0x428], eax
cmp dword [ebp - 0xca0], 0
je 0x4052cc
mov edx, dword [ebp - 0xca0]
add edx, 0x20
mov dword [ebp - 0xca4], edx
jmp 0x4052d6
mov dword [ebp - 0xca4], 0
mov eax, dword [ebp - 0xca4]
push eax
mov ecx, dword [ebp - 0x428]
call fcn.0040a0b0
cmp dword [ebp - 0xca0], 0
je 0x405302
mov ecx, dword [ebp - 0xca0]
add ecx, 0x24
mov dword [ebp - 0xca8], ecx
jmp 0x40530c
mov dword [ebp - 0xca8], 0
mov edx, dword [ebp - 0xca8]
push edx
mov ecx, dword [ebp - 0x428]
call fcn.0040a0f0
mov eax, dword [ebp - 0xca0]
mov ecx, dword [eax + 4]
push ecx
mov ecx, dword [ebp - 0xca0]
add ecx, 0x2c
call fcn.0040a6b0
mov edx, dword [ebp - 0xca0]
mov dword [edx + 0xf4], 0
mov eax, dword [ebp - 0xca0]
mov dword [eax + 0x60], 0
mov ecx, dword [ebp - 0xca0]
mov dword [ecx + 0x64], 1
mov edx, dword [ebp - 0xca0]
mov byte [edx + 0x48], 0
mov eax, dword [ebp - 0xca0]
mov dword [eax + 0x4c], 0
push str.TaskbarCreated
call dword [sym.imp.USER32.dll_RegisterWindowMessageW]
xor ecx, ecx
mov word [ebp - 0x210], cx
push 0x206
push 0
lea edx, [ebp - 0x20e]
push edx
call fcn.00417120
add esp, 0xc
push 0x104
lea eax, [ebp - 0x210]
push eax
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
push 0x4257dc
push 0x5c
lea ecx, [ebp - 0x210]
push ecx
call fcn.00409050
add esp, 8
push eax
call dword [sym.imp.KERNEL32.dll_lstrcpyW]
lea edx, [ebp - 0x210]
push edx
call dword [sym.imp.KERNEL32.dll_LoadLibraryW]
push eax
mov ecx, dword [ebp - 0xca0]
add ecx, 0x50
call fcn.004098f0
mov ecx, dword [ebp - 0xca0]
add ecx, 0x50
call fcn.004098b0
test eax, eax
je 0x40548c
push 0x4257f4
mov ecx, dword [ebp - 0xca0]
add ecx, 0x50
call fcn.00409d40
push eax
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov dword [ebp - 0x83c], eax
cmp dword [ebp - 0x83c], 0
je 0x40548a
mov ecx, dword [ebp - 0xca0]
add ecx, 0x54
call fcn.00409e40
push eax
push 0x425430
push 0x425420
call dword [ebp - 0x83c]
mov ecx, dword [ebp - 0xca0]
add ecx, 0x58
call fcn.00409e40
push eax
push 0x425440
push 0x425420
call dword [ebp - 0x83c]
mov ecx, dword [ebp - 0xca0]
add ecx, 0x5c
call fcn.00409e40
push eax
push 0x425450
push 0x425420
call dword [ebp - 0x83c]
jmp 0x4054ae
push 0xbb8
call dword [sym.imp.KERNEL32.dll_Sleep]
push 0
push 1
push 0x111
mov ecx, dword [ebp - 0xca0]
add ecx, 4
call fcn.0040a550
mov ecx, dword [ebp - 0xca0]
add ecx, 0x54
call fcn.00409d40
test eax, eax
je 0x4055aa
xor eax, eax
mov word [ebp - 0xa48], ax
push 0x206
push 0
lea ecx, [ebp - 0xa46]
push ecx
call fcn.00417120
add esp, 0xc
push 0x104
lea edx, [ebp - 0xa48]
push edx
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
push 0x425804
push 0x5c
lea eax, [ebp - 0xa48]
push eax
call fcn.00409050
add esp, 8
push eax
call dword [sym.imp.KERNEL32.dll_lstrcpyW]
mov ecx, dword [ebp - 0xca0]
add ecx, 0x54
call fcn.00409d40
mov dword [ebp - 0xcac], eax
lea ecx, [ebp - 0xa48]
push ecx
mov edx, dword [ebp - 0xcac]
push edx
mov eax, dword [ebp - 0xcac]
mov ecx, dword [eax]
mov edx, dword [ecx + 0xc]
call edx
test eax, eax
jne 0x405574
mov ecx, dword [ebp - 0xca0]
add ecx, 0x54
call fcn.00409d40
mov dword [ebp - 0xcb0], eax
push 0x425830
mov eax, dword [ebp - 0xcb0]
push eax
mov ecx, dword [ebp - 0xcb0]
mov edx, dword [ecx]
mov eax, dword [edx + 0x10]
call eax
mov ecx, dword [ebp - 0xca0]
add ecx, 0x54
push ecx
mov ecx, dword [ebp - 0xca0]
add ecx, 0x9c
call fcn.00409740
mov edx, dword [ebp - 0xca0]
add edx, 0x54
push edx
mov ecx, dword [ebp - 0xca0]
add ecx, 0xd8
call fcn.00409740
mov ecx, dword [ebp - 0xca0]
call fcn.004064d0
mov ecx, dword [ebp - 0xca0]
call fcn.00405f90
mov ecx, dword [ebp - 0xca0]
call fcn.00408e30
xor eax, eax
mov word [ebp - 0x420], ax
push 0x206
push 0
lea ecx, [ebp - 0x41e]
push ecx
call fcn.00417120
add esp, 0xc
push 0x104
lea edx, [ebp - 0x420]
push edx
push 0x425898
call dword [sym.imp.KERNEL32.dll_ExpandEnvironmentStringsW]
push 0
lea eax, [ebp - 0x420]
push eax
call dword [sym.imp.KERNEL32.dll_CreateDirectoryW]
xor ecx, ecx
mov word [ebp - 0x630], cx
push 0x206
push 0
lea edx, [ebp - 0x62e]
push edx
call fcn.00417120
add esp, 0xc
lea eax, [ebp - 0x420]
push eax
push 0x104
lea ecx, [ebp - 0x630]
push ecx
call fcn.004170a0
add esp, 0xc
push 0x4258c0
lea edx, [ebp - 0x630]
push edx
call fcn.004027a0
add esp, 8
xor eax, eax
mov word [ebp - 0x838], ax
push 0x206
push 0
lea ecx, [ebp - 0x836]
push ecx
call fcn.00417120
add esp, 0xc
lea edx, [ebp - 0x630]
push edx
push 0x104
lea eax, [ebp - 0x838]
push eax
lea ecx, [ebp - 0x420]
push ecx
push 0x4258e4
push 0x4258f8
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
push 0
lea edx, [ebp - 0x838]
push edx
call dword [sym.imp.KERNEL32.dll_CreateDirectoryW]
lea eax, [ebp - 0x838]
push eax
push 0x425914
call dword [sym.imp.KERNEL32.dll_SetEnvironmentVariableW]
mov ecx, dword [ebp - 0xca0]
add ecx, 0x58
call fcn.00409d40
test eax, eax
je 0x4059be
mov byte [ebp - 0xa49], 0
mov ecx, dword [ebp - 0xca0]
add ecx, 0x58
call fcn.00409d40
mov dword [ebp - 0xcb4], eax
lea ecx, [ebp - 0xa49]
push ecx
mov edx, dword [ebp - 0xcb4]
push edx
mov eax, dword [ebp - 0xcb4]
mov ecx, dword [eax]
mov edx, dword [ecx + 0xc]
call edx
test eax, eax
jne 0x40599c
movzx eax, byte [ebp - 0xa49]
test eax, eax
je 0x405788
mov ecx, dword [ebp - 0xca0]
add ecx, 0x5c
call fcn.00409d40
test eax, eax
je 0x405783
mov ecx, dword [ebp - 0xca0]
add ecx, 0x5c
call fcn.00409d40
mov dword [ebp - 0xcb8], eax
mov ecx, dword [ebp - 0xcb8]
mov edx, dword [ecx]
mov eax, dword [ebp - 0xcb8]
push eax
mov ecx, dword [edx + 0xc]
call ecx
test eax, eax
jne 0x405772
mov ecx, dword [ebp - 0xca0]
call fcn.004059e0
jmp 0x405783
push 0xc
push 0x14
push 0
mov ecx, dword [ebp - 0xca0]
call fcn.00406170
jmp 0x40599a
mov dword [ebp - 0xa50], 0
call fcn.004038d0
test eax, eax
je 0x4057ce
mov ecx, dword [ebp - 0xca0]
add ecx, 0x58
call fcn.00409d40
mov dword [ebp - 0xcbc], eax
mov edx, dword [ebp - 0xcbc]
mov eax, dword [edx]
mov ecx, dword [ebp - 0xcbc]
push ecx
mov edx, dword [eax + 0x10]
call edx
mov dword [ebp - 0xa50], eax
jmp 0x4058d0
xor eax, eax
mov word [ebp - 0xc60], ax
push 0x206
push 0
lea ecx, [ebp - 0xc5e]
push ecx
call fcn.00417120
add esp, 0xc
push 0x104
lea edx, [ebp - 0xc60]
push edx
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
push 0x3c
push 0
lea eax, [ebp - 0xc9c]
push eax
call fcn.00417120
add esp, 0xc
mov dword [ebp - 0xc9c], 0x3c
mov dword [ebp - 0xc98], 0x40
mov dword [ebp - 0xc94], 0
mov dword [ebp - 0xc90], 0x42593c
lea ecx, [ebp - 0xc60]
mov dword [ebp - 0xc8c], ecx
mov dword [ebp - 0xc88], 0x425948
mov dword [ebp - 0xc84], 0
mov dword [ebp - 0xc80], 5
lea edx, [ebp - 0xc9c]
push edx
call dword [sym.imp.SHELL32.dll_ShellExecuteExW]
push 0x1388
mov eax, dword [ebp - 0xc64]
push eax
call dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
mov byte [ebp - 0xa51], 0
mov ecx, dword [ebp - 0xca0]
add ecx, 0x58
call fcn.00409d40
mov dword [ebp - 0xcc0], eax
lea ecx, [ebp - 0xa51]
push ecx
mov edx, dword [ebp - 0xcc0]
push edx
mov eax, dword [ebp - 0xcc0]
mov ecx, dword [eax]
mov edx, dword [ecx + 0xc]
call edx
movzx eax, byte [ebp - 0xa51]
test eax, eax
jne 0x4058d0
mov dword [ebp - 0xa50], 0x80004005
cmp dword [ebp - 0xa50], 0
jge 0x4058ef
push 6
push 5
push 0
mov ecx, dword [ebp - 0xca0]
call fcn.00406170
jmp 0x40599a
cmp dword [ebp - 0xa50], 0
jne 0x405967
push 8
push 0
push 0
mov ecx, dword [ebp - 0xca0]
call fcn.00406170
mov ecx, dword [ebp - 0xca0]
add ecx, 0x5c
call fcn.00409d40
test eax, eax
je 0x405965
mov ecx, dword [ebp - 0xca0]
add ecx, 0x5c
call fcn.00409d40
mov dword [ebp - 0xcc4], eax
mov ecx, dword [ebp - 0xcc4]
mov edx, dword [ecx]
mov eax, dword [ebp - 0xcc4]
push eax
mov ecx, dword [edx + 0xc]
call ecx
test eax, eax
jne 0x405954
mov ecx, dword [ebp - 0xca0]
call fcn.004059e0
jmp 0x405965
push 0xc
push 0x14
push 0
mov ecx, dword [ebp - 0xca0]
call fcn.00406170
jmp 0x40599a
push 0xa
push 9
push 0
mov ecx, dword [ebp - 0xca0]
call fcn.00406170
push 0xbb8
call dword [sym.imp.KERNEL32.dll_Sleep]
push 0
push 1
push 0x111
mov ecx, dword [ebp - 0xca0]
add ecx, 4
call fcn.0040a550
jmp 0x4059be
push 0xbb8
call dword [sym.imp.KERNEL32.dll_Sleep]
push 0
push 1
push 0x111
mov ecx, dword [ebp - 0xca0]
add ecx, 4
call fcn.0040a550
mov eax, 1
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.0041710f
mov esp, ebp
pop ebp
ret 0x10