Function at 0x40a1f0
Capabilities:
Check if file exists
Copy file
Move file
Read .ini file

Disassembly:
sub esp, 0xbf4
push ebx
push ebp
mov ebp, ecx
push edi
xor ebx, ebx
mov ecx, 0x40
xor eax, eax
lea edi, [esp + 0xa1]
mov byte [esp + 0xa0], bl
mov word [esp + 0x4f4], bx
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov ecx, 0x81
xor eax, eax
lea edi, [esp + 0x4f6]
mov byte [esp + 0x2ec], bl
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
mov ecx, 0x40
xor eax, eax
lea edi, [esp + 0x2ed]
mov byte [esp + 0x1e8], bl
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov ecx, 0x40
xor eax, eax
lea edi, [esp + 0x1e9]
mov byte [esp + 0x800], bl
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov ecx, 0xff
xor eax, eax
lea edi, [esp + 0x801]
mov byte [esp + 0x60], bl
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov ecx, 0xf
xor eax, eax
lea edi, [esp + 0x61]
mov byte [esp + 0x20], bl
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov ecx, 0xf
xor eax, eax
lea edi, [esp + 0x21]
mov byte [esp + 0x3f0], bl
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov ecx, 0x40
xor eax, eax
lea edi, [esp + 0x3f1]
mov dword [esp + 0xc], ebx
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov eax, dword [esp + 0xc04]
cmp eax, ebx
je 0x40a2d2
mov dword [eax], ebx
push esi
lea esi, [ebp + 0x118]
push esi
lea eax, [esp + 0x68]
push 0x40
push eax
push ebx
push str.version
mov ecx, 0x41d0a8
call fcn.00402a40
mov edi, dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringA]
push eax
call edi
test eax, eax
je 0x40a612
push esi
lea ecx, [esp + 0x808]
push 0x400
push ecx
push ebx
push 0x418924
mov ecx, 0x41d0a8
call fcn.00402a40
push eax
call edi
test eax, eax
je 0x40a612
lea edx, [esp + 0xa4]
push 0x104
push edx
push ebx
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
test eax, eax
je 0x40a39e
lea eax, [esp + 0x24]
push 0x40
lea ecx, [esp + 0xa8]
push eax
push ecx
call fcn.00403250
add esp, 0xc
test eax, eax
je 0x40a39e
lea edx, [esp + 0x24]
push 1
lea eax, [esp + 0x68]
push edx
push eax
mov byte [esp + 0xb0], bl
call fcn.0040c630
add esp, 0xc
test eax, eax
jg 0x40a387
mov ebx, 1
jmp 0x40a616
mov ecx, dword [esp + 0xc08]
mov dword [ecx], 1
mov dword [ebp + 0x21c], 1
lea edx, [ebp + 0x220]
push 0x104
lea eax, [esp + 0xa8]
push edx
push eax
call dword [sym.imp.KERNEL32.dll_lstrcpynA]
mov ecx, 0x41cf38
call fcn.00402a40
lea ecx, [esp + 0xa4]
push eax
push ecx
call dword [sym.imp.SHLWAPI.dll_PathAppendA]
push esi
lea edx, [esp + 0x3f8]
push 0x104
push edx
push ebx
push str.general
mov ecx, 0x41d0a8
call fcn.00402a40
push eax
call edi
test eax, eax
je 0x40a612
lea eax, [esp + 0x3f4]
lea ecx, [esp + 0xa4]
push eax
lea edx, [esp + 0x808]
push ecx
push edx
mov ecx, ebp
call fcn.0040acf0
test eax, eax
je 0x40a612
lea eax, [esp + 0x4f8]
push 0x104
push eax
lea ecx, [esp + 0xac]
push 0xffffffffffffffff
push ecx
push ebx
push ebx
call dword [sym.imp.KERNEL32.dll_MultiByteToWideChar]
test eax, eax
je 0x40a616
lea edx, [esp + 0x4f8]
push edx
call fcn.00408410
test eax, eax
je 0x40a616
cmp dword [ebp + 4], ebx
jne 0x40a612
lea eax, [esp + 0x24]
push 0x40
lea ecx, [esp + 0xa8]
push eax
push ecx
call fcn.00403250
add esp, 0xc
test eax, eax
je 0x40a616
lea edx, [esp + 0x24]
push 1
lea eax, [esp + 0x68]
push edx
push eax
call fcn.0040c630
add esp, 0xc
test eax, eax
jne 0x40a616
lea ecx, [esp + 0x2f0]
push 0x104
push ecx
push ebx
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
test eax, eax
je 0x40a616
lea edx, [esp + 0x2f0]
push 0x104
lea eax, [esp + 0x1f0]
push edx
push eax
call dword [sym.imp.KERNEL32.dll_lstrcpynA]
lea ecx, [esp + 0x1ec]
push ecx
call dword [sym.imp.SHLWAPI.dll_PathRemoveFileSpecA]
lea edx, [esp + 0x1ec]
push str.AddrUpdate.de
push edx
call dword [sym.imp.SHLWAPI.dll_PathAppendA]
mov esi, dword [sym.imp.KERNEL32.dll_MoveFileExA]
lea eax, [esp + 0x1ec]
push 1
lea ecx, [esp + 0x2f4]
push eax
push ecx
call esi
test eax, eax
je 0x40a616
lea edx, [esp + 0x2f0]
push ebx
lea eax, [esp + 0xa8]
push edx
push eax
call dword [sym.imp.KERNEL32.dll_CopyFileA]
lea ecx, [esp + 0xa4]
push 1
test eax, eax
push ecx
jne 0x40a561
call fcn.004033b0
add esp, 8
lea edx, [esp + 0x2f0]
lea eax, [esp + 0x1ec]
push 2
push edx
push eax
call esi
jmp 0x40a616
call fcn.004033b0
lea edx, [esp + 0x1f4]
push 1
push edx
call fcn.004033b0
mov ecx, 0x11
xor eax, eax
lea edi, [esp + 0x1b8]
add esp, 0x10
rep stosd dword es:[edi], eax
mov dword [esp + 0x14], eax
lea ecx, [esp + 0x2f0]
mov dword [esp + 0x18], eax
push ecx
push str.__s___Restart
lea edx, [esp + 0x708]
mov dword [esp + 0x24], eax
push 0x104
push edx
mov dword [esp + 0x1b8], 0x44
mov dword [esp + 0x30], eax
call sub.MSVCRT.dll__snprintf
add esp, 0x10
lea eax, [esp + 0x14]
lea ecx, [esp + 0x1a8]
lea edx, [esp + 0x700]
push eax
push ecx
push ebx
push ebx
push ebx
push ebx
push ebx
push ebx
push edx
push ebx
call fcn.004046f0
test eax, eax
je 0x40a616
mov eax, dword [esp + 0x14]
mov esi, dword [sym.imp.KERNEL32.dll_CloseHandle]
push eax
call esi
mov ecx, dword [esp + 0x18]
push ecx
call esi
mov edx, dword [0x41aa68]
push edx
call dword [sym.imp.KERNEL32.dll_SetEvent]
mov ebx, 1
jmp 0x40a616
mov ebx, dword [esp + 0x10]
lea eax, [esp + 0xa4]
push eax
call dword [sym.imp.SHLWAPI.dll_PathFileExistsA]
test eax, eax
pop esi
je 0x40a63b
lea ecx, [esp + 0xa0]
push 1
push ecx
call fcn.004033b0
add esp, 8
pop edi
mov eax, ebx
pop ebp
pop ebx
add esp, 0xbf4
ret 4