Function at 0x409872
Capabilities:
Get common file path
Get file size
Query or enumerate registry value
Read .ini file
Read file on windows

Disassembly:
push ebp
sub esp, 0x478
lea ebp, [esp - 4]
mov eax, dword [0x425250]
xor eax, ebp
mov dword [ebp + 0x478], eax
push 0x2c
mov eax, 0x41bb0a
call fcn.0040b39e
lea eax, [ebp - 0x1c]
push eax
push 0x20019
xor ebx, ebx
push ebx
push str.SoftwareGoogleToolbar_for_Firefox
push 0x80000002
mov dword [ebp - 0x1c], ebx
call dword [sym.imp.ADVAPI32.dll_RegOpenKeyExA]
cmp eax, ebx
jne 0x409927
push 0xff
lea eax, [ebp + 0x171]
push ebx
push eax
mov byte [ebp + 0x170], bl
call fcn.00409ef0
add esp, 0xc
lea eax, [ebp - 0x14]
push eax
lea eax, [ebp + 0x170]
push eax
push ebx
push ebx
push 0x42076c
push dword [ebp - 0x1c]
mov dword [ebp - 0x14], 0x100
call dword [sym.imp.ADVAPI32.dll_RegQueryValueExA]
cmp eax, ebx
jne 0x409927
lea eax, [ebp + 0x170]
push eax
lea ecx, [ebp - 0x38]
call fcn.00409850
cmp dword [eax + 0x14], ebx
push ebx
push 1
lea ecx, [ebp - 0x38]
seta byte [ebp - 0x10]
call fcn.004093a5
cmp byte [ebp - 0x10], bl
je 0x409927
mov al, 1
jmp 0x409c30
mov esi, 0x103
push esi
lea eax, [ebp + 0x271]
push ebx
push eax
mov byte [ebp + 0x270], bl
call fcn.00409ef0
add esp, 0xc
lea eax, [ebp + 0x270]
push eax
push ebx
push ebx
push 0x1a
push ebx
call dword [sym.imp.SHELL32.dll_SHGetFolderPathA]
cmp eax, ebx
jl 0x409c2e
lea eax, [ebp + 0x270]
push eax
lea ecx, [ebp + 0x1c]
call fcn.00409850
push 1
push 0xffffffffffffffff
lea eax, [ebp - 0x10]
push eax
lea ecx, [ebp + 0x1c]
mov dword [ebp - 4], ebx
mov byte [ebp - 0x10], 0x5c
call fcn.00409302
mov ecx, dword [ebp + 0x30]
dec ecx
cmp eax, ecx
je 0x409998
push 0x41c5c0
lea ecx, [ebp + 0x1c]
call fcn.00409816
push str.MozillaFirefox
lea ecx, [ebp + 0x1c]
call fcn.00409816
lea eax, [ebp + 0x1c]
push eax
lea ecx, [ebp + 0x54]
call fcn.004097f0
push str.profiles.ini
lea ecx, [ebp + 0x54]
mov byte [ebp - 4], 1
call fcn.00409816
push ebx
lea ecx, [ebp + 0x38]
mov dword [ebp + 0x50], 0xf
call fcn.00409389
mov byte [ebp - 4], 2
xor edi, edi
push edi
push str.Profile_d
lea eax, [ebp + 0x70]
push 0x100
push eax
call fcn.0040d804
mov eax, dword [ebp + 0x58]
add esp, 0x10
cmp dword [ebp + 0x6c], 0x10
jae 0x4099fb
lea eax, [ebp + 0x58]
push eax
push ebx
push str.Default
lea eax, [ebp + 0x70]
push eax
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileIntA]
cmp eax, ebx
jne 0x409a18
inc edi
cmp edi, 0x14
jl 0x4099d8
jmp 0x409a24
lea eax, [ebp + 0x70]
push eax
lea ecx, [ebp + 0x38]
call fcn.00409833
cmp dword [ebp + 0x4c], ebx
jne 0x409a36
push str.Profile0
lea ecx, [ebp + 0x38]
call fcn.00409833
push esi
lea eax, [ebp + 0x375]
push ebx
push eax
mov byte [ebp + 0x374], bl
call fcn.00409ef0
mov ecx, dword [ebp + 0x58]
add esp, 0xc
cmp dword [ebp + 0x6c], 0x10
jae 0x409a59
lea ecx, [ebp + 0x58]
cmp dword [ebp + 0x50], 0x10
mov eax, dword [ebp + 0x3c]
jae 0x409a65
lea eax, [ebp + 0x3c]
push ecx
push 0x104
lea ecx, [ebp + 0x374]
push ecx
push 0x42267c
push str.Path
push eax
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringA]
cmp eax, ebx
jle 0x409c0d
lea eax, [ebp + 0x374]
push eax
call fcn.00409f90
test eax, eax
pop ecx
jbe 0x409c0d
lea eax, [ebp + 0x1c]
push eax
lea ecx, [ebp]
call fcn.004097f0
push 0x41c5c0
lea ecx, [ebp]
mov byte [ebp - 4], 3
call fcn.00409816
lea eax, [ebp + 0x374]
push eax
lea ecx, [ebp]
call fcn.00409816
push str.extensions.cache
lea ecx, [ebp]
call fcn.00409816
cmp dword [ebp + 0x18], 0x10
mov eax, dword [ebp + 4]
jae 0x409ae5
lea eax, [ebp + 4]
push ebx
push 0x80
push 3
push ebx
xor edi, edi
inc edi
push edi
push 0x80000000
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileA]
cmp eax, 0xffffffff
mov dword [ebp - 0x14], eax
jne 0x409b33
lea ecx, [ebp - 0x14]
call fcn.00409256
push ebx
push edi
lea ecx, [ebp]
call fcn.004093a5
push ebx
push edi
lea ecx, [ebp + 0x38]
call fcn.004093a5
push ebx
push edi
lea ecx, [ebp + 0x54]
call fcn.004093a5
push ebx
push edi
jmp 0x409c26
push ebx
push eax
call dword [sym.imp.KERNEL32.dll_GetFileSize]
mov esi, eax
lea eax, [esi - 1]
cmp eax, 0x3fffe
ja 0x409b06
lea eax, [esi + 1]
push eax
call fcn.0040aa0a
mov edi, eax
cmp edi, ebx
pop ecx
jne 0x409b95
mov byte [ebp - 0x10], bl
lea ecx, [ebp - 0x14]
call fcn.00409256
xor esi, esi
push ebx
inc esi
push esi
lea ecx, [ebp]
call fcn.004093a5
push ebx
push esi
lea ecx, [ebp + 0x38]
call fcn.004093a5
push ebx
push esi
lea ecx, [ebp + 0x54]
call fcn.004093a5
push ebx
push esi
lea ecx, [ebp + 0x1c]
call fcn.004093a5
mov al, byte [ebp - 0x10]
jmp 0x409c30
lea eax, [esi + 1]
push eax
push ebx
push edi
call fcn.00409ef0
add esp, 0xc
push ebx
lea eax, [ebp - 0x18]
push eax
push esi
push edi
push dword [ebp - 0x14]
mov dword [ebp - 0x18], ebx
call dword [sym.imp.KERNEL32.dll_ReadFile]
cmp dword [ebp - 0x18], ebx
jbe 0x409bd9
push str.3112ca9c_de6d_4884_a869_9855de68056c
push edi
call fcn.0040bd70
test eax, eax
pop ecx
pop ecx
je 0x409bd9
push edi
call fcn.0040a92d
pop ecx
mov byte [ebp - 0x10], 1
jmp 0x409b5a
push edi
call fcn.0040a92d
pop ecx
lea ecx, [ebp - 0x14]
call fcn.00409256
xor esi, esi
push ebx
inc esi
push esi
lea ecx, [ebp]
call fcn.004093a5
push ebx
push esi
lea ecx, [ebp + 0x38]
call fcn.004093a5
push ebx
push esi
lea ecx, [ebp + 0x54]
call fcn.004093a5
push ebx
push esi
jmp 0x409c26
push ebx
push 1
lea ecx, [ebp + 0x38]
call fcn.004093a5
push ebx
push 1
lea ecx, [ebp + 0x54]
call fcn.004093a5
push ebx
push 1
lea ecx, [ebp + 0x1c]
call fcn.004093a5
xor al, al
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp + 0x478]
xor ecx, ebp
call fcn.00409ede
add ebp, 0x47c
leave
ret