Function at 0x407bf0
Capabilities:
Get common file path

Disassembly:
push 0xffffffffffffffff
push 0x424be9
mov eax, dword fs:[0]
push eax
mov dword fs:[0], esp
sub esp, 0x574
push ebx
push ebp
push esi
mov dword [esp + 0x40], ecx
push edi
mov ecx, 0x40
xor eax, eax
lea edi, [esp + 0x481]
mov byte [esp + 0x480], 0
mov byte [esp + 0x174], 0
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 + 0x175]
push 0x104
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
lea eax, [esp + 0x178]
xor ebx, ebx
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
mov cl, byte [esp + 0x13]
push ebx
mov byte [esp + 0x54], cl
lea ecx, [esp + 0x54]
call fcn.00402800
or ebp, 0xffffffff
lea edi, [esp + 0x174]
mov ecx, ebp
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
lea edx, [esp + 0x174]
push ecx
push edx
lea ecx, [esp + 0x58]
call fcn.00402b60
push 0x50
mov dword [esp + 0x590], ebx
call fcn.00419194
add esp, 4
mov dword [esp + 0x68], eax
cmp eax, ebx
mov byte [esp + 0x58c], 1
je 0x407cc9
lea ecx, [esp + 0x50]
push ecx
mov ecx, eax
call fcn.004067a0
mov dword [esp + 0x4c], eax
jmp 0x407ccd
mov dword [esp + 0x4c], ebx
mov esi, dword [esp + 0x4c]
mov byte [esp + 0x58c], 0
cmp esi, ebx
je 0x408325
lea edx, [esp + 0x480]
push edx
push 0x104
call dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryA]
test eax, eax
je 0x40837b
mov ecx, esi
call fcn.00406da0
mov ebx, eax
mov ecx, 0x40
xor eax, eax
lea edi, [esp + 0x71]
mov byte [esp + 0x70], 0
mov dword [esp + 0x6c], ebx
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
lea eax, [esp + 0x70]
push eax
push 0x104
call dword [sym.imp.KERNEL32.dll_GetTempPathA]
test eax, eax
je 0x4083d6
mov cl, byte [esp + 0x13]
push 0
mov byte [esp + 0x18], cl
lea ecx, [esp + 0x18]
call fcn.00402800
mov eax, dword [ebx + 4]
mov byte [esp + 0x58c], 4
mov esi, dword [eax]
cmp esi, eax
je 0x407ef8
mov edx, dword [0x42622c]
lea ebp, [esi + 8]
push edx
push 0
lea eax, [ebp + 0x14]
lea ecx, [esp + 0x1c]
push eax
call fcn.004038a0
push str.SETUPSETUP.INI
lea ecx, [esp + 0x18]
call fcn.004089a0
test eax, eax
je 0x407da9
push str._setup_setup.ini
lea ecx, [esp + 0x18]
call fcn.004089a0
test eax, eax
je 0x407da9
mov esi, dword [esi]
mov eax, dword [ebx + 4]
cmp esi, eax
jne 0x407d5e
jmp 0x407ef8
mov edi, 0x42c4e8
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [0x42622c]
repne scasb al, byte es:[edi]
mov esi, dword [esp + 0x1c]
not ecx
dec ecx
push ecx
push edx
push 0x42c4e8
lea ecx, [esp + 0x20]
call fcn.004059a0
inc eax
push esi
lea ecx, [esp + 0x38]
push eax
push ecx
lea ecx, [esp + 0x20]
call fcn.00405780
mov edx, dword [0x42622c]
lea ecx, [esp + 0x14]
push edx
push 0
push eax
mov byte [esp + 0x598], 5
call fcn.004038a0
push 1
lea ecx, [esp + 0x38]
mov byte [esp + 0x590], 4
call fcn.00402800
mov al, byte [esp + 0x13]
push 0
lea ecx, [esp + 0x28]
mov byte [esp + 0x28], al
call fcn.00402800
lea edi, [esp + 0x70]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
lea ecx, [esp + 0x74]
push ecx
lea ecx, [esp + 0x2c]
call fcn.00402b60
lea edx, [esp + 0x14]
lea eax, [esp + 0x24]
push edx
lea ecx, [esp + 0x38]
mov bl, 6
push eax
push ecx
mov byte [esp + 0x598], bl
call fcn.00405d30
add esp, 0xc
mov edx, dword [0x42622c]
lea ecx, [esp + 0x14]
push edx
push 0
push eax
mov byte [esp + 0x598], 7
call fcn.004038a0
push 1
lea ecx, [esp + 0x38]
mov byte [esp + 0x590], bl
call fcn.00402800
push 1
lea ecx, [esp + 0x28]
mov byte [esp + 0x590], 4
call fcn.00402800
lea eax, [esp + 0x14]
lea ecx, [esp + 0x34]
push eax
push str.Do_CMainWindow::ExtractFile:
push ecx
call fcn.00403740
add esp, 0xc
push eax
mov byte [esp + 0x590], 8
call fcn.004012f0
mov ecx, eax
call fcn.00401360
push 1
lea ecx, [esp + 0x38]
mov byte [esp + 0x590], 4
call fcn.00402800
mov ecx, dword [esp + 0x44]
lea edx, [esp + 0x14]
lea eax, [esp + 0x50]
push edx
push eax
push ebp
call fcn.00408620
mov ebx, dword [esp + 0x6c]
lea ecx, [esp + 0x60]
call fcn.00403de0
lea ecx, [esp + 0x14]
mov byte [esp + 0x58c], 9
push ecx
lea ecx, [esp + 0x64]
call fcn.00408e00
test al, al
je 0x4083ed
mov dl, byte [esp + 0x13]
push 0
lea ecx, [esp + 0x28]
mov byte [esp + 0x28], dl
call fcn.00402800
mov edi, str.bitmap
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push str.bitmap
lea ecx, [esp + 0x2c]
call fcn.00402b60
lea eax, [esp + 0x24]
lea ecx, [esp + 0x60]
push eax
mov byte [esp + 0x590], 0xb
call fcn.00409170
push 1
lea ecx, [esp + 0x28]
mov esi, eax
mov byte [esp + 0x590], 9
call fcn.00402800
test esi, esi
je 0x40846d
mov eax, dword [esi + 4]
mov eax, dword [eax]
mov dword [esp + 0x48], eax
mov ecx, dword [esi + 4]
cmp eax, ecx
je 0x407fee
lea edx, [eax + 0xc]
mov edi, str.Start_Bitmap
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
mov ecx, dword [edx + 8]
push str.Start_Bitmap
push ecx
push eax
mov ecx, edx
call fcn.00405e60
test eax, eax
je 0x407fd1
lea ecx, [esp + 0x48]
call fcn.00405a10
mov ecx, dword [esi + 4]
mov eax, dword [esp + 0x48]
cmp eax, ecx
jne 0x407f93
jmp 0x407fee
mov edx, dword [esp + 0x48]
mov ecx, dword [0x42622c]
push ecx
push 0
lea eax, [edx + 0x1c]
mov edx, dword [esp + 0x4c]
push eax
lea ecx, [edx + 8]
call fcn.004038a0
mov ecx, 0x40
xor eax, eax
lea edi, [esp + 0x37d]
mov byte [esp + 0x37c], 0
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 + 0x279]
mov byte [esp + 0x278], 0
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov eax, dword [esp + 0x44]
add eax, 8
mov dword [esp + 0x68], eax
mov eax, dword [eax + 4]
test eax, eax
jne 0x40803b
mov eax, 0x426230
lea ecx, [esp + 0x278]
push eax
push ecx
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
mov eax, dword [ebx + 4]
mov ebp, dword [eax]
cmp ebp, eax
je 0x40812a
mov edx, dword [0x42622c]
lea ebx, [ebp + 8]
push edx
push 0
lea eax, [ebx + 0x14]
lea ecx, [esp + 0x1c]
push eax
call fcn.004038a0
mov edi, 0x42c4e8
or ecx, 0xffffffff
xor eax, eax
mov edx, dword [0x42622c]
repne scasb al, byte es:[edi]
mov esi, dword [esp + 0x1c]
not ecx
dec ecx
push ecx
push edx
push 0x42c4e8
lea ecx, [esp + 0x20]
call fcn.004059a0
inc eax
push esi
lea ecx, [esp + 0x38]
push eax
push ecx
lea ecx, [esp + 0x20]
call fcn.00405780
mov edx, dword [0x42622c]
lea ecx, [esp + 0x14]
push edx
push 0
push eax
mov byte [esp + 0x598], 0xd
call fcn.004038a0
push 1
lea ecx, [esp + 0x38]
mov byte [esp + 0x590], 9
call fcn.00402800
mov eax, dword [esp + 0x18]
test eax, eax
jne 0x4080e5
mov eax, 0x426230
push eax
lea eax, [esp + 0x380]
push eax
call dword [sym.imp.KERNEL32.dll_lstrcpyA]
mov esi, dword [sym.imp.USER32.dll_CharUpperA]
lea ecx, [esp + 0x278]
push ecx
call esi
lea edx, [esp + 0x37c]
push eax
push edx
call esi
push eax
call dword [sym.imp.KERNEL32.dll_lstrcmpA]
test eax, eax
je 0x408168
mov eax, dword [esp + 0x6c]
mov ebp, dword [ebp]
cmp ebp, dword [eax + 4]
jne 0x408057
lea ecx, [esp + 0x60]
mov byte [esp + 0x58c], 4
call fcn.00408d40
mov eax, dword [esp + 0x18]
xor esi, esi
cmp eax, esi
je 0x4082e3
lea ecx, [eax - 1]
mov al, byte [eax - 1]
test al, al
je 0x4082da
cmp al, 0xff
je 0x4082da
dec al
mov byte [ecx], al
jmp 0x4082e3
mov cl, byte [esp + 0x13]
push 0
mov byte [esp + 0x28], cl
lea ecx, [esp + 0x28]
call fcn.00402800
lea edi, [esp + 0x70]
or ecx, 0xffffffff
xor eax, eax
push 1
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov ebp, ecx
lea ecx, [esp + 0x28]
push ebp
call fcn.00402ca0
test al, al
je 0x4081bd
mov edi, dword [esp + 0x28]
mov ecx, ebp
mov edx, ecx
lea esi, [esp + 0x70]
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
push ebp
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea ecx, [esp + 0x28]
call fcn.00402c00
lea eax, [esp + 0x14]
lea ecx, [esp + 0x24]
push eax
lea edx, [esp + 0x38]
push ecx
push edx
mov byte [esp + 0x598], 0xe
call fcn.00405d30
add esp, 0xc
mov ecx, dword [0x42622c]
xor esi, esi
push ecx
push esi
push eax
lea ecx, [esp + 0x20]
mov byte [esp + 0x598], 0xf
call fcn.004038a0
push 1
lea ecx, [esp + 0x38]
mov byte [esp + 0x590], 0xe
call fcn.00402800
push 1
lea ecx, [esp + 0x28]
mov byte [esp + 0x590], 9
call fcn.00402800
lea edx, [esp + 0x14]
lea eax, [esp + 0x34]
push edx
push str.Do_CMainWindow::ExtractFile__:
push eax
call fcn.00403740
add esp, 0xc
push eax
mov byte [esp + 0x590], 0x10
call fcn.004012f0
mov ecx, eax
call fcn.00401360
mov eax, dword [esp + 0x38]
mov byte [esp + 0x58c], 9
cmp eax, esi
je 0x408277
lea ecx, [eax - 1]
mov al, byte [eax - 1]
test al, al
je 0x40826e
cmp al, 0xff
je 0x40826e
dec al
mov byte [ecx], al
jmp 0x408277
push ecx
call fcn.0040c880
add esp, 4
lea ecx, [esp + 0x14]
lea edx, [esp + 0x50]
push ecx
mov ecx, dword [esp + 0x48]
push edx
push ebx
call fcn.00408620
mov eax, dword [0x42622c]
lea ecx, [esp + 0x14]
push eax
push esi
push ecx
mov ecx, dword [esp + 0x74]
call fcn.004038a0
lea ecx, [esp + 0x60]
mov byte [esp + 0x58c], 4
call fcn.00408d40
mov ecx, dword [esp + 0x18]
cmp ecx, esi
je 0x408514
mov al, byte [ecx - 1]
dec ecx
test al, al
je 0x40850b
cmp al, 0xff
je 0x40850b
dec al
mov byte [ecx], al
jmp 0x408514
push ecx
call fcn.0040c880
add esp, 4
mov eax, dword [esp + 0x54]
mov dword [esp + 0x18], esi
cmp eax, esi
mov dword [esp + 0x1c], esi
mov dword [esp + 0x20], esi
mov dword [esp + 0x58c], 0xffffffff
je 0x408550
lea ecx, [eax - 1]
mov al, byte [eax - 1]
test al, al
je 0x408547
cmp al, 0xff
je 0x408547
dec al
mov byte [ecx], al
jmp 0x408550
lea edx, [esp + 0x50]
lea eax, [esp + 0x34]
push edx
push str.Failed_new_nckCPackageExtractor__and_strPackagedFile_is:
push eax
call fcn.00403740
add esp, 0xc
push eax
mov byte [esp + 0x590], 2
call fcn.004012f0
mov ecx, eax
call fcn.00401360
push 1
lea ecx, [esp + 0x38]
mov byte [esp + 0x590], 0
call fcn.00402800
push 1
lea ecx, [esp + 0x54]
mov dword [esp + 0x590], ebp
call fcn.00402800
jmp 0x408569
mov cl, byte [esp + 0x13]
push ebx
mov byte [esp + 0x38], cl
lea ecx, [esp + 0x38]
call fcn.00402800
mov edi, str.Cant_get_CurrentDirectory.
mov ecx, ebp
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push str.Cant_get_CurrentDirectory.
lea ecx, [esp + 0x3c]
call fcn.00402b60
lea edx, [esp + 0x34]
mov byte [esp + 0x58c], 3
push edx
call fcn.004012f0
mov ecx, eax
call fcn.00401360
push 1
lea ecx, [esp + 0x38]
mov byte [esp + 0x590], 0
call fcn.00402800
push 1
lea ecx, [esp + 0x54]
mov dword [esp + 0x590], ebp
call fcn.00402800
jmp 0x408550
lea eax, [esp + 0x14]
lea ecx, [esp + 0x34]
push eax
push str.Cant_load_setup.ini:
push ecx
call fcn.00403740
add esp, 0xc
push eax
mov byte [esp + 0x590], 0xa
call fcn.004012f0
mov ecx, eax
call fcn.00401360
push 1
lea ecx, [esp + 0x38]
mov byte [esp + 0x590], 9
call fcn.00402800
lea ecx, [esp + 0x60]
mov byte [esp + 0x58c], 4
call fcn.00408d40
push 1
lea ecx, [esp + 0x18]
mov byte [esp + 0x590], 0
call fcn.00402800
push 1
lea ecx, [esp + 0x54]
mov dword [esp + 0x590], 0xffffffff
call fcn.00402800
xor al, al
jmp 0x408605
mov dl, byte [esp + 0x13]
push 0
lea ecx, [esp + 0x38]
mov byte [esp + 0x38], dl
call fcn.00402800
mov edi, str.Cant_get_bitmap_section.
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push str.Cant_get_bitmap_section.
lea ecx, [esp + 0x3c]
call fcn.00402b60
lea eax, [esp + 0x34]
mov byte [esp + 0x58c], 0xc
push eax
call fcn.004012f0
mov ecx, eax
call fcn.00401360
push 1
lea ecx, [esp + 0x38]
mov byte [esp + 0x590], 9
call fcn.00402800
lea ecx, [esp + 0x60]
mov byte [esp + 0x58c], 4
call fcn.00408d40
push 1
lea ecx, [esp + 0x18]
mov byte [esp + 0x590], 0
call fcn.00402800
push 1
lea ecx, [esp + 0x54]
mov dword [esp + 0x590], 0xffffffff
call fcn.00402800
xor al, al
jmp 0x408605
push ecx
call fcn.0040c880
add esp, 4
mov eax, dword [esp + 0x54]
mov dword [esp + 0x18], esi
cmp eax, esi
mov dword [esp + 0x1c], esi
mov dword [esp + 0x20], esi
mov dword [esp + 0x58c], 0xffffffff
je 0x408550
lea ecx, [eax - 1]
mov al, byte [eax - 1]
test al, al
je 0x408547
cmp al, 0xff
je 0x408547
dec al
mov byte [ecx], al
jmp 0x408550
push ecx
call fcn.0040c880
add esp, 4
mov esi, dword [esp + 0x4c]
mov ecx, esi
call fcn.00406910
push esi
call fcn.0040c880
add esp, 4
or ebp, 0xffffffff
xor ebx, ebx
mov cl, byte [esp + 0x13]
mov edi, str.Finish_CMainWindow::ExtraStartBitmap__.
mov byte [esp + 0x24], cl
mov ecx, ebp
xor eax, eax
push 1
repne scasb al, byte es:[edi]
not ecx
dec ecx
mov dword [esp + 0x2c], ebx
mov ebp, ecx
lea ecx, [esp + 0x28]
push ebp
mov dword [esp + 0x34], ebx
mov dword [esp + 0x38], ebx
call fcn.00402ca0
test al, al
je 0x4085c2
mov edi, dword [esp + 0x28]
mov ecx, ebp
mov edx, ecx
mov esi, str.Finish_CMainWindow::ExtraStartBitmap__.
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
mov eax, dword [esp + 0x28]
mov dword [esp + 0x2c], ebp
mov byte [eax + ebp], 0
lea ecx, [esp + 0x24]
mov dword [esp + 0x58c], 0x11
push ecx
call fcn.004012f0
mov ecx, eax
call fcn.00401360
mov eax, dword [esp + 0x28]
test eax, eax
je 0x408603
lea ecx, [eax - 1]
mov al, byte [eax - 1]
test al, al
je 0x4085fa
cmp al, 0xff
je 0x4085fa
dec al
mov byte [ecx], al
jmp 0x408603
push ecx
call fcn.0040c880
add esp, 4
mov al, 1
mov ecx, dword [esp + 0x584]
pop edi
pop esi
pop ebp
pop ebx
mov dword fs:[0], ecx
add esp, 0x580
ret