Function at 0x180191e70
Capabilities:
Check os version
Get common file path
Get file version info
Query or enumerate registry value

Disassembly:
mov rax, rsp
push rbp
push r12
push r13
push r14
push r15
lea rbp, [rax - 0x558]
sub rsp, 0x630
mov qword [rbp - 0x80], 0xfffffffffffffffe
mov qword [rax + 8], rbx
mov qword [rax + 0x10], rsi
mov qword [rax + 0x18], rdi
mov rax, qword [0x180243cf0]
xor rax, rsp
mov qword [rbp + 0x520], rax
cmp dword [0x180251b40], 0
jne 0x1801926aa
mov dword [0x180251b40], 1
mov dword [rbp - 0x70], 0x114
xor edx, edx
mov r8d, 0x110
lea rcx, [rbp - 0x6c]
call fcn.18017a8f0
lea rcx, [rbp - 0x70]
call qword [sym.imp.KERNEL32.dll_GetVersionExW]
test eax, eax
je 0x180192010
lea rdx, [rbp - 0x68]
lea rcx, [rbp - 0x6c]
call fcn.180191d20
lea rcx, str.Ntdll.dll
call qword [sym.imp.KERNEL32.dll_GetModuleHandleW]
test rax, rax
je 0x180191f2b
lea rdx, str.RtlGetVersion
mov rcx, rax
call qword [sym.imp.KERNEL32.dll_GetProcAddress]
mov rdi, rax
mov qword [0x180251c68], rax
jmp 0x180191f32
mov rdi, qword [0x180251c68]
test rdi, rdi
je 0x180191f6f
xor edx, edx
mov r8d, 0x110
lea rcx, [rbp + 0x1d4]
call fcn.18017a8f0
mov dword [rbp + 0x1d0], 0x114
lea rcx, [rbp + 0x1d0]
call rdi
mov ecx, dword [rbp - 0x64]
test eax, eax
cmove ecx, dword [rbp + 0x1dc]
mov dword [rbp - 0x64], ecx
jmp 0x180191f72
mov ecx, dword [rbp - 0x64]
mov edx, dword [rbp - 0x6c]
mov dword [0x180251b44], edx
mov eax, dword [rbp - 0x68]
mov dword [0x180251b48], eax
mov dword [0x180251b4c], ecx
mov eax, dword [rbp - 0x60]
mov dword [0x180251b50], eax
cmp eax, 2
jne 0x180192010
cmp edx, 4
jb 0x180192010
mov dword [rbp + 0xb0], 0x11c
xor edx, edx
mov r8d, 0x118
lea rcx, [rbp + 0xb4]
call fcn.18017a8f0
lea rcx, [rbp + 0xb0]
call qword [sym.imp.KERNEL32.dll_GetVersionExW]
test eax, eax
je 0x180192010
movzx eax, word [rbp + 0x1c4]
mov word [0x180251b54], ax
movzx eax, word [rbp + 0x1c6]
mov word [0x180251b58], ax
movzx eax, byte [rbp + 0x1ca]
mov byte [0x180251b56], al
movzx eax, word [rbp + 0x1c8]
mov word [0x180251c60], ax
movzx eax, byte [rbp + 0x1cb]
mov byte [0x180251b57], al
mov edx, 0x104
lea r12, [0x180251c70]
mov rcx, r12
call qword [sym.imp.KERNEL32.dll_GetSystemDirectoryW]
xor eax, eax
or r15, 0xffffffffffffffff
mov rcx, r15
mov rdi, r12
repne scasw ax, word [rdi]
not rcx
xor esi, esi
dec rcx
je 0x1801922e7
mov ecx, esi
lea rbx, [0x180251e80]
nop dword [rax + rax]
movzx eax, word [rcx + r12]
mov word [rcx + rbx], ax
add rcx, 2
test ax, ax
jne 0x180192050
mov edx, 0x5c
mov rcx, rbx
call fcn.180178990
test rax, rax
je 0x180192077
mov word [rax], si
xor eax, eax
mov rcx, r15
mov rdi, rbx
repne scasw ax, word [rdi]
not rcx
dec rcx
je 0x1801922e7
mov rcx, rsi
lea r12, [0x1802524b0]
nop dword [rax + rax]
movzx eax, word [rcx + rbx]
mov word [rcx + r12], ax
add rcx, 2
test ax, ax
jne 0x1801920a0
mov edx, 0x5c
mov rcx, r12
call fcn.180178990
test rax, rax
je 0x1801920c7
mov word [rax], si
mov qword [rsp + 0x40], rsi
lea rax, [rsp + 0x40]
mov qword [rsp + 0x20], rax
mov r9d, 0x20019
xor r8d, r8d
lea rdx, [0x1801f83a0]
mov rcx, 0xffffffff80000002
call qword [sym.imp.ADVAPI32.dll_RegOpenKeyExW]
lea rbx, [0x180252090]
lea r13, [0x1802522a0]
test eax, eax
jne 0x180192211
mov rcx, qword [rsp + 0x40]
test rcx, rcx
je 0x180192211
mov dword [rsp + 0x34], esi
mov dword [rsp + 0x30], esi
lea rax, [rsp + 0x30]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], rsi
lea r9, [rsp + 0x34]
xor r8d, r8d
lea rdx, str.ProgramFilesDir
call qword [sym.imp.ADVAPI32.dll_RegQueryValueExW]
test eax, eax
jne 0x180192190
mov eax, dword [rsp + 0x34]
cmp eax, 1
je 0x18019215f
cmp eax, 2
je 0x18019215f
cmp eax, 6
je 0x18019215f
cmp eax, 7
jne 0x180192190
cmp dword [rsp + 0x30], 0x102
ja 0x180192190
lea rax, [rsp + 0x30]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], rbx
xor r9d, r9d
xor r8d, r8d
lea rdx, str.ProgramFilesDir
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.ADVAPI32.dll_RegQueryValueExW]
lea rax, [rsp + 0x30]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], rsi
lea r9, [rsp + 0x34]
xor r8d, r8d
lea rdx, [0x1801f8360]
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.ADVAPI32.dll_RegQueryValueExW]
test eax, eax
jne 0x180192206
mov eax, dword [rsp + 0x34]
cmp eax, 1
je 0x1801921d5
cmp eax, 2
je 0x1801921d5
cmp eax, 6
je 0x1801921d5
cmp eax, 7
jne 0x180192206
cmp dword [rsp + 0x30], 0x102
ja 0x180192206
lea rax, [rsp + 0x30]
mov qword [rsp + 0x28], rax
mov qword [rsp + 0x20], r13
xor r9d, r9d
xor r8d, r8d
lea rdx, [0x1801f8360]
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.ADVAPI32.dll_RegQueryValueExW]
mov rcx, qword [rsp + 0x40]
call qword [sym.imp.ADVAPI32.dll_RegCloseKey]
xor eax, eax
mov rcx, r15
mov rdi, rbx
repne scasw ax, word [rdi]
not rcx
dec rcx
jne 0x180192282
mov rcx, rsi
nop word [rax + rax]
movzx eax, word [rcx + r12]
mov word [rcx + rbx], ax
add rcx, 2
test ax, ax
jne 0x180192230
mov rdi, rbx
xor eax, eax
mov rcx, r15
repne scasw ax, word [rdi]
mov rax, qword [str.Program_Files]
mov qword [rdi - 2], rax
mov rax, qword [0x1801f8348]
mov qword [rdi + 6], rax
mov rax, qword [0x1801f8350]
mov qword [rdi + 0xe], rax
mov eax, dword [0x1801f8358]
mov dword [rdi + 0x16], eax
movzx eax, word [0x1801f835c]
mov word [rdi + 0x1a], ax
xor eax, eax
mov rcx, r15
mov rdi, r13
repne scasw ax, word [rdi]
not rcx
dec rcx
jne 0x1801922e7
mov rcx, rsi
nop dword [rax + rax]
movzx eax, word [rcx + rbx]
mov word [rcx + r13], ax
add rcx, 2
test ax, ax
jne 0x1801922a0
mov rdi, r13
xor eax, eax
mov rcx, r15
repne scasw ax, word [rdi]
mov rax, qword [str.Common_Files]
mov qword [rdi - 2], rax
mov rax, qword [0x1801f8328]
mov qword [rdi + 6], rax
mov rax, qword [0x1801f8330]
mov qword [rdi + 0xe], rax
mov eax, dword [0x1801f8338]
mov dword [rdi + 0x16], eax
mov qword [rsp + 0x60], rsi
mov dword [rsp + 0x68], esi
mov qword [rsp + 0x70], rsi
call fcn.1800412ac
mov rdx, rax
mov ecx, esi
test rax, rax
setne cl
test ecx, ecx
jne 0x180192314
mov ecx, 0x80004005
call fcn.180006a50
int3
mov rax, qword [rax]
mov rcx, rdx
call qword [rax + 0x18]
lea rbx, [rax + 0x18]
mov qword [rsp + 0x58], rbx
mov r9d, 0x20019
lea r8, str.SYSTEMCurrentControlSetControlNlsLanguage
mov rdx, 0xffffffff80000002
lea rcx, [rsp + 0x60]
call fcn.18006c85c
mov r14, qword [rsp + 0x60]
test eax, eax
jne 0x180192547
mov dword [rsp + 0x48], 0xa
mov word [rbp + 0x2f0], si
xor eax, eax
mov qword [rbp + 0x2f2], rax
mov qword [rbp + 0x2fa], rax
mov dword [rbp + 0x302], eax
mov dword [rsp + 0x50], esi
lea rax, [rsp + 0x48]
mov qword [rsp + 0x28], rax
lea rax, [rbp + 0x2f0]
mov qword [rsp + 0x20], rax
lea r9, [rsp + 0x50]
xor r8d, r8d
lea rdx, str.InstallLanguage
mov rcx, r14
call qword [sym.imp.ADVAPI32.dll_RegQueryValueExW]
mov edi, eax
mov ecx, dword [rsp + 0x48]
test ecx, ecx
je 0x18019242c
mov edx, dword [rsp + 0x50]
test edx, edx
je 0x180192547
cmp edx, 2
jbe 0x18019240c
cmp edx, 7
jne 0x180192547
test cl, 1
jne 0x180192547
mov eax, ecx
shr eax, 1
cmp eax, 1
jb 0x180192547
mov edx, ecx
shr rdx, 1
cmp word [rbp + rdx*2 + 0x2ee], 0
jne 0x180192547
cmp eax, 1
jbe 0x180192433
cmp word [rbp + rdx*2 + 0x2ec], 0
jne 0x180192547
jmp 0x180192433
test cl, 1
jne 0x180192547
mov rax, rcx
shr rax, 1
cmp word [rbp + rax*2 + 0x2ee], 0
jne 0x180192547
jmp 0x180192433
mov word [rbp + 0x2f0], si
test edi, edi
jne 0x180192547
xor eax, eax
mov rcx, r15
lea rdi, [rbp + 0x2f0]
repne scasw ax, word [rdi]
not rcx
dec rcx
mov rdi, rcx
test ecx, ecx
jne 0x1801924ba
lea rdx, [rbx - 0x18]
mov rdi, qword [rdx]
cmp dword [rdx + 8], eax
je 0x180192547
cmp dword [rdx + 0x10], eax
jge 0x180192487
cmp dword [rbx - 0xc], eax
jge 0x18019247c
mov ecx, 0x80070057
call fcn.180006a50
int3
mov dword [rbx - 0x10], esi
mov word [rbx], si
jmp 0x180192547
mov eax, r15d
lock xadd dword [rdx + 0x10], eax
dec eax
test eax, eax
jg 0x18019249e
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
mov rax, qword [rdi]
mov rcx, rdi
call qword [rax + 0x18]
lea rbx, [rax + 0x18]
mov qword [rsp + 0x58], rbx
mov r14, qword [rsp + 0x60]
jmp 0x180192547
mov r13d, dword [rbx - 0x10]
lea r12, [rbp + 0x2f0]
sub r12, rbx
sar r12, 1
test ecx, ecx
jns 0x1801924da
mov ecx, 0x80070057
call fcn.180006a50
int3
mov ecx, 1
sub ecx, dword [rbx - 8]
mov eax, dword [rbx - 0xc]
sub eax, edi
or eax, ecx
jge 0x1801924fc
mov edx, edi
lea rcx, [rsp + 0x58]
call fcn.180006840
mov rbx, qword [rsp + 0x58]
movsxd rax, edi
movsxd rdx, dword [rbx - 0xc]
mov rcx, rbx
add rdx, rdx
cmp r12, r13
lea r13, [rax + rax]
mov r9, r13
ja 0x180192520
lea r8, [rbx + r12*2]
call fcn.180177ec8
jmp 0x18019252c
lea r8, [rbp + 0x2f0]
call fcn.180177cac
cmp edi, dword [rbx - 0xc]
jg 0x18019253c
mov dword [rbx - 0x10], edi
mov word [r13 + rbx], si
jmp 0x180192547
mov ecx, 0x80070057
call fcn.180006a50
int3
test r14, r14
je 0x18019255a
mov rcx, r14
call qword [sym.imp.ADVAPI32.dll_RegCloseKey]
mov qword [rsp + 0x60], rsi
mov dword [rsp + 0x68], esi
cmp dword [rbx - 0x10], 0
jle 0x18019257f
lea r8, [0x180251c64]
lea rdx, [0x1801f8298]
mov rcx, rbx
call fcn.180178c30
jmp 0x18019267e
mov word [rbp + 0x310], si
xor edx, edx
mov r8d, 0x206
lea rcx, [rbp + 0x312]
call fcn.18017a8f0
lea r8, [0x180251c70]
lea rdx, str._suser.exe
lea rcx, [rbp + 0x310]
call fcn.18017adf8
mov dword [rsp + 0x4c], esi
lea rdx, [rsp + 0x4c]
lea rcx, [rbp + 0x310]
call sub.VERSION.dll_GetFileVersionInfoSizeW
mov dword [rsp + 0x38], eax
mov ecx, eax
call fcn.180034890
mov rdi, rax
test rax, rax
je 0x18019267e
mov r8d, dword [rsp + 0x38]
xor edx, edx
mov rcx, rax
call fcn.18017a8f0
mov r9, rdi
mov r8d, dword [rsp + 0x38]
mov edx, dword [rsp + 0x4c]
lea rcx, [rbp + 0x310]
call sub.VERSION.dll_GetFileVersionInfoW
test eax, eax
je 0x180192675
mov qword [rsp + 0x78], rsi
lea r9, [rsp + 0x38]
lea r8, [rsp + 0x78]
lea rdx, str.VarFileInfoTranslation
mov rcx, rdi
call sub.VERSION.dll_VerQueryValueW
test eax, eax
je 0x180192675
mov rax, qword [rsp + 0x78]
movzx edx, word [rax]
mov word [0x180251c64], dx
lea rcx, [0x180245bd2]
movzx eax, word [rcx + 2]
and ax, dx
cmp ax, word [rcx]
je 0x18019265c
inc esi
add rcx, 6
cmp esi, 0x1a
jb 0x180192643
jmp 0x180192675
movsxd rax, esi
lea rcx, [rax + rax*2]
lea rax, [0x180245bd0]
movzx eax, word [rax + rcx*2]
mov word [0x180251c64], ax
mov rcx, rdi
call fcn.180034898
nop
lea rdx, [rbx - 0x18]
lock xadd dword [rdx + 0x10], r15d
dec r15d
test r15d, r15d
jg 0x18019269a
mov rcx, qword [rdx]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VariantClear]
nop
mov rcx, qword [rsp + 0x60]
test rcx, rcx
je 0x1801926aa
call qword [sym.imp.ADVAPI32.dll_RegCloseKey]
mov eax, 1
mov rcx, qword [rbp + 0x520]
xor rcx, rsp
call fcn.180177910
lea r11, [rsp + 0x630]
mov rbx, qword [r11 + 0x30]
mov rsi, qword [r11 + 0x38]
mov rdi, qword [r11 + 0x40]
mov rsp, r11
pop r15
pop r14
pop r13
pop r12
pop rbp
ret