Function at 0x406d50
Capabilities:
Accept command line arguments
Check if file exists
Get common file path
Get program files directory

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x4330ed
mov eax, dword fs:[0]
push eax
sub esp, 0x450
mov eax, dword [0x43f090]
xor eax, esp
mov dword [esp + 0x448], eax
push ebx
push esi
push edi
mov eax, dword [0x43f090]
xor eax, esp
push eax
lea eax, [esp + 0x460]
mov dword fs:[0], eax
mov edi, dword [sym.imp.USER32.dll_GetSystemMetrics]
mov esi, dword [0x441888]
push 0
push 0xc
mov ebx, ecx
call edi
push eax
push 0xb
call edi
push eax
push 1
push 0x6a
push esi
call dword [sym.imp.USER32.dll_LoadImageW]
push eax
mov eax, dword [ebx + 0x30]
lea ecx, [ebx + 0x30]
push 1
push 0x80
push eax
mov dword [esp + 0x30], ecx
call dword [sym.imp.USER32.dll_SendMessageW]
mov eax, dword [0x44264c]
test eax, eax
jne 0x406dfb
push 0x10
call fcn.0041e942
xor ecx, ecx
add esp, 4
cmp eax, ecx
je 0x406df4
mov dword [eax], ecx
mov dword [eax + 4], ecx
mov dword [eax + 8], ecx
mov dword [eax + 0xc], ecx
jmp 0x406df6
xor eax, eax
mov dword [0x44264c], eax
lea esi, [esp + 0x18]
xor edi, edi
call fcn.00411440
mov eax, dword [eax]
mov dword [ebx + 0x5c], eax
mov eax, dword [esp + 0x18]
cmp eax, edi
je 0x406e1b
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
cmp dword [0x44264c], edi
jne 0x406e45
push 0x10
call fcn.0041e942
add esp, 4
cmp eax, edi
je 0x406e3e
mov dword [eax], edi
mov dword [eax + 4], edi
mov dword [eax + 8], edi
mov dword [eax + 0xc], edi
jmp 0x406e40
xor eax, eax
mov dword [0x44264c], eax
lea eax, [esp + 0x18]
push eax
call fcn.00411190
mov dword [esp + 0x468], 0
mov ecx, dword [esp + 0x20]
mov edx, dword [ecx]
mov eax, dword [eax]
push edx
lea edi, [ebx + 0x50]
push edi
mov ecx, eax
call fcn.0040ff30
test eax, eax
mov dword [esp + 0x468], 0xffffffff
mov eax, dword [esp + 0x18]
sete byte [esp + 0x27]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x406ea0
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
cmp byte [esp + 0x27], 0
jne 0x4076fe
push 0x3e9
lea ecx, [esp + 0x1c]
mov eax, edi
call fcn.00410220
mov dword [esp + 0x468], 1
mov eax, dword [eax]
push ecx
mov ecx, esp
mov dword [esp + 0x20], esp
mov dword [ecx], eax
test eax, eax
je 0x406edd
mov ecx, dword [eax]
mov edx, dword [ecx + 4]
push eax
call edx
lea esi, [ebx + 0x68]
call fcn.0040af10
test eax, eax
jge 0x406ef6
cmp eax, 0x80004002
je 0x406ef6
push eax
call fcn.0041e480
mov dword [esp + 0x468], 0xffffffff
mov eax, dword [esp + 0x18]
test eax, eax
je 0x406f11
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
push 0x3fa
lea ecx, [esp + 0x1c]
mov eax, edi
call fcn.00410220
mov dword [esp + 0x468], 2
mov eax, dword [eax]
push ecx
mov ecx, esp
mov dword [esp + 0x20], esp
mov dword [ecx], eax
test eax, eax
je 0x406f43
mov ecx, dword [eax]
mov edx, dword [ecx + 4]
push eax
call edx
lea esi, [ebx + 0x6c]
call fcn.0040af10
test eax, eax
jge 0x406f5c
cmp eax, 0x80004002
je 0x406f5c
push eax
call fcn.0041e480
mov dword [esp + 0x468], 0xffffffff
mov eax, dword [esp + 0x18]
test eax, eax
je 0x406f77
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
push 0x3fb
lea ecx, [esp + 0x1c]
mov eax, edi
call fcn.00410220
mov dword [esp + 0x468], 3
mov eax, dword [eax]
push ecx
mov ecx, esp
mov dword [esp + 0x20], esp
mov dword [ecx], eax
test eax, eax
je 0x406fa9
mov ecx, dword [eax]
mov edx, dword [ecx + 4]
push eax
call edx
lea esi, [ebx + 0x70]
call fcn.0040af10
test eax, eax
jge 0x406fc2
cmp eax, 0x80004002
je 0x406fc2
push eax
call fcn.0041e480
mov dword [esp + 0x468], 0xffffffff
mov eax, dword [esp + 0x18]
test eax, eax
je 0x406fdd
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov eax, dword [ebx + 0x68]
test eax, eax
sete cl
test cl, cl
jne 0x4076fe
cmp dword [ebx + 0x6c], 0
sete cl
test cl, cl
jne 0x4076fe
cmp dword [ebx + 0x70], 0
sete cl
test cl, cl
jne 0x4076fe
push ecx
mov ecx, esp
mov dword [esp + 0x20], esp
mov dword [ecx], eax
test eax, eax
je 0x407020
mov ecx, dword [eax]
mov edx, dword [ecx + 4]
push eax
call edx
push 0x3f0
lea ecx, [esp + 0x20]
call fcn.00410270
add esp, 8
lea esi, [ebx + 0x74]
mov ecx, esi
mov dword [esp + 0x468], 4
call fcn.0040add0
mov dword [esp + 0x468], 0xffffffff
mov eax, dword [esp + 0x18]
test eax, eax
je 0x407061
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
cmp dword [esi], 0
sete al
test al, al
je 0x407075
mov eax, 0xffffffff
jmp 0x407701
call fcn.00403360
push 0x3ff
lea ecx, [esp + 0x44]
mov eax, edi
call fcn.00410220
lea ecx, [esp + 0x18]
mov dword [esp + 0x468], 5
call fcn.0040ae10
mov byte [esp + 0x468], 7
mov eax, dword [esp + 0x40]
test eax, eax
je 0x4070b6
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov eax, dword [esp + 0x18]
test eax, eax
je 0x4070ca
mov ecx, dword [eax]
mov edx, dword [ecx + 0x68]
push 0
push 1
push eax
call edx
push 0x400
lea ecx, [esp + 0x40]
mov eax, edi
call fcn.00410220
lea ecx, [esp + 0x30]
mov byte [esp + 0x468], 8
call fcn.0040ae10
mov byte [esp + 0x468], 0xa
mov eax, dword [esp + 0x3c]
test eax, eax
je 0x407103
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov eax, dword [esp + 0x30]
test eax, eax
je 0x407117
mov ecx, dword [eax]
mov edx, dword [ecx + 0x68]
push 0
push 1
push eax
call edx
mov ecx, dword [esi]
xor eax, eax
mov dword [esp + 0x2c], eax
test ecx, ecx
je 0x407138
mov eax, dword [ecx]
mov eax, dword [eax]
lea edx, [esp + 0x2c]
push edx
push 0x438d80
push ecx
call eax
mov eax, dword [esp + 0x2c]
xor ecx, ecx
mov byte [esp + 0x468], 0xb
mov dword [esp + 0x28], ecx
test eax, eax
je 0x40715f
mov ecx, dword [eax]
lea edx, [esp + 0x28]
push edx
push 0x4388b0
push eax
mov eax, dword [ecx]
call eax
mov ecx, dword [esp + 0x28]
mov byte [esp + 0x468], 0xc
test ecx, ecx
je 0x407180
mov edx, dword [ecx]
mov edx, dword [edx + 0xc]
lea eax, [esp + 0x1c]
push eax
push 1
push 0
push 0x445
call edx
mov eax, dword [esi]
test eax, eax
jne 0x407190
push 0x80004003
call fcn.0041e480
mov ecx, dword [eax]
mov edx, dword [ecx + 0x68]
push 4
push 0
push eax
call edx
mov eax, dword [esi]
test eax, eax
jne 0x4071ac
push 0x80004003
call fcn.0041e480
mov ecx, dword [eax]
mov edx, dword [ecx + 0x68]
push 0
push 0x80
push eax
call edx
mov eax, dword [ebx + 0x68]
test eax, eax
jne 0x4071cc
push 0x80004003
call fcn.0041e480
mov ecx, dword [eax]
mov edx, dword [ecx + 0x5c]
push 0
push 0x10000000
push eax
call edx
mov eax, dword [ebx + 0x6c]
test eax, eax
jne 0x4071ec
push 0x80004003
call fcn.0041e480
mov ecx, dword [eax]
mov edx, dword [ecx + 0x5c]
push 0x10000000
push 0
push eax
call edx
mov eax, dword [ebx + 0x70]
test eax, eax
jne 0x40720c
push 0x80004003
call fcn.0041e480
mov ecx, dword [eax]
mov edx, dword [ecx + 0x5c]
push 0x10000000
push 0
push eax
call edx
mov eax, dword [ebx + 0x70]
push ecx
mov ecx, esp
mov dword [esp + 0x20], esp
mov dword [ecx], eax
test eax, eax
je 0x407233
mov ecx, dword [eax]
mov edx, dword [ecx + 4]
push eax
call edx
push 0x404
lea ecx, [esp + 0x1c]
call fcn.00410270
add esp, 8
lea ecx, [ebx + 0x78]
mov byte [esp + 0x468], 0xd
call fcn.0040ae50
mov byte [esp + 0x468], 0xc
mov eax, dword [esp + 0x14]
test eax, eax
je 0x40726c
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov eax, dword [ebx + 0x70]
push ecx
mov ecx, esp
mov dword [esp + 0x20], esp
mov dword [ecx], eax
test eax, eax
je 0x407284
mov ecx, dword [eax]
mov edx, dword [ecx + 4]
push eax
call edx
push 0x405
lea ecx, [esp + 0x1c]
call fcn.00410270
add esp, 8
lea ecx, [ebx + 0x7c]
mov byte [esp + 0x468], 0xe
call fcn.0040ae90
mov byte [esp + 0x468], 0xc
mov eax, dword [esp + 0x14]
test eax, eax
je 0x4072bd
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov esi, dword [esp + 0x20]
mov eax, dword [esi]
push 0
push 0
push 0x428
push eax
call dword [sym.imp.USER32.dll_SendMessageW]
push 0x3f8
lea ecx, [esp + 0x18]
mov eax, edi
call fcn.00410220
lea ecx, [ebx + 0x80]
mov byte [esp + 0x468], 0xf
call fcn.0040aed0
mov byte [esp + 0x468], 0xc
mov eax, dword [esp + 0x14]
test eax, eax
je 0x40730e
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
push 0x3f5
lea ecx, [esp + 0x18]
mov eax, edi
call fcn.00410220
lea ecx, [ebx + 0x84]
mov byte [esp + 0x468], 0x10
call fcn.0040aed0
mov byte [esp + 0x468], 0xc
mov eax, dword [esp + 0x14]
test eax, eax
je 0x407349
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
cmp dword [ebx + 0x54], 0
sete al
test al, al
sete al
test al, al
je 0x407374
mov eax, dword [ebx + 0x54]
test eax, eax
jne 0x40736a
push 0x80004003
call fcn.0041e480
mov ecx, dword [eax]
mov edx, dword [ecx + 0x68]
push 2
push eax
call edx
mov eax, dword [esi]
push 0x4388c0
push eax
call dword [sym.imp.USER32.dll_SetWindowTextW]
mov ecx, dword [esi]
push 0xfffffffffffffff0
push ecx
call dword [sym.imp.USER32.dll_GetWindowLongW]
mov ecx, eax
and ecx, 0xff7fffff
or ecx, 0x20000
cmp eax, ecx
je 0x4073ab
mov edx, dword [esi]
push ecx
push 0xfffffffffffffff0
push edx
call dword [sym.imp.USER32.dll_SetWindowLongW]
mov edi, dword [esp + 0x20]
push edi
call fcn.0040b730
call dword [sym.imp.USER32.dll_DisableProcessWindowsGhosting]
push ebx
call fcn.00409160
xor eax, eax
push 0x206
push eax
lea ecx, [esp + 0x4e]
push ecx
mov word [esp + 0x50], ax
call fcn.00420660
mov eax, dword [edi]
add esp, 0xc
push 0
push 0x26
lea edx, [esp + 0x4c]
push edx
push eax
call dword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathW]
push 0x4388d0
lea ecx, [esp + 0x48]
push ecx
call dword [sym.imp.SHLWAPI.dll_PathAppendW]
push ecx
mov edx, esp
mov dword [esp + 0x20], esp
push edx
lea edi, [esp + 0x4c]
call fcn.0040b5a0
mov byte [esp + 0x46c], 0x11
mov ecx, dword [ebx + 0x74]
test ecx, ecx
jne 0x407427
push 0x80004003
call fcn.0041e480
mov byte [esp + 0x46c], 0xc
call fcn.0040b690
lea ecx, [esp + 0x34]
xor esi, esi
call fcn.00402eb0
mov byte [esp + 0x468], 0x12
mov eax, dword [esp + 0x34]
push eax
call dword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
je 0x4074d1
mov eax, dword [ebx + 0x68]
test eax, eax
jne 0x407467
push 0x80004003
call fcn.0041e480
mov ecx, dword [eax]
mov edx, dword [ecx + 0x5c]
push 0x10000000
push 0
push eax
call edx
mov eax, dword [ebx + 0x6c]
test eax, eax
jne 0x407487
push 0x80004003
call fcn.0041e480
mov ecx, dword [eax]
mov edx, dword [ecx + 0x5c]
push 0x10000000
push 0
push eax
call edx
mov eax, dword [ebx + 0x70]
test eax, eax
jne 0x4074a7
push 0x80004003
call fcn.0041e480
mov ecx, dword [eax]
mov edx, dword [ecx + 0x5c]
push 0
push 0x10000000
push eax
call edx
mov eax, dword [esp + 0x20]
mov ecx, dword [eax]
push 0
push 0
push 0x426
push ecx
call dword [sym.imp.USER32.dll_PostMessageW]
mov esi, 1
call dword [sym.imp.KERNEL32.dll_GetCommandLineW]
push str._Update
push eax
mov dword [esp + 0x24], eax
call dword [sym.imp.SHLWAPI.dll_StrStrIW]
test eax, eax
je 0x407552
lea ecx, [esp + 0x14]
call fcn.00403680
mov edi, 0x4426b4
mov byte [esp + 0x468], 0x13
call fcn.00403de0
lea ecx, [esp + 0x14]
mov byte [esp + 0x468], 0x12
call fcn.00402a80
lea ecx, [esp + 0x14]
call fcn.004037d0
mov edi, 0x4426b8
mov byte [esp + 0x468], 0x14
call fcn.00403de0
lea ecx, [esp + 0x14]
mov byte [esp + 0x468], 0x12
call fcn.00402a80
mov dword [ebx + 0xbc], 1
jmp 0x407608
xor edx, edx
push 0x206
push edx
lea eax, [esp + 0x256]
push eax
mov word [esp + 0x258], dx
call fcn.00420660
mov edx, dword [0x441884]
add esp, 0xc
push 0x104
lea ecx, [esp + 0x250]
push ecx
push 0x6d
push edx
call dword [sym.imp.USER32.dll_LoadStringW]
lea eax, [esp + 0x14]
push eax
lea ecx, [esp + 0x250]
call fcn.00404c80
lea ebx, [esp + 0x14]
mov byte [esp + 0x468], 0x15
call fcn.0040a840
call fcn.0040a7c0
mov eax, ebx
mov edi, 0x4426b4
call fcn.00403de0
test esi, esi
jne 0x4075d3
mov eax, ebx
mov edi, 0x4426b8
call fcn.00403de0
jmp 0x4075f7
lea ecx, [esp + 0x38]
call fcn.004037d0
mov edi, 0x4426b8
mov byte [esp + 0x468], 0x16
call fcn.00403de0
lea ecx, [esp + 0x38]
call fcn.00402a80
lea ecx, [esp + 0x14]
mov byte [esp + 0x468], 0x12
call fcn.00402a80
test esi, esi
jne 0x407634
mov ecx, dword [esp + 0x1c]
push str._Silence
push ecx
call dword [sym.imp.SHLWAPI.dll_StrStrIW]
test eax, eax
je 0x407634
mov edx, dword [esp + 0x20]
mov eax, dword [edx]
push esi
push esi
push 0x427
push eax
call dword [sym.imp.USER32.dll_PostMessageW]
lea ecx, [esp + 0x14]
push ecx
mov ecx, 0x43649c
call fcn.00404c80
mov byte [esp + 0x468], 0x17
mov ecx, 0x4388fc
test esi, esi
jne 0x407659
mov ecx, 0x438904
lea edx, [esp + 0x20]
push edx
call fcn.00404c80
lea eax, [esp + 0x20]
push eax
lea ecx, [esp + 0x18]
mov byte [esp + 0x46c], 0x18
call fcn.00403920
add esp, 4
lea ecx, [esp + 0x20]
call fcn.00402a80
lea ecx, [esp + 0x14]
call fcn.00402a80
lea ecx, [esp + 0x34]
call fcn.00402a80
mov byte [esp + 0x468], 0xb
mov eax, dword [esp + 0x28]
test eax, eax
je 0x4076af
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov byte [esp + 0x468], 0xa
mov eax, dword [esp + 0x2c]
test eax, eax
je 0x4076c7
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov byte [esp + 0x468], 7
mov eax, dword [esp + 0x30]
test eax, eax
je 0x4076df
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov dword [esp + 0x468], 0xffffffff
mov eax, dword [esp + 0x18]
test eax, eax
je 0x4076fa
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
xor eax, eax
jmp 0x407701
or eax, 0xffffffff
mov ecx, dword [esp + 0x460]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x448]
xor ecx, esp
call fcn.0041e5bb
mov esp, ebp
pop ebp
ret