Function at 0x409880
Capabilities:
Check if file exists
Check mutex on windows
Copy file
Read .ini file

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x4105b8
mov eax, dword fs:[0]
push eax
mov dword fs:[0], esp
sub esp, 0xdb0
push ebx
push esi
mov ebx, ecx
push edi
mov ecx, 0x40
xor eax, eax
lea edi, [ebp - 0x157]
mov byte [ebp - 0x158], 0
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
xor edx, edx
mov ecx, 0x81
xor eax, eax
lea edi, [ebp - 0x5aa]
mov word [ebp - 0x5ac], dx
mov byte [ebp - 0x2a0], dl
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
mov ecx, 0x41
xor eax, eax
lea edi, [ebp - 0x29f]
mov byte [ebp - 0x9ac], dl
rep stosd dword es:[edi], eax
stosb byte es:[edi], al
mov ecx, 0xff
xor eax, eax
lea edi, [ebp - 0x9ab]
mov byte [ebp - 0x198], dl
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov ecx, 0xf
xor eax, eax
lea edi, [ebp - 0x197]
mov byte [ebp - 0x3a4], dl
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov ecx, 0x40
xor eax, eax
lea edi, [ebp - 0x3a3]
mov dword [ebp - 0x44], ebx
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov eax, dword [ebp + 8]
mov dword [ebp - 0x40], edx
cmp eax, edx
je 0x409943
mov dword [eax], edx
lea edi, [ebx + 0x14]
lea eax, [ebp - 0x198]
push edi
push 0x40
push eax
push edx
push str.version
mov ecx, 0x41bfc8
call fcn.00402a40
mov esi, dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringA]
push eax
call esi
test eax, eax
je 0x409d38
push edi
lea ecx, [ebp - 0x9ac]
push 0x400
push ecx
push 0
push 0x417914
mov ecx, 0x41bfc8
call fcn.00402a40
push eax
call esi
test eax, eax
je 0x409d38
call fcn.00402da0
test eax, eax
je 0x409a44
lea edx, [ebx + 0x220]
push 0x104
lea eax, [ebp - 0x158]
push edx
push eax
call dword [sym.imp.KERNEL32.dll_lstrcpynA]
lea ecx, [ebp - 0x2a0]
push 0x104
push ecx
push 0x10
call fcn.004079f0
add esp, 0xc
lea edx, [ebp - 0x2a0]
push edx
call dword [sym.imp.SHLWAPI.dll_PathRemoveFileSpecA]
lea eax, [ebp - 0x2a0]
push str.Update
push eax
call dword [sym.imp.SHLWAPI.dll_PathAppendA]
lea ecx, [ebp - 0x2a0]
push ecx
call dword [sym.imp.SHLWAPI.dll_PathFileExistsA]
test eax, eax
jne 0x409a1e
lea edx, [ebp - 0x2a0]
push eax
push edx
call fcn.00403d90
add esp, 8
test eax, eax
je 0x409d38
lea eax, [ebp - 0x158]
push str.Setup.exe
push eax
call dword [sym.imp.SHLWAPI.dll_PathAppendA]
lea ecx, [ebp - 0x2a0]
push str.Setup.exe
push ecx
call dword [sym.imp.SHLWAPI.dll_PathAppendA]
jmp 0x409a8a
push 0x417904
push 0
call sub.MSVCRT.dll__tempnam
add esp, 8
mov ebx, eax
lea edx, [ebp - 0x158]
push 0x104
push ebx
push edx
call dword [sym.imp.KERNEL32.dll_lstrcpynA]
push ebx
call sub.MSVCRT.dll_free
push 0x104
lea eax, [ebp - 0x158]
push str..exe
push eax
call fcn.00402de0
mov ebx, dword [ebp - 0x44]
add esp, 0x10
push edi
lea ecx, [ebp - 0x3a4]
push 0x104
push ecx
push 0
push str.general
mov ecx, 0x41bfc8
call fcn.00402a40
push eax
call esi
test eax, eax
je 0x409d38
lea edx, [ebp - 0x3a4]
lea eax, [ebp - 0x158]
push edx
lea ecx, [ebp - 0x9ac]
push eax
push ecx
mov ecx, ebx
call fcn.0040a890
test eax, eax
je 0x409d38
lea edx, [ebp - 0x5ac]
push 0x104
or esi, 0xffffffff
push edx
lea eax, [ebp - 0x158]
push esi
push eax
push 0
push 0
call dword [sym.imp.KERNEL32.dll_MultiByteToWideChar]
test eax, eax
je 0x409d38
lea ecx, [ebp - 0x5ac]
push ecx
call fcn.00408410
test eax, eax
je 0x409d38
mov eax, dword [ebx + 4]
test eax, eax
jne 0x409d38
mov eax, dword [ebp + 8]
test eax, eax
je 0x409b2c
mov dword [eax], 1
call fcn.00402da0
test eax, eax
je 0x409b7d
lea edx, [ebp - 0x2a0]
push 0
lea eax, [ebp - 0x158]
push edx
push eax
call dword [sym.imp.KERNEL32.dll_CopyFileA]
test eax, eax
je 0x409d38
lea ecx, [ebp - 0x158]
push 1
push ecx
call fcn.004033b0
add esp, 8
lea edx, [ebp - 0x2a0]
lea eax, [ebp - 0x158]
push 0x104
push edx
push eax
call dword [sym.imp.KERNEL32.dll_lstrcpynA]
mov cl, 0x9f
push 0x2e
mov byte [ebp - 0x27], cl
mov byte [ebp - 0x23], cl
mov cl, 0x82
mov al, 0x93
mov byte [ebp - 0x20], cl
mov byte [ebp - 0x18], cl
mov byte [ebp - 0x10], cl
lea ecx, [ebp - 0x3c]
mov bl, 0xe7
mov dl, 0x86
push ecx
push 0x20
lea ecx, [ebp - 0x54]
mov byte [ebp - 0x3c], al
mov byte [ebp - 0x3b], 0xc3
mov byte [ebp - 0x3a], 0xd1
mov byte [ebp - 0x39], 0xc6
mov byte [ebp - 0x38], 0xa9
mov byte [ebp - 0x37], 0xc9
mov byte [ebp - 0x36], 0xcc
mov byte [ebp - 0x35], 0xe9
mov byte [ebp - 0x34], 0xbb
mov byte [ebp - 0x33], bl
mov byte [ebp - 0x32], al
mov byte [ebp - 0x31], 0x8d
mov byte [ebp - 0x30], 0x85
mov byte [ebp - 0x2f], 0x9e
mov byte [ebp - 0x2e], 0x91
mov byte [ebp - 0x2d], 0xf3
mov byte [ebp - 0x2c], 0xf2
mov byte [ebp - 0x2b], 0x8b
mov byte [ebp - 0x2a], 0x95
mov byte [ebp - 0x29], 0xf7
mov byte [ebp - 0x28], dl
mov byte [ebp - 0x26], 0x8f
mov byte [ebp - 0x25], 0x81
mov byte [ebp - 0x24], 0x83
mov byte [ebp - 0x22], 0xe6
mov byte [ebp - 0x21], 0x98
mov byte [ebp - 0x1f], 0xe3
mov byte [ebp - 0x1e], 0x9b
mov byte [ebp - 0x1d], 0x87
mov byte [ebp - 0x1c], 0xed
mov byte [ebp - 0x1b], 0xe4
mov byte [ebp - 0x1a], al
mov byte [ebp - 0x19], 0x8c
mov byte [ebp - 0x17], 0x96
mov byte [ebp - 0x16], bl
mov byte [ebp - 0x15], 0xf1
mov byte [ebp - 0x14], dl
mov byte [ebp - 0x13], 0x97
mov byte [ebp - 0x12], al
mov byte [ebp - 0x11], dl
mov byte [ebp - 0xf], 0xdb
call fcn.004029b0
lea ecx, [ebp - 0x54]
mov dword [ebp - 4], 0
call fcn.00402a40
push eax
push 1
push 0
call dword [sym.imp.KERNEL32.dll_CreateMutexA]
mov ebx, eax
test ebx, ebx
je 0x409d7d
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0xb7
je 0x409d76
mov ecx, 0x103
xor eax, eax
lea edi, [ebp - 0xdba]
mov word [ebp - 0xdbc], 0
rep stosd dword es:[edi], eax
lea edx, [ebp - 0x158]
test edx, edx
stosw word es:[edi], ax
jne 0x409c9e
xor edi, edi
jmp 0x409cda
lea eax, [ebp - 0x158]
push eax
call dword [sym.imp.KERNEL32.dll_lstrlenA]
mov esi, eax
inc esi
lea eax, [esi + esi]
add eax, 3
and al, 0xfc
call fcn.0040e5a0
mov edi, esp
push esi
push edi
lea ecx, [ebp - 0x158]
push 0xffffffffffffffff
push ecx
push 0
push 0
mov word [edi], 0
call dword [sym.imp.KERNEL32.dll_MultiByteToWideChar]
or esi, 0xffffffff
push str._Update
push edi
push str.__s___s
lea edx, [ebp - 0xdbc]
push 0x207
push edx
call sub.MSVCRT.dll__snwprintf
lea eax, [ebp - 0xdbc]
push 0xea60
push eax
push 0
call fcn.0040a610
add esp, 0x20
mov edi, eax
push ebx
call dword [sym.imp.KERNEL32.dll_CloseHandle]
test edi, edi
jne 0x409d26
mov eax, dword [ebp + 8]
test eax, eax
je 0x409d26
mov dword [eax], 1
lea ecx, [ebp - 0x54]
mov dword [ebp - 0x40], 1
mov dword [ebp - 4], esi
call fcn.00402a00
lea ecx, [ebp - 0x158]
push ecx
call dword [sym.imp.SHLWAPI.dll_PathFileExistsA]
test eax, eax
je 0x409d5a
lea edx, [ebp - 0x158]
push 1
push edx
call fcn.004033b0
add esp, 8
mov eax, dword [ebp - 0x40]
mov ecx, dword [ebp - 0xc]
lea esp, [ebp - 0xdc8]
mov dword fs:[0], ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 4
push ebx
call dword [sym.imp.KERNEL32.dll_CloseHandle]
lea ecx, [ebp - 0x54]
mov dword [ebp - 4], esi
call fcn.00402a00
xor eax, eax
jmp 0x409d5d