Function at 0x408540
Capabilities:
Delete registry key
Get installed programs
Set registry value

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x433dd9
mov eax, dword fs:[0]
push eax
sub esp, 0xa40
mov eax, dword [0x455070]
xor eax, ebp
mov dword [ebp - 0x10], eax
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov ecx, dword [ebp + 0xc]
call fcn.004059f0
push eax
lea ecx, [ebp - 0x840]
call dword [sym.imp.ouilibx.dll_public:_void___thiscall_OUI::COString::constructor_wchar_t_const__]
mov dword [ebp - 4], 0
push 0x439ff8
push 0x439ffc
lea ecx, [ebp - 0x840]
call dword [sym.imp.ouilibx.dll_public:_int___thiscall_OUI::COString::Replace_wchar_t_const___wchar_t_const__]
mov byte [ebp - 0x891], 0
mov dword [ebp - 0x8b4], 0
mov dword [ebp - 0x914], 1
mov dword [ebp - 0x890], 0
mov dword [ebp - 0x85c], 0
xor eax, eax
mov word [ebp - 0x830], ax
push 0x40e
push 0
lea ecx, [ebp - 0x82e]
push ecx
call sub.MSVCR110.dll_memset
add esp, 0xc
mov edx, dword [ebp + 8]
push edx
push 0x43a020
lea eax, [ebp - 0x88c]
push eax
call fcn.0040c860
add esp, 0xc
mov byte [ebp - 4], 1
lea ecx, [ebp - 0x88c]
call fcn.004059f0
push eax
push reloc.OLEAUT32.dll_SysReAllocString
call dword [sym.imp.ADVAPI32.dll_RegDeleteKeyW]
push 0x208
lea ecx, [ebp - 0x830]
push ecx
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
lea ecx, [ebp - 0x840]
call dword [sym.imp.ouilibx.dll_public:_wchar_t_const____thiscall_OUI::COString::operator_wchar_t_const__void_const]
push eax
mov ecx, dword [ebp + 8]
add ecx, 0x90
call fcn.004033a0
push 0
lea ecx, [ebp - 0x840]
call dword [sym.imp.ouilibx.dll_public:_wchar_t____thiscall_OUI::COString::GetBuffer_int_]
push eax
lea ecx, [ebp - 0x9d4]
call fcn.004065b0
mov dword [ebp - 0x900], eax
mov edx, dword [ebp - 0x900]
mov dword [ebp - 0x8d8], edx
mov byte [ebp - 4], 2
push 0x43a004
mov eax, dword [ebp - 0x8d8]
push eax
lea ecx, [ebp - 0xa4c]
push ecx
call dword [sym.imp.iImportLib.dll_class_std::basic_string_wchar_t__struct_std::char_traits_wchar_t___class_std::allocator_wchar_t_____cdecl_elex::filepath::pathcombine_class_std::basic_string_wchar_t__struct_std::char_traits_wchar_t___class_std::allocator_wchar_t___const___wchar_t_const__]
add esp, 0xc
mov dword [ebp - 0x8e8], eax
mov edx, dword [ebp - 0x8e8]
push edx
mov ecx, dword [ebp + 8]
add ecx, 0x30
call fcn.004032c0
lea ecx, [ebp - 0xa4c]
call fcn.00405b70
mov byte [ebp - 4], 1
lea ecx, [ebp - 0x9d4]
call fcn.00405b70
mov eax, dword [ebp + 8]
add eax, 0x30
push eax
mov ecx, dword [ebp + 8]
add ecx, 0x78
call fcn.00405ac0
call dword [sym.imp.iImportLib.dll_bool___cdecl_elex::os::IsX64System_void_]
movzx ecx, al
test ecx, ecx
je 0x408737
mov edx, dword [ebp + 8]
push edx
push 0x43a098
lea eax, [ebp - 0x9ec]
push eax
call fcn.0040c860
add esp, 0xc
mov dword [ebp - 0x8f0], eax
mov ecx, dword [ebp - 0x8f0]
push ecx
lea ecx, [ebp - 0x88c]
call fcn.004032c0
lea ecx, [ebp - 0x9ec]
call fcn.00405b70
mov edx, dword [ebp - 0x8b4]
or edx, 0x200
mov dword [ebp - 0x8b4], edx
xor eax, eax
mov word [ebp - 0x420], ax
push 0x206
push 0
lea ecx, [ebp - 0x41e]
push ecx
call sub.MSVCR110.dll_memset
add esp, 0xc
push 0x43a08c
push 0
lea ecx, [ebp - 0x840]
call dword [sym.imp.ouilibx.dll_public:_wchar_t____thiscall_OUI::COString::GetBuffer_int_]
push eax
lea edx, [ebp - 0x420]
push edx
call dword [sym.imp.SHLWAPI.dll_PathCombineW]
xor eax, eax
mov word [ebp - 0x218], ax
push 0x206
push 0
lea ecx, [ebp - 0x216]
push ecx
call sub.MSVCR110.dll_memset
add esp, 0xc
push 0x14
lea edx, [ebp - 0x218]
push edx
lea eax, [ebp - 0x420]
push eax
call fcn.00406730
mov ecx, eax
call fcn.0041fe00
mov dword [ebp - 0x83c], 0
xor ecx, ecx
mov dword [ebp - 0x838], ecx
mov dword [ebp - 0x834], ecx
lea edx, [ebp - 0x218]
push edx
lea ecx, [ebp - 0x858]
call fcn.004065b0
mov byte [ebp - 4], 3
lea ecx, [ebp - 0x858]
call fcn.00406660
movzx eax, al
test eax, eax
jne 0x408ad8
lea ecx, [ebp - 0x874]
call fcn.00405b40
mov byte [ebp - 4], 4
push 0
push 0x43a11c
lea ecx, [ebp - 0x858]
call fcn.0040b9d0
mov dword [ebp - 0x89c], eax
mov ecx, dword [ebp - 0x89c]
push ecx
push 0
lea edx, [ebp - 0xa1c]
push edx
lea ecx, [ebp - 0x858]
call fcn.004033f0
mov dword [ebp - 0x8c4], eax
mov eax, dword [ebp - 0x8c4]
push eax
lea ecx, [ebp - 0x874]
call fcn.004032c0
lea ecx, [ebp - 0xa1c]
call fcn.00405b70
lea ecx, [ebp - 0x874]
call fcn.004059f0
push eax
lea ecx, [ebp - 0x92c]
call fcn.004065b0
mov byte [ebp - 4], 5
push 0xfde9
lea ecx, [ebp - 0x92c]
push ecx
lea edx, [ebp - 0x9a4]
push edx
call dword [sym.imp.iImportLib.dll_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char_____cdecl_elex::strings::ws2s_class_std::basic_string_wchar_t__struct_std::char_traits_wchar_t___class_std::allocator_wchar_t___const___unsigned_int_]
add esp, 0xc
mov dword [ebp - 0x8c8], eax
mov ecx, dword [ebp - 0x8c8]
call fcn.0040ed00
push eax
call dword [sym.imp.MSVCR110.dll_atoi]
add esp, 4
mov ecx, 4
imul ecx, ecx, 0
mov dword [ebp + ecx - 0x83c], eax
lea ecx, [ebp - 0x9a4]
call fcn.00406f00
mov byte [ebp - 4], 4
lea ecx, [ebp - 0x92c]
call fcn.00405b70
lea ecx, [ebp - 0x858]
call fcn.00405c20
push eax
mov edx, dword [ebp - 0x89c]
add edx, 1
push edx
lea eax, [ebp - 0xa04]
push eax
lea ecx, [ebp - 0x858]
call fcn.004033f0
mov dword [ebp - 0x910], eax
mov ecx, dword [ebp - 0x910]
push ecx
lea ecx, [ebp - 0x858]
call fcn.004032c0
lea ecx, [ebp - 0xa04]
call fcn.00405b70
push 0
push 0x43a120
lea ecx, [ebp - 0x858]
call fcn.0040b9d0
mov dword [ebp - 0x89c], eax
mov edx, dword [ebp - 0x89c]
push edx
push 0
lea eax, [ebp - 0x974]
push eax
lea ecx, [ebp - 0x858]
call fcn.004033f0
mov dword [ebp - 0x904], eax
mov ecx, dword [ebp - 0x904]
push ecx
lea ecx, [ebp - 0x874]
call fcn.004032c0
lea ecx, [ebp - 0x974]
call fcn.00405b70
lea ecx, [ebp - 0x874]
call fcn.004059f0
push eax
lea ecx, [ebp - 0x95c]
call fcn.004065b0
mov byte [ebp - 4], 6
push 0xfde9
lea edx, [ebp - 0x95c]
push edx
lea eax, [ebp - 0xa34]
push eax
call dword [sym.imp.iImportLib.dll_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char_____cdecl_elex::strings::ws2s_class_std::basic_string_wchar_t__struct_std::char_traits_wchar_t___class_std::allocator_wchar_t___const___unsigned_int_]
add esp, 0xc
mov dword [ebp - 0x8f4], eax
mov ecx, dword [ebp - 0x8f4]
call fcn.0040ed00
push eax
call dword [sym.imp.MSVCR110.dll_atoi]
add esp, 4
mov ecx, 4
shl ecx, 0
mov dword [ebp + ecx - 0x83c], eax
lea ecx, [ebp - 0xa34]
call fcn.00406f00
mov byte [ebp - 4], 4
lea ecx, [ebp - 0x95c]
call fcn.00405b70
lea ecx, [ebp - 0x858]
call fcn.00405c20
push eax
mov edx, dword [ebp - 0x89c]
add edx, 1
push edx
lea eax, [ebp - 0x98c]
push eax
lea ecx, [ebp - 0x858]
call fcn.004033f0
mov dword [ebp - 0x8f8], eax
mov ecx, dword [ebp - 0x8f8]
push ecx
lea ecx, [ebp - 0x858]
call fcn.004032c0
lea ecx, [ebp - 0x98c]
call fcn.00405b70
lea edx, [ebp - 0x858]
push edx
lea ecx, [ebp - 0x874]
call fcn.00405ac0
lea ecx, [ebp - 0x874]
call fcn.004059f0
push eax
lea ecx, [ebp - 0x944]
call fcn.004065b0
mov byte [ebp - 4], 7
push 0xfde9
lea eax, [ebp - 0x944]
push eax
lea ecx, [ebp - 0x9bc]
push ecx
call dword [sym.imp.iImportLib.dll_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char_____cdecl_elex::strings::ws2s_class_std::basic_string_wchar_t__struct_std::char_traits_wchar_t___class_std::allocator_wchar_t___const___unsigned_int_]
add esp, 0xc
mov dword [ebp - 0x8cc], eax
mov ecx, dword [ebp - 0x8cc]
call fcn.0040ed00
push eax
call dword [sym.imp.MSVCR110.dll_atoi]
add esp, 4
mov edx, 4
shl edx, 1
mov dword [ebp + edx - 0x83c], eax
lea ecx, [ebp - 0x9bc]
call fcn.00406f00
mov byte [ebp - 4], 4
lea ecx, [ebp - 0x944]
call fcn.00405b70
mov byte [ebp - 4], 3
lea ecx, [ebp - 0x874]
call fcn.00405b70
lea eax, [ebp - 0x85c]
push eax
lea ecx, [ebp - 0x890]
push ecx
push 0
mov edx, dword [ebp - 0x8b4]
or edx, 0xf003f
push edx
push 0
push 0
push 0
lea ecx, [ebp - 0x88c]
call fcn.004059f0
push eax
push reloc.OLEAUT32.dll_SysReAllocString
call dword [sym.imp.ADVAPI32.dll_RegCreateKeyExW]
test eax, eax
je 0x408b1b
jmp 0x408e9b
mov ecx, dword [ebp + 8]
add ecx, 0x18
call fcn.00405c20
lea eax, [eax + eax + 2]
push eax
mov ecx, dword [ebp + 8]
add ecx, 0x18
call fcn.004059f0
push eax
push 1
push 0
push 0x43a124
mov ecx, dword [ebp - 0x890]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
mov ecx, dword [ebp + 8]
add ecx, 0x30
call fcn.004059f0
mov dword [ebp - 0x8a4], eax
mov edx, dword [ebp - 0x8a4]
add edx, 2
mov dword [ebp - 0x908], edx
mov eax, dword [ebp - 0x8a4]
mov cx, word [eax]
mov word [ebp - 0x8ae], cx
add dword [ebp - 0x8a4], 2
cmp word [ebp - 0x8ae], 0
jne 0x408b6d
mov edx, dword [ebp - 0x8a4]
sub edx, dword [ebp - 0x908]
sar edx, 1
mov dword [ebp - 0x8c0], edx
mov eax, dword [ebp - 0x8c0]
shl eax, 1
push eax
mov ecx, dword [ebp + 8]
add ecx, 0x30
call fcn.004059f0
push eax
push 1
push 0
push str.DisplayIcon
mov ecx, dword [ebp - 0x890]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
mov ecx, dword [ebp + 8]
add ecx, 0x60
call fcn.004059f0
mov dword [ebp - 0x8ac], eax
mov edx, dword [ebp - 0x8ac]
add edx, 2
mov dword [ebp - 0x8dc], edx
mov eax, dword [ebp - 0x8ac]
mov cx, word [eax]
mov word [ebp - 0x8b6], cx
add dword [ebp - 0x8ac], 2
cmp word [ebp - 0x8b6], 0
jne 0x408bed
mov edx, dword [ebp - 0x8ac]
sub edx, dword [ebp - 0x8dc]
sar edx, 1
mov dword [ebp - 0x8e0], edx
mov eax, dword [ebp - 0x8e0]
shl eax, 1
push eax
mov ecx, dword [ebp + 8]
add ecx, 0x60
call fcn.004059f0
push eax
push 1
push 0
push str.publisher
mov ecx, dword [ebp - 0x890]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
mov ecx, dword [ebp + 8]
add ecx, 0x78
call fcn.004059f0
mov dword [ebp - 0x898], eax
mov edx, dword [ebp - 0x898]
add edx, 2
mov dword [ebp - 0x8e4], edx
mov eax, dword [ebp - 0x898]
mov cx, word [eax]
mov word [ebp - 0x8ba], cx
add dword [ebp - 0x898], 2
cmp word [ebp - 0x8ba], 0
jne 0x408c6d
mov edx, dword [ebp - 0x898]
sub edx, dword [ebp - 0x8e4]
sar edx, 1
mov dword [ebp - 0x8fc], edx
mov eax, dword [ebp - 0x8fc]
shl eax, 1
push eax
mov ecx, dword [ebp + 8]
add ecx, 0x78
call fcn.004059f0
push eax
push 1
push 0
push str.UninstallString
mov ecx, dword [ebp - 0x890]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
push 4
mov edx, 4
imul edx, edx, 0
lea eax, [ebp + edx - 0x83c]
push eax
push 4
push 0
push str.VersionMajor
mov ecx, dword [ebp - 0x890]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
push 4
mov edx, 4
shl edx, 0
lea eax, [ebp + edx - 0x83c]
push eax
push 4
push 0
push str.VersionMinor
mov ecx, dword [ebp - 0x890]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
push 4
mov edx, 4
imul edx, edx, 0
lea eax, [ebp + edx - 0x83c]
push eax
push 4
push 0
push str.MajorVersion
mov ecx, dword [ebp - 0x890]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
push 4
mov edx, 4
shl edx, 0
lea eax, [ebp + edx - 0x83c]
push eax
push 4
push 0
push str.MinorVersion
mov ecx, dword [ebp - 0x890]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
lea edx, [ebp - 0x218]
mov dword [ebp - 0x8a0], edx
mov eax, dword [ebp - 0x8a0]
add eax, 2
mov dword [ebp - 0x8ec], eax
mov ecx, dword [ebp - 0x8a0]
mov dx, word [ecx]
mov word [ebp - 0x8b8], dx
add dword [ebp - 0x8a0], 2
cmp word [ebp - 0x8b8], 0
jne 0x408d88
mov eax, dword [ebp - 0x8a0]
sub eax, dword [ebp - 0x8ec]
sar eax, 1
mov dword [ebp - 0x90c], eax
mov ecx, dword [ebp - 0x90c]
shl ecx, 1
push ecx
lea edx, [ebp - 0x218]
push edx
push 1
push 0
push 0x43a1f8
mov eax, dword [ebp - 0x890]
push eax
call dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
mov ecx, dword [ebp + 8]
add ecx, 0x90
call fcn.004059f0
mov dword [ebp - 0x8a8], eax
mov ecx, dword [ebp - 0x8a8]
add ecx, 2
mov dword [ebp - 0x8d0], ecx
mov edx, dword [ebp - 0x8a8]
mov ax, word [edx]
mov word [ebp - 0x8b0], ax
add dword [ebp - 0x8a8], 2
cmp word [ebp - 0x8b0], 0
jne 0x408e06
mov ecx, dword [ebp - 0x8a8]
sub ecx, dword [ebp - 0x8d0]
sar ecx, 1
mov dword [ebp - 0x8d4], ecx
mov edx, dword [ebp - 0x8d4]
shl edx, 1
push edx
mov ecx, dword [ebp + 8]
add ecx, 0x90
call fcn.004059f0
push eax
push 1
push 0
push 0x43a218
mov eax, dword [ebp - 0x890]
push eax
call dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
push 4
call fcn.0040eeb0
add eax, 0xa8
push eax
push 4
push 0
push 0x43a238
mov ecx, dword [ebp - 0x890]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
mov byte [ebp - 0x891], 1
xor edx, edx
jne 0x408ad8
cmp dword [ebp - 0x890], 0
je 0x408eb1
mov eax, dword [ebp - 0x890]
push eax
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
mov cl, byte [ebp - 0x891]
mov byte [ebp - 0x892], cl
mov byte [ebp - 4], 1
lea ecx, [ebp - 0x858]
call fcn.00405b70
mov byte [ebp - 4], 0
lea ecx, [ebp - 0x88c]
call fcn.00405b70
mov dword [ebp - 4], 0xffffffff
lea ecx, [ebp - 0x840]
call dword [sym.imp.ouilibx.dll_public:_void___thiscall_OUI::COString::destructor_void_]
mov al, byte [ebp - 0x892]
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.004314a6
mov esp, ebp
pop ebp
ret