Function at 0x47f3c0
Capabilities:
Check if file exists
Check os version
Get common file path
Get file attributes
Get file version info
Get program files directory

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x4a1abc
mov eax, dword fs:[0]
push eax
sub esp, 0x268
mov eax, dword [0x4c9144]
xor eax, esp
mov dword [esp + 0x260], eax
push ebx
push esi
push edi
mov eax, dword [0x4c9144]
xor eax, esp
push eax
lea eax, [esp + 0x278]
mov dword fs:[0], eax
xor ebx, ebx
push 0x114
lea eax, [esp + 0x40]
push ebx
push eax
mov dword [esp + 0x28], ebx
call fcn.0048bb40
add esp, 0xc
lea ecx, [esp + 0x3c]
push ecx
mov dword [esp + 0x40], 0x114
call dword [sym.imp.KERNEL32.dll_GetVersionExW]
mov eax, 2
cmp dword [esp + 0x4c], eax
jne 0x47fa4e
mov ecx, dword [esp + 0x40]
cmp ecx, 5
jb 0x47fa4e
jne 0x47f454
cmp dword [esp + 0x44], ebx
je 0x47fa4e
mov dword [esp + 0x2c], ebx
mov dword [esp + 0x30], ebx
mov dword [esp + 0x34], ebx
lea edx, [esp + 0x2c]
mov dword [esp + 0x280], eax
push edx
mov edx, 0x20019
mov eax, str.SOFTWAREMicrosoftWindows_LiveMessenger
mov ecx, reloc.OLEAUT32.dll_SysReAllocString
call fcn.004191e0
mov esi, dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
test eax, eax
jne 0x47f545
lea eax, [esp + 0x2c]
push eax
mov ebx, 0x4d2dac
mov eax, str.InstallationDirectory
call fcn.0041d070
mov ecx, dword [0x4d2dac]
mov eax, dword [ecx - 0xc]
test eax, eax
je 0x47f4d5
lea edx, [eax - 1]
test edx, edx
js 0x47f4ec
cmp edx, eax
jg 0x47f4ec
cmp word [ecx + edx*2], 0x5c
jne 0x47f4d5
lea ecx, [eax - 1]
push ebx
mov eax, 1
call fcn.00418b70
mov ecx, dword [0x4d2dac]
cmp dword [ecx - 0xc], 0
je 0x47f4f6
push ecx
call esi
cmp eax, 0xffffffff
je 0x47f4f6
mov byte [0x4d2899], 1
jmp 0x47f543
push 0x80070057
call fcn.00417580
lea ecx, [esp + 0x10]
push ecx
mov ecx, 0x4ab684
call fcn.0041be20
lea eax, [esp + 0x10]
mov edi, 0x4d2dac
mov byte [esp + 0x280], 3
call fcn.00417620
mov byte [esp + 0x280], 2
mov eax, dword [esp + 0x10]
add eax, 0xfffffff0
lea edx, [eax + 0xc]
or ecx, 0xffffffff
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x47f543
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
xor ebx, ebx
mov ecx, dword [0x4d2dac]
cmp dword [ecx - 0xc], ebx
jne 0x47f5bc
lea ecx, [esp + 0x2c]
push ecx
mov edx, 0x20019
mov eax, str.SOFTWAREMicrosoftMSNMessenger
mov ecx, reloc.OLEAUT32.dll_SysReAllocString
call fcn.004191e0
test eax, eax
jne 0x47f5b6
lea edx, [esp + 0x2c]
push edx
mov ebx, 0x4d2dac
mov eax, str.InstallationDirectory
call fcn.0041d070
mov ecx, dword [0x4d2dac]
mov eax, dword [ecx - 0xc]
test eax, eax
je 0x47f5bc
lea edx, [eax - 1]
test edx, edx
js 0x47f4ec
cmp edx, eax
jg 0x47f4ec
cmp word [ecx + edx*2], 0x5c
jne 0x47f5bc
lea ecx, [eax - 1]
push ebx
mov eax, 1
call fcn.00418b70
mov ecx, dword [0x4d2dac]
mov eax, dword [ecx - 0xc]
test eax, eax
je 0x47f5cf
push ecx
call esi
cmp eax, 0xffffffff
jne 0x47f6da
lea eax, [esp + 0x10]
push eax
mov ecx, 0x4ab684
call fcn.0041be20
lea eax, [esp + 0x10]
mov edi, 0x4d2dac
mov byte [esp + 0x280], 4
call fcn.00417620
mov byte [esp + 0x280], 2
mov eax, dword [esp + 0x10]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x47f61c
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov edx, dword [0x4d2dac]
mov eax, dword [edx - 8]
mov ecx, 1
sub ecx, dword [edx - 4]
sub eax, 0x400
or eax, ecx
jge 0x47f64b
mov eax, 0x400
mov ecx, 0x4d2dac
call fcn.00417470
mov edx, dword [0x4d2dac]
push edx
push 0
push 0
push 0x26
push 0
call dword [sym.imp.SHELL32.dll_SHGetFolderPathW]
mov eax, dword [0x4d2dac]
mov ecx, dword [eax - 8]
push ecx
push eax
call fcn.00489835
add esp, 8
test eax, eax
js 0x47f4ec
mov ecx, dword [0x4d2dac]
cmp eax, dword [ecx - 8]
jg 0x47f4ec
mov dword [ecx - 0xc], eax
mov edx, dword [0x4d2dac]
xor ecx, ecx
mov word [edx + eax*2], cx
mov edx, dword [0x4d2dac]
mov eax, dword [edx - 0xc]
test eax, eax
je 0x47f6cb
lea ecx, [eax - 1]
test ecx, ecx
js 0x47f4ec
cmp ecx, eax
jg 0x47f4ec
cmp word [edx + ecx*2], 0x5c
jne 0x47f6cb
lea ecx, [eax - 1]
push 0x4d2dac
mov eax, 1
call fcn.00418b70
mov edx, str.MSN_Messenger
mov eax, 0x4d2dac
call fcn.00418b00
lea eax, [esp + 0x20]
push eax
xor bl, bl
call fcn.0041b8b0
mov byte [esp + 0x280], 5
mov ecx, dword [0x4d2dac]
mov eax, dword [ecx - 0xc]
test eax, eax
je 0x47f79a
push ecx
call esi
cmp eax, 0xffffffff
je 0x47f79a
mov ecx, dword [0x4d2dac]
push ecx
push str._smsnmsgr.exe
lea edi, [esp + 0x28]
call fcn.00417250
mov eax, dword [esp + 0x28]
add esp, 8
lea edx, [esp + 0x18]
push edx
push eax
call dword [sym.imp.VERSION.dll_GetFileVersionInfoSizeW]
mov edi, eax
test edi, edi
je 0x47f79a
push edi
call fcn.00487e0b
mov ecx, dword [esp + 0x1c]
mov edx, dword [esp + 0x24]
add esp, 4
mov esi, eax
push esi
push edi
push ecx
push edx
call dword [sym.imp.VERSION.dll_GetFileVersionInfoW]
test eax, eax
je 0x47f789
lea eax, [esp + 0x24]
push eax
lea ecx, [esp + 0x14]
push ecx
push 0x4ab668
push esi
mov dword [esp + 0x20], 0
call dword [sym.imp.VERSION.dll_VerQueryValueW]
test eax, eax
je 0x47f789
mov edx, dword [esp + 0x10]
cmp word [edx + 0xa], 8
jb 0x47f789
mov bl, 1
push esi
call fcn.00488a62
add esp, 4
test bl, bl
jne 0x47f988
push 0x114
lea eax, [esp + 0x158]
push 0
push eax
call fcn.0048bb40
add esp, 0xc
lea ecx, [esp + 0x154]
push ecx
mov dword [esp + 0x158], 0x114
call dword [sym.imp.KERNEL32.dll_GetVersionExW]
cmp dword [esp + 0x164], 2
jne 0x47f86b
mov ebx, 6
cmp dword [esp + 0x158], ebx
jb 0x47f86b
cmp byte [0x4d289a], 0
jne 0x47f854
lea esi, [esp + 0x10]
call fcn.0041b420
mov esi, eax
push str.OldMessenger2
push str.Setup
lea edx, [esp + 0x20]
mov byte [esp + 0x288], bl
mov ebx, dword [0x4d2918]
push edx
call fcn.0041b1b0
mov eax, dword [eax]
mov edx, dword [esi]
push eax
push 0
mov eax, 0x40
call fcn.0041b440
lea eax, [esp + 0x18]
call fcn.0041b950
lea eax, [esp + 0x10]
mov byte [esp + 0x280], 5
call fcn.0041b950
mov edi, str.http:__software.msgpluslive.net_getlive.php_srcsetup
call fcn.004188b0
lea eax, [esp + 0x20]
call fcn.0041b950
lea esi, [esp + 0x2c]
call fcn.0041d1b0
jmp 0x47fbd9
cmp byte [0x4d289a], 0
jne 0x47f8cc
lea esi, [esp + 0x10]
call fcn.0041b420
mov esi, eax
push str.OldMessenger
mov byte [esp + 0x284], 7
mov ebx, dword [0x4d2918]
push str.Setup
lea eax, [esp + 0x20]
push eax
mov dword [esp + 0x28], 4
call fcn.0041b1b0
mov eax, dword [eax]
mov edx, dword [esi]
push eax
push 0
mov eax, 0x41
mov dword [esp + 0x24], 0xc
call fcn.0041b440
mov byte [esp + 0x17], 1
cmp eax, 1
je 0x47f8d1
mov byte [esp + 0x17], 0
mov ebx, dword [esp + 0x1c]
test bl, 8
je 0x47f8e6
lea eax, [esp + 0x18]
and ebx, 0xfffffff7
call fcn.0041b950
mov dword [esp + 0x280], 5
test bl, 4
je 0x47f8ff
lea eax, [esp + 0x10]
call fcn.0041b950
cmp byte [esp + 0x17], 0
je 0x47f926
call fcn.0047fc00
mov edi, eax
lea eax, [esp + 0x20]
call fcn.0041b950
lea esi, [esp + 0x2c]
call fcn.0041d1b0
mov eax, edi
jmp 0x47fbdb
cmp byte [0x4d289a], 0
jne 0x47f854
lea esi, [esp + 0x10]
call fcn.0041b420
mov esi, eax
push str.DownloadCancelled
push str.Setup
lea ecx, [esp + 0x20]
mov byte [esp + 0x288], 8
mov ebx, dword [0x4d2918]
push ecx
call fcn.0041b1b0
mov edx, dword [eax]
push edx
mov edx, dword [esi]
push 0
mov eax, 0x40
call fcn.0041b440
lea eax, [esp + 0x18]
call fcn.0041b950
lea eax, [esp + 0x10]
call fcn.0041b950
jmp 0x47f854
mov ecx, dword [esp + 0x20]
lea eax, [esp + 0x38]
push eax
push ecx
mov dword [esp + 0x40], 0
call dword [sym.imp.KERNEL32.dll_GetBinaryTypeW]
cmp dword [esp + 0x38], 6
jne 0x47fa32
cmp byte [0x4d289a], 0
jne 0x47fa16
lea esi, [esp + 0x10]
call fcn.0041b420
mov esi, eax
push str.Is64Bits
push str.Setup
lea edx, [esp + 0x20]
mov byte [esp + 0x288], 9
mov ebx, dword [0x4d2918]
push edx
call fcn.0041b1b0
mov eax, dword [eax]
mov edx, dword [esi]
push eax
push 0
mov eax, 0x40
call fcn.0041b440
lea eax, [esp + 0x18]
call fcn.0041b950
lea eax, [esp + 0x10]
mov byte [esp + 0x280], 5
call fcn.0041b950
mov edi, str.http:__software.msgpluslive.net_setupchange.php_version64bits
call fcn.004188b0
lea eax, [esp + 0x20]
call fcn.0041b950
lea esi, [esp + 0x2c]
call fcn.0041d1b0
mov eax, 8
jmp 0x47fbdb
lea eax, [esp + 0x20]
call fcn.0041b950
lea esi, [esp + 0x2c]
call fcn.0041d1b0
mov eax, 1
jmp 0x47fbdb
mov edi, dword [sym.imp.USER32.dll_MessageBoxW]
cmp byte [0x4d289a], bl
jne 0x47fac2
lea esi, [esp + 0x24]
call fcn.0041b420
mov esi, eax
push str.InvalidWindows
mov dword [esp + 0x284], ebx
mov ebx, dword [0x4d2918]
push str.Setup
lea eax, [esp + 0x30]
push eax
mov dword [esp + 0x28], 1
call fcn.0041b1b0
mov edx, dword [0x4d2918]
cmp byte [edx + 0xc], 0
mov esi, dword [esi]
mov eax, dword [eax]
mov dword [esp + 0x1c], 3
mov ecx, 0x41
je 0x47fab2
mov ecx, 0x100041
push ecx
push esi
push eax
push 0
call edi
cmp eax, 1
jne 0x47fac2
mov bl, al
jmp 0x47fac4
xor bl, bl
test byte [esp + 0x1c], 2
je 0x47faf0
mov eax, dword [esp + 0x28]
and dword [esp + 0x1c], 0xfffffffd
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x47faf0
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov dword [esp + 0x280], 0xffffffff
test byte [esp + 0x1c], 1
je 0x47fb22
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x47fb22
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
test bl, bl
je 0x47fb30
call fcn.0047fc00
jmp 0x47fbdb
cmp byte [0x4d289a], 0
jne 0x47fbd9
lea esi, [esp + 0x28]
call fcn.0041b420
mov esi, eax
push str.DownloadCancelled
push str.Setup
lea ecx, [esp + 0x2c]
mov dword [esp + 0x288], 1
mov ebx, dword [0x4d2918]
push ecx
call fcn.0041b1b0
mov edx, dword [0x4d2918]
cmp byte [edx + 0xc], 0
mov ecx, dword [eax]
mov esi, dword [esi]
mov eax, 0x40
je 0x47fb87
mov eax, 0x100040
push eax
push esi
push ecx
push 0
call edi
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x47fbae
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov dword [esp + 0x280], 0xffffffff
mov eax, dword [esp + 0x28]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x47fbd9
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
xor eax, eax
mov ecx, dword [esp + 0x278]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x260]
xor ecx, esp
call fcn.00487efe
mov esp, ebp
pop ebp
ret