Function at 0x409f60
Capabilities:
Check if file exists
Get common file path
Query or enumerate registry value
Read .ini file

Disassembly:
sub rsp, 0xab8
mov rax, qword [0x0042a560]
xor rax, rsp
mov qword [rsp + 0xa90], rax
mov qword [rsp + 0xad8], rsi
mov rsi, rcx
lea rcx, [rsp + 0x252]
xor edx, edx
mov r8d, 0x206
mov word [rsp + 0x250], 0
call fcn.0040e3f0
lea rcx, [rsp + 0x42]
xor edx, edx
mov r8d, 0x206
mov word [rsp + 0x40], 0
call fcn.0040e3f0
lea rcx, [rsp + 0x462]
xor edx, edx
mov r8d, 0x206
mov word [rsp + 0x460], 0
call fcn.0040e3f0
cmp qword [rsi + 0xf0], 8
jb 0x409fee
mov r8, qword [rsi + 0xd8]
jmp 0x409ff5
lea r8, [rsi + 0xd8]
mov qword [rsp + 0xac8], rbx
mov qword [rsp + 0xad0], rbp
lea r9, str.WanNengWBInfo.ini
lea rdx, str._s_s
lea rcx, [rsp + 0x460]
mov qword [rsp + 0xab0], rdi
mov qword [rsp + 0xaa8], r12
call fcn.0040e620
lea rdx, [rsp + 0x460]
mov qword [rsp + 0x28], rdx
lea r9, [rsp + 0x40]
lea r8, [0x00421e14]
lea rdx, str.CfgRootPath
lea rcx, str.AppInfo
mov dword [rsp + 0x20], 0x104
call qword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
lea rcx, [rsp + 0x40]
call qword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
je 0x40a198
mov rdx, qword [rsi + 0x50]
xor eax, eax
lea rdi, [rsp + 0x40]
mov rcx, 0xffffffffffffffff
repne scasw ax, word [rdi]
cmp rdx, 8
not rcx
lea rbp, [rcx - 1]
jb 0x40a0a4
mov rax, qword [rsi + 0x38]
lea rdi, [rsi + 0x38]
jmp 0x40a0ab
lea rdi, [rsi + 0x38]
mov rax, rdi
lea rcx, [rsp + 0x40]
cmp rcx, rax
jb 0x40a101
cmp rdx, 8
jb 0x40a0c0
mov rcx, qword [rdi]
jmp 0x40a0c3
mov rcx, rdi
mov rax, qword [rsi + 0x48]
lea rcx, [rcx + rax*2]
lea rax, [rsp + 0x40]
cmp rcx, rax
jbe 0x40a101
cmp rdx, 8
jb 0x40a0de
mov rdi, qword [rdi]
lea r8, [rsp + 0x40]
lea rdx, [rsi + 0x30]
lea rcx, [rsi + 0x30]
sub r8, rdi
mov r9, rbp
sar r8, 1
call fcn.00401a30
mov byte [rsi], 1
jmp 0x40a790
movabs rax, 0x7ffffffffffffffe
cmp rbp, rax
jbe 0x40a115
call fcn.0040e230
mov rax, qword [rsi + 0x50]
cmp rax, rbp
jae 0x40a142
mov r8, qword [rsi + 0x48]
lea rcx, [rsi + 0x30]
mov rdx, rbp
call fcn.00401420
test rbp, rbp
je 0x40a190
mov rdx, qword [rsi + 0x50]
cmp rdx, 8
jb 0x40a163
mov rcx, qword [rdi]
jmp 0x40a166
test rbp, rbp
jne 0x40a12e
xor r12d, r12d
cmp rax, 8
mov qword [rsi + 0x48], r12
jb 0x40a157
mov rdi, qword [rdi]
mov word [rdi], r12w
mov byte [rsi], 1
jmp 0x40a790
mov rcx, rdi
lea r12, [rbp + rbp]
lea r8, [rsp + 0x40]
add rdx, rdx
mov r9, r12
call fcn.0040e710
cmp qword [rsi + 0x50], 8
mov qword [rsi + 0x48], rbp
jb 0x40a189
mov rdi, qword [rdi]
mov word [r12 + rdi], 0
mov byte [rsi], 1
jmp 0x40a790
xor r9d, r9d
lea rdx, [rsp + 0x250]
xor ecx, ecx
lea r8d, [r9 + 0x2c]
call qword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathW]
mov edx, dword [0x004219d4]
xor eax, eax
lea rdi, [rsp + 0x250]
mov rcx, 0xffffffffffffffff
lea r9, [rsp + 0x40]
repne scasw ax, word [rdi]
mov rcx, 0xffffffffffffffff
lea r8, [0x00421e14]
mov dword [rdi - 2], edx
lea rdi, [rsp + 0x250]
repne scasw ax, word [rdi]
mov rax, qword [str.WanNengWBInput]
mov rcx, 0xffffffffffffffff
mov qword [rdi - 2], rax
mov rax, qword [0x00421fe0]
mov qword [rdi + 6], rax
mov rax, qword [0x00421fe8]
mov qword [rdi + 0xe], rax
mov eax, dword [0x00421ff0]
mov dword [rdi + 0x16], eax
movzx eax, word [0x00421ff4]
mov word [rdi + 0x1a], ax
xor eax, eax
lea rdi, [rsp + 0x250]
repne scasw ax, word [rdi]
mov rcx, 0xffffffffffffffff
mov dword [rdi - 2], edx
lea rdi, [rsp + 0x250]
lea rdx, str.CfgRootPath
repne scasw ax, word [rdi]
mov rax, qword [str.WanNengWB]
mov rcx, 0xffffffffffffffff
mov qword [rdi - 2], rax
mov rax, qword [0x004229b8]
mov qword [rdi + 6], rax
mov eax, dword [0x004229c0]
mov dword [rdi + 0xe], eax
xor eax, eax
lea rdi, [rsp + 0x250]
repne scasw ax, word [rdi]
mov rax, qword [str..ini]
lea rcx, str.Globals
mov qword [rdi - 2], rax
movzx eax, word [0x004229a8]
mov word [rdi + 6], ax
lea rax, [rsp + 0x250]
mov qword [rsp + 0x28], rax
mov dword [rsp + 0x20], 0x104
call qword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
lea rcx, [rsp + 0x40]
call qword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
je 0x40a3ed
mov rdx, qword [rsi + 0x50]
xor eax, eax
lea rdi, [rsp + 0x40]
mov rcx, 0xffffffffffffffff
repne scasw ax, word [rdi]
cmp rdx, 8
not rcx
lea rbp, [rcx - 1]
jb 0x40a2f9
mov rax, qword [rsi + 0x38]
lea rdi, [rsi + 0x38]
jmp 0x40a300
lea rdi, [rsi + 0x38]
mov rax, rdi
lea rcx, [rsp + 0x40]
cmp rcx, rax
jb 0x40a356
cmp rdx, 8
jb 0x40a315
mov rcx, qword [rdi]
jmp 0x40a318
mov rcx, rdi
mov rax, qword [rsi + 0x48]
lea rcx, [rcx + rax*2]
lea rax, [rsp + 0x40]
cmp rcx, rax
jbe 0x40a356
cmp rdx, 8
jb 0x40a333
mov rdi, qword [rdi]
lea r8, [rsp + 0x40]
lea rdx, [rsi + 0x30]
lea rcx, [rsi + 0x30]
sub r8, rdi
mov r9, rbp
sar r8, 1
call fcn.00401a30
mov byte [rsi], 1
jmp 0x40a790
movabs rax, 0x7ffffffffffffffe
cmp rbp, rax
jbe 0x40a36a
call fcn.0040e230
mov rax, qword [rsi + 0x50]
cmp rax, rbp
jae 0x40a397
mov r8, qword [rsi + 0x48]
lea rcx, [rsi + 0x30]
mov rdx, rbp
call fcn.00401420
test rbp, rbp
je 0x40a3e5
mov rdx, qword [rsi + 0x50]
cmp rdx, 8
jb 0x40a3b8
mov rcx, qword [rdi]
jmp 0x40a3bb
test rbp, rbp
jne 0x40a383
xor r12d, r12d
cmp rax, 8
mov qword [rsi + 0x48], r12
jb 0x40a3ac
mov rdi, qword [rdi]
mov word [rdi], r12w
mov byte [rsi], 1
jmp 0x40a790
mov rcx, rdi
lea r12, [rbp + rbp]
lea r8, [rsp + 0x40]
add rdx, rdx
mov r9, r12
call fcn.0040e710
mov qword [rsi + 0x48], rbp
cmp qword [rsi + 0x50], 8
jb 0x40a3de
mov rdi, qword [rdi]
mov word [rdi + r12], 0
mov byte [rsi], 1
jmp 0x40a790
lea rcx, [rsp + 0x672]
xor edx, edx
mov r8d, 0x206
mov word [rsp + 0x670], 0
call fcn.0040e3f0
xor r12d, r12d
mov rcx, r12
lea rdx, str.SOFTWARE_
nop
nop
movzx eax, word [rcx + rdx]
add rcx, 2
test ax, ax
mov word [rsp + rcx + 0x66e], ax
jne 0x40a420
xor eax, eax
lea rdi, [rsp + 0x670]
mov rcx, 0xffffffffffffffff
repne scasw ax, word [rdi]
mov rax, qword [str.WanNengWBInput]
lea rdx, [rsp + 0x670]
mov qword [rdi - 2], rax
mov rax, qword [0x00421fe0]
mov r9d, 0xf003f
mov qword [rdi + 6], rax
mov rax, qword [0x00421fe8]
xor r8d, r8d
mov qword [rdi + 0xe], rax
mov eax, dword [0x00421ff0]
mov rcx, 0xffffffff80000002
mov dword [rdi + 0x16], eax
movzx eax, word [0x00421ff4]
mov word [rdi + 0x1a], ax
lea rax, [rsp + 0x30]
mov qword [rsp + 0x20], rax
call qword [sym.imp.ADVAPI32.dll_RegOpenKeyExW]
test eax, eax
jne 0x40a5fb
mov rcx, qword [rsp + 0x30]
lea rax, [rsp + 0x38]
lea rdx, str.CfgRootPath
mov qword [rsp + 0x28], rax
lea rax, [rsp + 0x40]
xor r9d, r9d
xor r8d, r8d
mov dword [rsp + 0x38], 0x104
mov qword [rsp + 0x20], rax
call qword [sym.imp.ADVAPI32.dll_RegQueryValueExW]
test eax, eax
jne 0x40a5fb
lea rcx, [rsp + 0x40]
call qword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
je 0x40a5fb
mov rcx, qword [rsp + 0x30]
call qword [sym.imp.ADVAPI32.dll_RegCloseKey]
mov rdx, qword [rsi + 0x50]
xor eax, eax
lea rdi, [rsp + 0x40]
mov rcx, 0xffffffffffffffff
repne scasw ax, word [rdi]
cmp rdx, 8
not rcx
lea rbp, [rcx - 1]
jb 0x40a534
mov rax, qword [rsi + 0x38]
lea rdi, [rsi + 0x38]
jmp 0x40a53b
lea rdi, [rsi + 0x38]
mov rax, rdi
lea rcx, [rsp + 0x40]
cmp rcx, rax
jb 0x40a591
cmp rdx, 8
jb 0x40a550
mov rcx, qword [rdi]
jmp 0x40a553
mov rcx, rdi
mov rax, qword [rsi + 0x48]
lea rcx, [rcx + rax*2]
lea rax, [rsp + 0x40]
cmp rcx, rax
jbe 0x40a591
cmp rdx, 8
jb 0x40a56e
mov rdi, qword [rdi]
lea r8, [rsp + 0x40]
lea rdx, [rsi + 0x30]
lea rcx, [rsi + 0x30]
sub r8, rdi
mov r9, rbp
sar r8, 1
call fcn.00401a30
mov byte [rsi], 1
jmp 0x40a790
movabs rax, 0x7ffffffffffffffe
cmp rbp, rax
jbe 0x40a5a5
call fcn.0040e230
mov rax, qword [rsi + 0x50]
cmp rax, rbp
jae 0x40a5dd
mov r8, qword [rsi + 0x48]
lea rcx, [rsi + 0x30]
mov rdx, rbp
call fcn.00401420
test rbp, rbp
je 0x40a3e5
mov rdx, qword [rsi + 0x50]
cmp rdx, 8
jb 0x40a3b8
mov rcx, qword [rdi]
jmp 0x40a3bb
test rbp, rbp
jne 0x40a5be
cmp rax, 8
mov qword [rsi + 0x48], r12
jb 0x40a5ef
mov rdi, qword [rdi]
mov word [rdi], r12w
mov byte [rsi], 1
jmp 0x40a790
mov rcx, qword [rsp + 0x30]
call qword [sym.imp.ADVAPI32.dll_RegCloseKey]
lea rdx, [rsp + 0x880]
mov r8d, 0x104
xor ecx, ecx
mov byte [rsi], r12b
call qword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
lea rcx, [rsp + 0x880]
mov dx, 0x5c
call fcn.0040e5f0
lea r9, str.WanNengWBInfo.ini
lea r8, [rsp + 0x880]
lea rdx, str._s_s
lea rcx, [rsp + 0x460]
mov word [rax + 2], r12w
call fcn.0040e620
lea rax, [rsp + 0x460]
lea r9, [rsp + 0x40]
mov qword [rsp + 0x28], rax
lea r8, [0x00421e14]
lea rdx, str.CfgRootPath
lea rcx, str.AppInfo
mov dword [rsp + 0x20], 0x104
call qword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
lea rcx, [rsp + 0x40]
call qword [sym.imp.SHLWAPI.dll_PathFileExistsW]
test eax, eax
je 0x40a78d
mov rdx, qword [rsi + 0x50]
xor eax, eax
lea rdi, [rsp + 0x40]
mov rcx, 0xffffffffffffffff
repne scasw ax, word [rdi]
cmp rdx, 8
not rcx
lea rbp, [rcx - 1]
jb 0x40a6cc
mov rax, qword [rsi + 0x38]
lea rdi, [rsi + 0x38]
jmp 0x40a6d3
lea rdi, [rsi + 0x38]
mov rax, rdi
lea rcx, [rsp + 0x40]
cmp rcx, rax
jb 0x40a726
cmp rdx, 8
jb 0x40a6e8
mov rcx, qword [rdi]
jmp 0x40a6eb
mov rcx, rdi
mov rax, qword [rsi + 0x48]
lea rcx, [rcx + rax*2]
lea rax, [rsp + 0x40]
cmp rcx, rax
jbe 0x40a726
cmp rdx, 8
jb 0x40a706
mov rdi, qword [rdi]
lea r8, [rsp + 0x40]
lea rdx, [rsi + 0x30]
lea rcx, [rsi + 0x30]
sub r8, rdi
mov r9, rbp
sar r8, 1
call fcn.00401a30
mov byte [rsi], 1
jmp 0x40a790
movabs rax, 0x7ffffffffffffffe
cmp rbp, rax
jbe 0x40a73a
call fcn.0040e230
mov rax, qword [rsi + 0x50]
cmp rax, rbp
jae 0x40a772
mov r8, qword [rsi + 0x48]
lea rcx, [rsi + 0x30]
mov rdx, rbp
call fcn.00401420
test rbp, rbp
je 0x40a3e5
mov rdx, qword [rsi + 0x50]
cmp rdx, 8
jb 0x40a3b8
mov rcx, qword [rdi]
jmp 0x40a3bb
test rbp, rbp
jne 0x40a753
cmp rax, 8
mov qword [rsi + 0x48], r12
jb 0x40a784
mov rdi, qword [rdi]
mov word [rdi], r12w
mov byte [rsi], 1
jmp 0x40a790
mov byte [rsi], r12b
mov r12, qword [rsp + 0xaa8]
mov rdi, qword [rsp + 0xab0]
mov rsi, qword [rsp + 0xad8]
mov rbp, qword [rsp + 0xad0]
mov rbx, qword [rsp + 0xac8]
mov rcx, qword [rsp + 0xa90]
xor rcx, rsp
call fcn.0040e5d0
add rsp, 0xab8
ret