Function at 0x403650
Capabilities:
Get common file path
Read .ini file

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x5ec163
mov eax, dword fs:[0]
push eax
mov eax, 0x10648
call fcn.005a4260
mov eax, dword [0x66dd68]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov eax, dword [ebp + 8]
mov dword [ebp - 0x10644], eax
call fcn.00408985
xor ecx, ecx
xor ebx, ebx
cmp eax, ebx
setne cl
cmp ecx, ebx
jne 0x4036a7
push 0x80004005
call fcn.00402920
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
lea esi, [eax + 0x10]
mov dword [ebp - 0x10630], esi
mov eax, str.ReadCodesFromIniFile
shr eax, 0x10
mov dword [ebp - 4], ebx
mov dword [ebp - 0x10654], eax
cmp eax, ebx
jne 0x4036ef
mov ecx, str.ReadCodesFromIniFile
movzx edi, cx
push edi
call fcn.0040881f
cmp eax, ebx
je 0x403705
push edi
push eax
lea ecx, [ebp - 0x10630]
call fcn.00402470
jmp 0x4036ff
push str.ReadCodesFromIniFile
lea ecx, [ebp - 0x10630]
call fcn.00406ba0
mov esi, dword [ebp - 0x10630]
mov edi, 1
mov dword [ebp - 4], edi
cmp dword [esi - 4], edi
jle 0x403727
mov edx, dword [esi - 0xc]
push edx
lea ecx, [ebp - 0x10630]
call fcn.004026d0
mov esi, dword [ebp - 0x10630]
mov ecx, esi
call fcn.00401500
lea eax, [esi - 0x10]
mov dword [ebp - 4], 0xffffffff
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x403751
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
push 0x206
lea edx, [ebp - 0x626]
xor ecx, ecx
push ebx
push edx
mov word [ebp - 0x628], cx
call fcn.005a28d0
add esp, 0xc
lea eax, [ebp - 0x628]
push eax
push 0x104
call dword [sym.imp.KERNEL32.dll_GetTempPathW]
push 0xfffe
lea ecx, [ebp - 0x10628]
push ebx
push ecx
call fcn.005a28d0
add esp, 0xc
push 0x630498
lea ecx, [ebp - 0x1063c]
call fcn.00402b60
push 0x206
lea eax, [ebp - 0x216]
xor edx, edx
push ebx
mov dword [ebp - 4], 2
push eax
mov word [ebp - 0x218], dx
call fcn.005a28d0
push 0x206
lea edx, [ebp - 0x41e]
xor ecx, ecx
push ebx
push edx
mov word [ebp - 0x420], cx
call fcn.005a28d0
add esp, 0x18
push 0x104
lea eax, [ebp - 0x218]
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
test eax, eax
je 0x403857
lea eax, [ebp - 0x218]
lea edx, [eax + 2]
mov cx, word [eax]
add eax, 2
cmp cx, bx
jne 0x403806
sub eax, edx
sar eax, 1
lea eax, [ebp + eax*2 - 0x218]
lea ecx, [ebp - 0x218]
cmp eax, ecx
jbe 0x40383e
cmp word [eax], 0x5c
je 0x40383e
xor edx, edx
mov word [eax], dx
sub eax, 2
lea ecx, [ebp - 0x218]
cmp eax, ecx
ja 0x403826
push 0x104
lea edx, [ebp - 0x420]
push edx
lea eax, [ebp - 0x218]
push eax
call dword [sym.imp.KERNEL32.dll_GetShortPathNameW]
lea ecx, [ebp - 0x420]
push ecx
lea edx, [ebp - 0x1063c]
push 0x6304a8
push edx
call fcn.00402120
add esp, 0xc
call fcn.00408985
xor ecx, ecx
cmp eax, ebx
setne cl
cmp ecx, ebx
jne 0x40388c
push 0x80004005
call fcn.00402920
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
add eax, 0x10
mov dword [ebp - 0x10630], eax
mov byte [ebp - 4], 3
mov ecx, dword [ebp - 0x1063c]
push ecx
lea edx, [ebp - 0x10630]
push str.The_ini_file_for_process_is:__s
push edx
call fcn.00402120
add esp, 8
lea eax, [ebp - 0x10630]
mov dword [ebp - 0x1064c], esp
mov ecx, esp
push eax
call fcn.00401f30
call fcn.004011e0
mov ecx, dword [ebp - 0x1063c]
add esp, 4
push ecx
push 0x7fff
lea edx, [ebp - 0x10628]
push edx
push str.ProductCodesToRemove
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileSectionW]
mov dword [ebp - 0x10640], ebx
mov ebx, edi
mov byte [ebp - 0x10631], 0
mov ax, word [ebp + ebx*2 - 0x10628]
inc ebx
mov dword [ebp - 0x10638], ebx
test ax, ax
jne 0x403c36
call fcn.00408985
xor ecx, ecx
test eax, eax
setne cl
test ecx, ecx
je 0x40369d
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
add eax, 0x10
mov dword [ebp - 0x1062c], eax
mov byte [ebp - 4], 4
call fcn.00408985
xor ecx, ecx
test eax, eax
setne cl
test ecx, ecx
je 0x40369d
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
add eax, 0x10
mov dword [ebp - 0x10648], eax
mov ecx, dword [ebp - 0x10640]
lea edx, [ebp + ecx*2 - 0x10628]
push edx
lea eax, [ebp - 0x1062c]
push 0x630778
push eax
mov byte [ebp - 4], 5
call fcn.00402120
add esp, 0xc
lea ecx, [ebp - 0x10650]
push ecx
push 0x630780
lea edx, [ebp - 0x1064c]
push edx
lea ecx, [ebp - 0x1062c]
mov dword [ebp - 0x10650], 0
call fcn.00405e10
mov ecx, eax
mov byte [ebp - 4], 6
call fcn.004064e0
mov ecx, eax
call fcn.00406560
mov ecx, dword [eax]
mov esi, dword [ebp - 0x1062c]
lea eax, [ecx - 0x10]
add esi, 0xfffffff0
cmp eax, esi
je 0x403a31
cmp dword [esi + 0xc], 0
lea edi, [esi + 0xc]
jl 0x403a21
mov edx, dword [eax]
cmp edx, dword [esi]
jne 0x403a21
push eax
call fcn.00401ec0
mov ebx, eax
add esp, 4
or eax, 0xffffffff
lock xadd dword [edi], eax
dec eax
test eax, eax
jg 0x403a10
mov ecx, dword [esi]
mov edx, dword [ecx]
mov eax, dword [edx + 4]
push esi
call eax
add ebx, 0x10
mov dword [ebp - 0x1062c], ebx
mov ebx, dword [ebp - 0x10638]
jmp 0x403a31
mov eax, dword [ecx - 0xc]
push eax
push ecx
lea ecx, [ebp - 0x1062c]
call fcn.004029a0
mov byte [ebp - 4], 5
mov eax, dword [ebp - 0x1064c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x403a57
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov edx, dword [ebp - 0x10640]
mov ecx, dword [ebp - 0x10650]
add ecx, edx
lea eax, [ebp + ecx*2 - 0x10628]
push eax
lea ecx, [ebp - 0x10648]
push 0x630778
push ecx
call fcn.00402120
mov eax, dword [ebp - 0x1062c]
mov edi, ebx
add esp, 0xc
mov dword [ebp - 0x10640], edi
inc ebx
mov ecx, 0x630498
mov dx, word [eax]
cmp dx, word [ecx]
jne 0x403abb
test dx, dx
je 0x403ab7
mov dx, word [eax + 2]
cmp dx, word [ecx + 2]
jne 0x403abb
add eax, 4
add ecx, 4
test dx, dx
jne 0x403a95
xor eax, eax
jmp 0x403ac0
sbb eax, eax
sbb eax, 0xffffffff
mov esi, dword [ebp - 0x10648]
test eax, eax
je 0x403bde
cmp byte [ebp + 0xc], 0
je 0x403b66
cmp dword [esi - 0xc], 0
jl 0x403af9
push 0x630788
push esi
call fcn.0059e397
add esp, 8
test eax, eax
je 0x403af9
sub eax, esi
sar eax, 1
cmp eax, 0xffffffff
jne 0x403b3a
mov ecx, dword [ebp - 0x10644]
lea edx, [ebp - 0x1062c]
push edx
call fcn.00409ad1
mov eax, dword [ebp - 0x1062c]
push eax
lea ecx, [ebp - 0x10630]
push str.Added_code:__s
push ecx
call fcn.00402120
add esp, 8
lea edx, [ebp - 0x10630]
mov dword [ebp - 0x10638], esp
mov ecx, esp
push edx
jmp 0x403bd1
mov eax, dword [ebp - 0x1062c]
push eax
lea ecx, [ebp - 0x10630]
push str.Not_added_code:__s___Not_a_64_bit_product__
push ecx
call fcn.00402120
add esp, 8
lea edx, [ebp - 0x10630]
mov dword [ebp - 0x10638], esp
mov ecx, esp
push edx
jmp 0x403bd1
cmp dword [esi - 0xc], 0
jl 0x403b87
push 0x630808
push esi
call fcn.0059e397
add esp, 8
test eax, eax
je 0x403b87
sub eax, esi
sar eax, 1
cmp eax, 0xffffffff
jne 0x403ba7
mov ecx, dword [ebp - 0x10644]
lea eax, [ebp - 0x1062c]
push eax
call fcn.00409ad1
mov ecx, dword [ebp - 0x1062c]
push ecx
push str.Added_code:__s
jmp 0x403bb3
mov ecx, dword [ebp - 0x1062c]
push ecx
push str.Not_added_code:__s___Not_a_32_bit_product__
lea edx, [ebp - 0x10630]
push edx
call fcn.00402120
add esp, 8
lea eax, [ebp - 0x10630]
mov dword [ebp - 0x10638], esp
mov ecx, esp
push eax
call fcn.00401f30
call fcn.004011e0
add esp, 4
cmp word [ebp + edi*2 - 0x10628], 0
jne 0x403bf0
mov byte [ebp - 0x10631], 1
lea eax, [esi - 0x10]
mov byte [ebp - 4], 4
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x403c10
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [ebp - 4], 3
mov eax, dword [ebp - 0x1062c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x403c36
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
cmp byte [ebp - 0x10631], 0
je 0x403906
call fcn.00408985
xor ecx, ecx
test eax, eax
setne cl
test ecx, ecx
jne 0x403c5d
push 0x80004005
call fcn.00402920
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
lea esi, [eax + 0x10]
mov dword [ebp - 0x1062c], esi
cmp dword [ebp - 0x10654], 0
mov byte [ebp - 4], 7
jne 0x403c9d
mov ecx, str.ReadCodesFromIniFile
movzx edi, cx
push edi
call fcn.0040881f
test eax, eax
je 0x403cb3
push edi
push eax
lea ecx, [ebp - 0x1062c]
call fcn.00402470
jmp 0x403cad
push str.ReadCodesFromIniFile
lea ecx, [ebp - 0x1062c]
call fcn.00406ba0
mov esi, dword [ebp - 0x1062c]
mov byte [ebp - 4], 8
cmp dword [esi - 4], 1
jle 0x403cd2
mov edx, dword [esi - 0xc]
push edx
lea ecx, [ebp - 0x1062c]
call fcn.004026d0
mov esi, dword [ebp - 0x1062c]
mov ecx, esi
call fcn.00401670
lea eax, [esi - 0x10]
mov byte [ebp - 4], 3
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x403cf9
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [ebp - 4], 2
mov eax, dword [ebp - 0x10630]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x403d1f
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov dword [ebp - 4], 0xffffffff
mov eax, dword [ebp - 0x1063c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x403d48
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
xor eax, eax
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.0059d9f6
mov esp, ebp
pop ebp
ret