Function at 0x402001
Capabilities:
Extract resource via kernel32 functions
Get installed programs
Hide graphical window
Query or enumerate registry value

Disassembly:
push ebp
mov ebp, esp
add esp, 0xffffff34
call sub.comctl32.dll_InitCommonControls
push 0
call sub.KERNEL32.DLL_GetModuleHandleA
mov dword [0x404010], eax
push 0x40535a
push str.SOFTWAREMicrosoftWindowsCurrentVersionUninstall_s_is1
push 0x40405a
call sub.user32.dll_wsprintfA
add esp, 0xc
push 0x403254
push 0x405e7a
call sub.KERNEL32.DLL_lstrcpyA
push 0x403254
push 0x4053da
call sub.KERNEL32.DLL_lstrcpyA
push 0x403254
push 0x40555a
call sub.KERNEL32.DLL_lstrcpyA
push 0x403254
push 0x40565a
call sub.KERNEL32.DLL_lstrcpyA
push 0x403254
push 0x405a5a
call sub.KERNEL32.DLL_lstrcpyA
push 0x403240
push 0x405e5a
call sub.KERNEL32.DLL_lstrcpyA
push 0x40525a
push 0x40545a
call sub.KERNEL32.DLL_lstrcpyA
push 0x40525a
push str.__sUnins000.exe_
push 0x405f7a
call sub.user32.dll_wsprintfA
add esp, 0xc
push 0x404044
push 1
push 0
push 0x40405a
push 0x80000002
call sub.advapi32.dll_RegOpenKeyExA
or eax, eax
jne 0x40221d
mov dword [0x404008], 0x20
push 0x404008
push 0x405e5a
push 0
push 0
push str.UninsHs:_Language
push dword [0x404044]
call sub.advapi32.dll_RegQueryValueExA
mov dword [0x404008], 0x80
push 0x404008
push 0x4053da
push 0
push 0
push str.DisplayName
push dword [0x404044]
call sub.advapi32.dll_RegQueryValueExA
mov dword [0x404008], 0x100
push 0x404008
push 0x40545a
push 0
push 0
push str.Inno_Setup:_App_Path
push dword [0x404044]
call sub.advapi32.dll_RegQueryValueExA
mov dword [0x404008], 0x100
push 0x404008
push 0x40555a
push 0
push 0
push str.Inno_Setup:_Icon_Group
push dword [0x404044]
call sub.advapi32.dll_RegQueryValueExA
mov dword [0x404008], 0x400
push 0x404008
push 0x40565a
push 0
push 0
push str.Inno_Setup:_Selected_Components
push dword [0x404044]
call sub.advapi32.dll_RegQueryValueExA
mov dword [0x404008], 0x400
push 0x404008
push 0x405a5a
push 0
push 0
push str.Inno_Setup:_Selected_Tasks
push dword [0x404044]
call sub.advapi32.dll_RegQueryValueExA
mov dword [0x404008], 0x100
push 0x404008
push 0x405e7a
push 0
push 0
push str.UninsHs:_InstPack
push dword [0x404044]
call sub.advapi32.dll_RegQueryValueExA
mov dword [0x404008], 0x100
push 0x404008
push 0x405f7a
push 0
push 0
push str.UninsHs:_UninsStr
push dword [0x404044]
call sub.advapi32.dll_RegQueryValueExA
push dword [0x404044]
call sub.advapi32.dll_RegCloseKey
push 0x1388
push 0x405e5a
push dword [0x404010]
call sub.KERNEL32.DLL_FindResourceA
or eax, eax
jne 0x40224b
push 0x1388
push 0x403240
push dword [0x404010]
call sub.KERNEL32.DLL_FindResourceA
or eax, eax
je 0x4022ad
mov dword [0x404048], eax
push eax
push dword [0x404010]
call sub.KERNEL32.DLL_LoadResource
or eax, eax
je 0x4022ad
push eax
call sub.KERNEL32.DLL_LockResource
or eax, eax
je 0x4022ad
mov dword [0x40404c], eax
push dword [eax]
pop dword [0x406080]
add eax, 4
push dword [eax]
pop dword [0x406084]
add eax, 4
push eax
add dword [0x40404c], 8
pop eax
mov edi, 0x406088
mov cl, 0x18
mov dword [edi], eax
inc eax
mov si, word [eax]
or si, si
jne 0x40229b
inc eax
inc eax
add edi, 4
dec cl
jne 0x402299
push 0x30
lea eax, [ebp - 0x30]
push eax
call sub.KERNEL32.DLL_RtlZeroMemory
push 0x7f00
push 0
call sub.user32.dll_LoadCursorA
mov dword [ebp - 0x14], eax
push dword [0x404010]
pop dword [ebp - 0x1c]
mov dword [ebp - 0x30], 0x30
mov dword [ebp - 0x2c], 3
mov dword [ebp - 0x28], 0x401000
mov dword [ebp - 0x10], 0x10
mov dword [ebp - 8], str.TfUninsHs
push 0x7d0
push dword [0x404010]
call sub.user32.dll_LoadIconA
mov dword [ebp - 0x18], eax
mov dword [ebp - 4], eax
lea eax, [ebp - 0x30]
push eax
call sub.user32.dll_RegisterClassExA
call fcn.00401fb9
push 0x4053da
push dword [0x40608c]
push 0x40505a
call sub.user32.dll_wsprintfA
add esp, 0xc
push 0
push dword [0x404010]
push 0
push 0
push 0x184
push 0x1f5
push 0x64
push 0x64
push 0x80ca0000
push 0x40505a
push str.TfUninsHs
push 0
call sub.user32.dll_CreateWindowExA
mov dword [0x404014], eax
push eax
push eax
call sub.user32.dll_GetDC
push eax
push eax
push eax
push eax
push 0xc
push eax
call sub.gdi32.dll_GetDeviceCaps
pop esi
push eax
push 0xe
push esi
call sub.gdi32.dll_GetDeviceCaps
pop esi
mul si
mov byte [0x404054], al
pop eax
push 8
push eax
call sub.gdi32.dll_GetDeviceCaps
sub eax, 0x1f5
shr eax, 1
pop esi
push eax
push 0xa
push esi
call sub.gdi32.dll_GetDeviceCaps
sub eax, 0x184
shr eax, 1
pop esi
push 5
push 0
push 0
push eax
push esi
push 0
push dword [0x404014]
call sub.user32.dll_SetWindowPos
pop eax
pop esi
push eax
push esi
call sub.user32.dll_ReleaseDC
push 1
push dword [0x404014]
call sub.user32.dll_ShowWindow
push dword [0x404014]
call sub.user32.dll_UpdateWindow
push 0
push 0
push 7
push dword [0x404014]
call sub.user32.dll_SendMessageA
push 0
push 0
push 0
lea eax, [ebp - 0x4c]
push eax
call sub.user32.dll_GetMessageA
or eax, eax
je 0x40241a
lea eax, [ebp - 0x4c]
push eax
call sub.user32.dll_TranslateMessage
lea eax, [ebp - 0x4c]
push eax
call sub.user32.dll_DispatchMessageA
jmp 0x4023f3
mov eax, dword [ebp - 0x44]
leave
ret