Function at 0x453a20
Capabilities:
Get common file path
Query environment variable
Query or enumerate registry value

Disassembly:
sub esp, 0x228
mov eax, dword [0x4832b0]
xor eax, esp
mov dword [esp + 0x224], eax
push esi
xor eax, eax
push 0x210
push eax
lea ecx, [esp + 0x1e]
push ecx
mov word [esp + 0x20], ax
call fcn.00456570
add esp, 0xc
lea edx, [esp + 8]
push edx
push str.SoftwareSimonTathamPuTTY
push 0x80000001
mov dword [esp + 0x18], 0x212
call dword [sym.imp.ADVAPI32.dll_RegOpenKeyA]
test eax, eax
jne 0x453ae0
lea eax, [esp + 0xc]
push eax
mov eax, dword [esp + 0xc]
lea ecx, [esp + 0x18]
push ecx
lea edx, [esp + 0x18]
push edx
push 0
push str.RandSeedFile
push eax
call dword [sym.imp.ADVAPI32.dll_RegQueryValueExA]
test eax, eax
jne 0x453a9c
cmp dword [esp + 0x10], 1
je 0x453aa1
mov byte [esp + 0x14], 0
mov ecx, dword [esp + 8]
push ecx
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
cmp byte [esp + 0x14], 0
je 0x453ae0
lea esi, [esp + 4]
mov eax, ebx
lea ecx, [esp + 0x14]
call fcn.004539b0
test eax, eax
je 0x453ae0
mov eax, dword [esp + 4]
pop esi
mov ecx, dword [esp + 0x224]
xor ecx, esp
call fcn.00456f82
add esp, 0x228
ret
cmp dword [0x487200], 0
jne 0x453b2f
push str.shell32.dll
call fcn.0044fc00
add esp, 4
mov dword [0x487204], eax
test eax, eax
je 0x453b1c
push str.SHGetFolderPathA
push eax
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov dword [0x4871fc], eax
mov dword [0x487200], 1
jmp 0x453b34
xor eax, eax
mov dword [0x4871fc], eax
mov dword [0x487200], 1
jmp 0x453b34
mov eax, dword [0x4871fc]
test eax, eax
je 0x453bf8
lea edx, [esp + 0x14]
push edx
push 0
push 0
push 0x1c
push 0
call eax
test eax, eax
jl 0x453b98
lea eax, [esp + 0x14]
dec eax
mov cl, byte [eax + 1]
inc eax
test cl, cl
jne 0x453b54
mov ecx, dword [str.PUTTY.RND]
mov edx, dword [0x47d43c]
mov dword [eax], ecx
mov cx, word [0x47d440]
mov dword [eax + 4], edx
mov dl, byte [0x47d442]
mov word [eax + 8], cx
mov byte [eax + 0xa], dl
lea esi, [esp + 4]
mov eax, ebx
lea ecx, [esp + 0x14]
call fcn.004539b0
test eax, eax
jne 0x453ac6
lea eax, [esp + 0x14]
push eax
push 0
push 0
push 0x1a
push 0
call dword [0x4871fc]
test eax, eax
jl 0x453bf8
lea eax, [esp + 0x14]
dec eax
mov cl, byte [eax + 1]
inc eax
test cl, cl
jne 0x453bb4
mov ecx, dword [str.PUTTY.RND]
mov edx, dword [0x47d43c]
mov dword [eax], ecx
mov cx, word [0x47d440]
mov dword [eax + 4], edx
mov dl, byte [0x47d442]
mov word [eax + 8], cx
mov byte [eax + 0xa], dl
lea esi, [esp + 4]
mov eax, ebx
lea ecx, [esp + 0x14]
call fcn.004539b0
test eax, eax
jne 0x453ac6
mov esi, dword [sym.imp.KERNEL32.dll_GetEnvironmentVariableA]
push 0x212
lea eax, [esp + 0x18]
push eax
push str.HOMEDRIVE
call esi
mov ecx, 0x212
sub ecx, eax
push ecx
lea edx, [esp + eax + 0x18]
push edx
push str.HOMEPATH
call esi
test eax, eax
je 0x453c74
lea eax, [esp + 0x14]
dec eax
lea esp, [esp]
mov cl, byte [eax + 1]
inc eax
test cl, cl
jne 0x453c30
mov ecx, dword [str.PUTTY.RND]
mov edx, dword [0x47d43c]
mov dword [eax], ecx
mov cx, word [0x47d440]
mov dword [eax + 4], edx
mov dl, byte [0x47d442]
mov word [eax + 8], cx
mov byte [eax + 0xa], dl
lea esi, [esp + 4]
mov eax, ebx
lea ecx, [esp + 0x14]
call fcn.004539b0
test eax, eax
jne 0x453ac6
push 0x212
lea eax, [esp + 0x18]
push eax
call dword [sym.imp.KERNEL32.dll_GetWindowsDirectoryA]
lea eax, [esp + 0x14]
dec eax
lea esp, [esp]
mov cl, byte [eax + 1]
inc eax
test cl, cl
jne 0x453c90
mov ecx, dword [str.PUTTY.RND]
mov edx, dword [0x47d43c]
mov dword [eax], ecx
mov cx, word [0x47d440]
mov dword [eax + 4], edx
mov dl, byte [0x47d442]
mov word [eax + 8], cx
mov byte [eax + 0xa], dl
lea esi, [esp + 4]
mov eax, ebx
lea ecx, [esp + 0x14]
call fcn.004539b0
test eax, eax
jne 0x453ac6
mov ecx, dword [esp + 0x228]
pop esi
xor ecx, esp
or eax, 0xffffffff
call fcn.00456f82
add esp, 0x228
ret