Function at 0x41c980
Capabilities:
Delete registry value
Persist via run registry key
Query or enumerate registry value
Set registry value

Disassembly:
push 0xffffffffffffffff
push 0x4f3468
mov eax, dword fs:[0]
push eax
sub esp, 0x38
push ebx
push ebp
push esi
push edi
mov eax, dword [0x52a6ec]
xor eax, esp
push eax
lea eax, [esp + 0x4c]
mov dword fs:[0], eax
lea eax, [esp + 0x1c]
push eax
mov ecx, 0x506c24
call fcn.00405cc0
mov ecx, dword [esp + 0x5c]
mov dword [esp + 0x54], 0
mov ecx, dword [ecx]
mov ebx, 3
test ecx, ecx
je 0x41c9da
mov edx, dword [ecx]
mov edx, dword [edx + 4]
lea eax, [esp + 0x1c]
push eax
push ebx
call edx
or edi, 0xffffffff
mov dword [esp + 0x54], edi
mov eax, dword [esp + 0x1c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, edi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41ca00
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
lea ecx, [esp + 0x1c]
push ecx
mov ecx, 0x505f98
call fcn.00405cc0
mov ebp, 1
push 0
lea esi, [esp + 0x2c]
mov dword [esp + 0x58], ebp
call fcn.00417aa0
add esp, 4
push eax
lea edx, [esp + 0x20]
mov ecx, 0x50597c
mov byte [esp + 0x58], 2
call fcn.004141a0
mov byte [esp + 0x58], 1
mov eax, dword [esp + 0x2c]
add eax, 0xfffffff0
add esp, 4
lea edx, [eax + 0xc]
mov ecx, edi
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x41ca61
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov dword [esp + 0x54], edi
mov eax, dword [esp + 0x1c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, edi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41ca84
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
lea ecx, [esp + 0x1c]
push ecx
mov ecx, 0x506004
call fcn.00405cc0
push 0
lea esi, [esp + 0x2c]
mov dword [esp + 0x58], ebx
call fcn.00417aa0
add esp, 4
push eax
lea edx, [esp + 0x20]
mov ecx, 0x50598c
mov byte [esp + 0x58], 4
call fcn.004141a0
mov byte [esp + 0x58], bl
mov eax, dword [esp + 0x2c]
add eax, 0xfffffff0
add esp, 4
lea edx, [eax + 0xc]
mov ecx, edi
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x41cadf
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov dword [esp + 0x54], edi
mov eax, dword [esp + 0x1c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, edi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41cb02
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
lea ecx, [esp + 0x20]
push ecx
mov ecx, 0x50606c
call fcn.00405cc0
lea edx, [esp + 0x20]
push edx
lea eax, [esp + 0x30]
push 0
push eax
mov dword [esp + 0x60], 5
call fcn.00417ef0
add esp, 0xc
mov byte [esp + 0x54], 6
mov eax, dword [eax]
sub eax, 0x10
call fcn.00406260
lea esi, [eax + 0x10]
mov dword [esp + 0x1c], esi
mov byte [esp + 0x54], 8
mov eax, dword [esp + 0x2c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, edi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41cb67
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0x54], 9
mov eax, dword [esp + 0x20]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
lock xadd dword [ecx], edi
dec edi
test edi, edi
jg 0x41cb89
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov edx, dword [0x52a1ec]
mov eax, dword [edx + 0xc]
mov ecx, 0x52a1ec
call eax
add eax, 0x10
mov dword [esp + 0x18], eax
push esi
mov bl, 0xa
push str.__s_
lea edi, [esp + 0x20]
mov byte [esp + 0x5c], bl
call fcn.00404770
mov edi, dword [esp + 0x20]
add esp, 8
cmp dword [edi - 4], ebp
jle 0x41cbd3
mov ecx, dword [edi - 0xc]
push ecx
lea edx, [esp + 0x1c]
push edx
call fcn.004063d0
mov edi, dword [esp + 0x18]
push edi
call fcn.00420cf0
mov ebp, dword [sym.imp.ADVAPI32.dll_RegCloseKey]
add esp, 4
test al, al
je 0x41ccaa
lea eax, [esp + 0x28]
push eax
mov ecx, str.Google_Pinyin_2_Autoupdater
call fcn.00405cc0
lea ecx, [esp + 0x24]
push ecx
mov ecx, str.SoftwareMicrosoftWindowsCurrentVersionRun
mov byte [esp + 0x58], 0xb
call fcn.00405cc0
mov eax, dword [esp + 0x24]
lea edx, [esp + 0x40]
xor esi, esi
push edx
mov edx, 0x2011f
mov ecx, reloc.OLEAUT32.dll_SysReAllocString
mov dword [esp + 0x44], esi
mov dword [esp + 0x48], esi
mov dword [esp + 0x4c], esi
call fcn.00404dd0
test eax, eax
je 0x41cc44
mov eax, dword [esp + 0x40]
cmp eax, esi
je 0x41cc5d
push eax
call ebp
jmp 0x41cc5d
mov eax, dword [esp + 0x28]
mov esi, dword [esp + 0x40]
push eax
push esi
call dword [sym.imp.ADVAPI32.dll_RegDeleteValueW]
test esi, esi
je 0x41cc5b
push esi
call ebp
xor esi, esi
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41cc7d
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0x54], bl
mov eax, dword [esp + 0x28]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41cd2e
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
jmp 0x41cd2e
call fcn.004218d0
lea ecx, [esp + 0x24]
push ecx
mov ecx, str.Google_Pinyin_2_Autoupdater
call fcn.00405cc0
lea edx, [esp + 0x28]
push edx
mov ecx, str.SoftwareMicrosoftWindowsCurrentVersionRun
mov byte [esp + 0x58], 0xc
call fcn.00405cc0
lea eax, [esp + 0x18]
push eax
lea ecx, [esp + 0x28]
push ecx
lea eax, [esp + 0x30]
call fcn.00413fa0
mov eax, dword [esp + 0x30]
add eax, 0xfffffff0
add esp, 8
lea edx, [eax + 0xc]
or ecx, 0xffffffff
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x41cd08
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0x54], bl
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41cd2c
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
xor esi, esi
mov dword [esp + 0x40], esi
mov dword [esp + 0x44], esi
mov dword [esp + 0x48], esi
push 0x2011f
lea ecx, [esp + 0x44]
push ecx
mov eax, str.SoftwareGoogleGoogle_Pinyin_2
mov ecx, reloc.OLEAUT32.dll_SysReAllocString
mov byte [esp + 0x5c], 0xd
call fcn.00405df0
test eax, eax
je 0x41cdba
mov eax, dword [esp + 0x40]
cmp eax, esi
je 0x41cd67
push eax
call ebp
mov byte [esp + 0x54], 9
lea eax, [edi - 0x10]
or ecx, 0xffffffff
lea edx, [eax + 0xc]
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x41cd88
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov dword [esp + 0x54], 0xffffffff
mov eax, dword [esp + 0x1c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41cdb0
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, 6
jmp 0x41d1a5
lea ecx, [esp + 0x28]
push ecx
call fcn.0041ee70
mov edx, dword [eax]
mov eax, dword [esp + 0x2c]
add esp, 4
cmp dword [edx - 0xc], esi
setne bl
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41cdef
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
test bl, bl
je 0x41cdf8
call fcn.00422210
lea ecx, [esp + 0x40]
push ecx
call fcn.0041d430
lea edx, [esp + 0x28]
push edx
mov ecx, 0x505974
call fcn.00405cc0
mov edx, dword [esp + 0x28]
mov edi, dword [esp + 0x40]
mov ebx, dword [sym.imp.ADVAPI32.dll_RegQueryValueExW]
lea eax, [esp + 0x24]
push eax
push esi
lea ecx, [esp + 0x38]
push ecx
push esi
push edx
push edi
mov dword [esp + 0x48], esi
mov dword [esp + 0x3c], esi
call ebx
test eax, eax
mov eax, dword [esp + 0x28]
setne byte [esp + 0x17]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41ce5e
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
cmp byte [esp + 0x17], 0
mov ebp, dword [sym.imp.ADVAPI32.dll_RegSetValueExW]
je 0x41ce8a
mov ecx, dword [esp + 0x5c]
movzx edx, byte [ecx + 0x18]
push 4
lea eax, [esp + 0x34]
push eax
push 4
push 0
push 0x505974
push edi
mov dword [esp + 0x48], edx
call ebp
lea ecx, [esp + 0x28]
push ecx
mov ecx, str.BrandCode
call fcn.00405cc0
xor eax, eax
lea edx, [esp + 0x30]
push edx
mov edx, dword [esp + 0x2c]
push eax
lea ecx, [esp + 0x2c]
push ecx
push eax
push edx
push edi
mov dword [esp + 0x3c], eax
mov dword [esp + 0x48], eax
call ebx
test eax, eax
mov eax, dword [esp + 0x28]
setne byte [esp + 0x17]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41cede
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
cmp byte [esp + 0x17], 0
je 0x41cf10
mov ecx, dword [esp + 0x5c]
mov esi, dword [ecx + 0x1c]
xor eax, eax
test esi, esi
setne al
test eax, eax
je 0x41cf10
push esi
call dword [sym.imp.KERNEL32.dll_lstrlenW]
lea edx, [eax + eax + 2]
push edx
push esi
push 1
push 0
push str.BrandCode
push edi
call ebp
lea eax, [esp + 0x28]
push eax
mov ecx, 0x50526c
call fcn.00405cc0
mov eax, dword [esp + 0x28]
xor esi, esi
lea ecx, [esp + 0x30]
push ecx
push esi
lea edx, [esp + 0x2c]
push edx
push esi
push eax
push edi
mov dword [esp + 0x3c], esi
mov dword [esp + 0x48], esi
call ebx
test eax, eax
mov eax, dword [esp + 0x28]
setne bl
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41cf62
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
test bl, bl
je 0x41cf85
push esi
call fcn.004cb03c
add esp, 4
push 4
lea ecx, [esp + 0x34]
push ecx
push 4
push esi
push 0x50526c
push edi
mov dword [esp + 0x48], eax
call ebp
push 0
lea esi, [esp + 0x34]
call fcn.00417aa0
mov esi, dword [eax]
mov ebx, dword [sym.imp.KERNEL32.dll_lstrlenW]
xor eax, eax
add esp, 4
test esi, esi
setne al
test eax, eax
je 0x41cfbb
push esi
call ebx
lea edx, [eax + eax + 2]
push edx
push esi
push 1
push 0
push str.PATH
push edi
call ebp
mov eax, dword [esp + 0x30]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41cfdb
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
push 1
lea esi, [esp + 0x34]
call fcn.00417aa0
mov esi, dword [eax]
xor eax, eax
add esp, 4
test esi, esi
setne al
test eax, eax
je 0x41d00b
push esi
call ebx
lea ecx, [eax + eax + 2]
push ecx
push esi
push 1
push 0
push str.DataPath
push edi
call ebp
mov eax, dword [esp + 0x30]
add eax, 0xfffffff0
lea edx, [eax + 0xc]
or ecx, 0xffffffff
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x41d02b
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
call fcn.00425af0
xor esi, esi
mov dword [esp + 0x34], esi
mov dword [esp + 0x38], esi
mov dword [esp + 0x3c], esi
push 0x2001f
lea ecx, [esp + 0x38]
push ecx
mov eax, str.SoftwareGoogleGoogle_Pinyin_2Autoupdate
mov ecx, reloc.OLEAUT32.dll_SysReAllocString
mov byte [esp + 0x5c], 0xe
call fcn.00405df0
test eax, eax
je 0x41d08b
mov eax, dword [esp + 0x34]
cmp eax, esi
je 0x41d06f
push eax
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
cmp edi, esi
je 0x41d07a
push edi
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
mov byte [esp + 0x54], 9
mov eax, dword [esp + 0x18]
add eax, 0xfffffff0
jmp 0x41cd6f
push 0x506a68
call ebx
mov ebx, dword [esp + 0x34]
lea ecx, [eax + eax + 2]
push ecx
push 0x506a68
push 1
push esi
push str.InstalledVersion
push ebx
call ebp
call fcn.00419c20
test al, al
je 0x41d121
push 0x2011f
lea edx, [esp + 0x38]
push edx
mov eax, str.SoftwareGoogleGoogle_Pinyin_2Autoupdate
mov ecx, reloc.OLEAUT32.dll_SysReAllocString
call fcn.00405df0
test eax, eax
je 0x41d109
mov eax, dword [esp + 0x34]
test eax, eax
je 0x41d0e0
push eax
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
test edi, edi
je 0x41d0eb
push edi
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
mov byte [esp + 0x54], 9
mov eax, dword [esp + 0x18]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jmp 0x41cd7c
push str.InstalledVersion
lea ecx, [esp + 0x38]
push ecx
mov esi, 0x506a68
call fcn.00404e40
mov ebx, dword [esp + 0x34]
mov esi, dword [esp + 0x5c]
mov ecx, dword [esi]
test ecx, ecx
je 0x41d140
inc dword [esi + 8]
mov eax, dword [esi + 8]
imul eax, eax, 0x64
cdq
idiv dword [esi + 4]
mov ebp, dword [ecx]
mov edx, dword [ebp + 8]
push eax
call edx
test ebx, ebx
je 0x41d14b
push ebx
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
test edi, edi
je 0x41d156
push edi
call dword [sym.imp.ADVAPI32.dll_RegCloseKey]
mov byte [esp + 0x54], 9
mov eax, dword [esp + 0x18]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41d17b
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov dword [esp + 0x54], 0xffffffff
mov eax, dword [esp + 0x1c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x41d1a3
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
xor eax, eax
mov ecx, dword [esp + 0x4c]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x44
ret 4