Function at 0x401880
Capabilities:
Check os version
Create directory
Get common file path

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
push 0xffffffffffffffff
push 0x42a856
mov eax, dword fs:[0]
push eax
sub esp, 0xb30
mov eax, dword [0x435e48]
xor eax, esp
mov dword [esp + 0xb28], eax
push ebx
push esi
push edi
mov eax, dword [0x435e48]
xor eax, esp
push eax
lea eax, [esp + 0xb40]
mov dword fs:[0], eax
mov eax, dword [ebp + 0xc]
push 0x439d60
mov dword [esp + 0x34], eax
call dword [sym.imp.KERNEL32.dll_InitializeCriticalSection]
call fcn.00407ddd
xor ecx, ecx
test eax, eax
setne cl
test ecx, ecx
jne 0x4018ec
push 0x80004005
call fcn.00404af0
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
add eax, 0x10
mov dword [esp + 0x2c], eax
mov dword [esp + 0xb48], 0
call fcn.00407ddd
xor ecx, ecx
test eax, eax
setne cl
test ecx, ecx
jne 0x401921
push 0x80004005
call fcn.00404af0
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
add eax, 0x10
mov dword [esp + 0x24], eax
lea ebx, [esp + 0x2c]
mov edx, str.InstalledPath
mov ecx, str.SOFTWAREAcerLive_Updater
mov byte [esp + 0xb48], 1
call fcn.00404f90
test eax, eax
je 0x4019f7
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea ecx, [esp + 0x338]
push str.Query_InstalledPath_failed__error_code___d
push ecx
call fcn.00412760
add esp, 0xc
push 0
push 0
lea edx, [esp + 0x33c]
push edx
call fcn.004081a2
mov byte [esp + 0xb48], 0
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
or esi, 0xffffffff
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x4019ab
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov dword [esp + 0xb48], esi
mov eax, dword [esp + 0x2c]
add eax, 0xfffffff0
mov edx, esi
lea ecx, [eax + 0xc]
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x4019d1
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, esi
mov ecx, dword [esp + 0xb40]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0xb28]
xor ecx, esp
call fcn.00412539
mov esp, ebp
pop ebp
ret
lea ebx, [esp + 0x24]
mov edx, str.Brand
mov ecx, str.SOFTWAREOEMMetadata
call fcn.00404f90
test eax, eax
je 0x401a2d
mov edx, str.BrandName
mov ecx, str.SOFTWAREAcerLive_Updater
call fcn.00404f90
test eax, eax
je 0x401a2d
push 0x42f234
mov ecx, ebx
call fcn.004045f0
mov edx, dword [esp + 0x24]
mov edi, dword [edx - 0xc]
mov eax, dword [edx - 8]
mov ecx, 1
sub ecx, dword [edx - 4]
sub eax, edi
or eax, ecx
jge 0x401a53
push edi
lea ecx, [esp + 0x28]
call fcn.00404a70
mov edx, dword [esp + 0x24]
lea ecx, [edi + 1]
push ecx
push edx
call fcn.00413619
add esp, 8
test edi, edi
jl 0x401be7
mov eax, dword [esp + 0x24]
cmp edi, dword [eax - 8]
jg 0x401be7
mov dword [eax - 0xc], edi
mov eax, dword [esp + 0x24]
xor edx, edx
mov word [eax + edi*2], dx
mov ecx, dword [esp + 0x24]
mov eax, dword [ecx - 0xc]
or esi, 0xffffffff
test eax, eax
jl 0x401ab4
push str.gateway
push ecx
call fcn.004133f3
add esp, 8
test eax, eax
je 0x401ab4
sub eax, dword [esp + 0x24]
sar eax, 1
cmp eax, esi
je 0x401ab4
lea edi, [esi + 2]
jmp 0x401b52
lea edi, [esp + 0x24]
call fcn.00403da0
mov edi, eax
mov eax, dword [edi]
cmp dword [eax - 0xc], 0
jl 0x401ae8
push str.pack
push eax
call fcn.004133f3
add esp, 8
test eax, eax
je 0x401ae8
sub eax, dword [edi]
sar eax, 1
cmp eax, esi
je 0x401ae8
mov edi, 2
jmp 0x401b52
lea edi, [esp + 0x24]
call fcn.00403da0
mov edi, eax
mov eax, dword [edi]
cmp dword [eax - 0xc], 0
jl 0x401b1c
push str.emac
push eax
call fcn.004133f3
add esp, 8
test eax, eax
je 0x401b1c
sub eax, dword [edi]
sar eax, 1
cmp eax, esi
je 0x401b1c
mov edi, 3
jmp 0x401b52
lea edi, [esp + 0x24]
call fcn.00403da0
mov edi, eax
mov eax, dword [edi]
cmp dword [eax - 0xc], 0
jl 0x401b50
push str.founder
push eax
call fcn.004133f3
add esp, 8
test eax, eax
je 0x401b50
sub eax, dword [edi]
sar eax, 1
cmp eax, esi
je 0x401b50
mov edi, 4
jmp 0x401b52
xor edi, edi
lea ecx, [esp + 0x734]
push ecx
push 0
push 0
push 0x23
push 0
call dword [sym.imp.SHELL32.dll_SHGetFolderPathW]
test eax, eax
je 0x401bb0
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea edx, [esp + 0x338]
push str.Query_Repository_failed__error_code___d
push edx
call fcn.00412760
add esp, 0xc
push 0
push 0
lea eax, [esp + 0x33c]
push eax
call fcn.004081a2
mov byte [esp + 0xb48], 0
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
jmp 0x401996
lea ecx, [esp + 0x734]
push ecx
lea ecx, [esp + 0x20]
call fcn.00404c20
push 1
lea edx, [esp + 0x1c]
push edx
lea ecx, [esp + 0x34]
mov byte [esp + 0xb50], 2
call fcn.00403e00
mov eax, dword [eax]
mov ecx, dword [eax - 0xc]
cmp ecx, 1
jne 0x401bfe
test ecx, ecx
jge 0x401bf1
push 0x80070057
call fcn.00404af0
movzx eax, word [eax]
cmp ax, 0x5c
jne 0x401bfe
xor bl, bl
jmp 0x401c00
mov bl, 1
mov eax, dword [esp + 0x18]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401c1f
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
test bl, bl
je 0x401c2e
push 0x5c
lea ecx, [esp + 0x30]
call fcn.00404590
cmp edi, 1
jne 0x401dcb
push str.Gateway
lea ecx, [esp + 0x20]
push ecx
lea edx, [esp + 0x20]
push edx
call fcn.00403f40
mov eax, dword [eax]
mov edi, dword [sym.imp.KERNEL32.dll_CreateDirectoryW]
add esp, 0xc
push 0
push eax
call edi
mov eax, dword [esp + 0x18]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401c7a
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
push str.Gateway
lea ecx, [esp + 0x20]
push ecx
lea edx, [esp + 0x1c]
push edx
call fcn.00403f40
add esp, 0xc
push str.Gateway
push eax
lea eax, [esp + 0x28]
push eax
mov byte [esp + 0xb54], 3
call fcn.00403f40
add esp, 0xc
push 0x42eee4
push eax
lea ecx, [esp + 0x30]
push ecx
mov byte [esp + 0xb54], 4
call fcn.00403f40
add esp, 0xc
push 0x42f2e0
push eax
lea edx, [esp + 0x20]
push edx
mov byte [esp + 0xb54], 5
call fcn.00403f40
mov eax, dword [eax]
add esp, 0xc
push 0
push eax
call edi
mov eax, dword [esp + 0x18]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401d08
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0xb48], 4
mov eax, dword [esp + 0x28]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401d2f
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0xb48], 3
mov eax, dword [esp + 0x20]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401d56
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0xb48], 2
mov eax, dword [esp + 0x14]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401d7d
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
push str.Gateway
lea ecx, [esp + 0x24]
call fcn.00404c20
push str.Gateway_Updater
push eax
lea ecx, [esp + 0x1c]
push ecx
mov byte [esp + 0xb54], 6
call fcn.00403f40
add esp, 0xc
mov byte [esp + 0xb48], 7
mov eax, dword [eax]
mov ecx, dword [eax - 0xc]
push ecx
push eax
lea ecx, [esp + 0x24]
call fcn.004041f0
mov byte [esp + 0xb48], 6
jmp 0x401f63
cmp edi, 2
jne 0x401fb2
push str.Packard_Bell
lea ecx, [esp + 0x20]
push ecx
lea edx, [esp + 0x1c]
push edx
call fcn.00403f40
mov eax, dword [eax]
mov edi, dword [sym.imp.KERNEL32.dll_CreateDirectoryW]
add esp, 0xc
push 0
push eax
call edi
mov eax, dword [esp + 0x14]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401e17
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
push str.Packard_Bell
lea ecx, [esp + 0x20]
push ecx
lea edx, [esp + 0x20]
push edx
call fcn.00403f40
add esp, 0xc
push str.Packard_Bell
push eax
lea eax, [esp + 0x30]
push eax
mov byte [esp + 0xb54], 8
call fcn.00403f40
add esp, 0xc
push 0x42eee4
push eax
lea ecx, [esp + 0x28]
mov bl, 9
push ecx
mov byte [esp + 0xb54], bl
call fcn.00403f40
add esp, 0xc
push 0x42f2e0
push eax
lea edx, [esp + 0x1c]
push edx
mov byte [esp + 0xb54], 0xa
call fcn.00403f40
mov eax, dword [eax]
add esp, 0xc
push 0
push eax
call edi
mov eax, dword [esp + 0x14]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401ea6
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0xb48], bl
mov eax, dword [esp + 0x20]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401ecc
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0xb48], 8
mov eax, dword [esp + 0x28]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401ef3
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0xb48], 2
mov eax, dword [esp + 0x18]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401f1a
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
push str.Packard_Bell
lea ecx, [esp + 0x24]
call fcn.00404c20
push str.Packard_Bell_Updater
push eax
lea ecx, [esp + 0x1c]
mov bl, 0xb
push ecx
mov byte [esp + 0xb54], bl
call fcn.00403f40
add esp, 0xc
mov byte [esp + 0xb48], 0xc
mov eax, dword [eax]
mov ecx, dword [eax - 0xc]
push ecx
push eax
lea ecx, [esp + 0x24]
call fcn.004041f0
mov byte [esp + 0xb48], bl
mov eax, dword [esp + 0x14]
add eax, 0xfffffff0
mov ecx, esi
lea edx, [eax + 0xc]
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x401f82
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0xb48], 2
mov eax, dword [esp + 0x20]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x4022dd
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
jmp 0x4022dd
cmp edi, 3
jne 0x4020b9
push str.eMachines
lea ecx, [esp + 0x20]
push ecx
lea edx, [esp + 0x1c]
push edx
call fcn.00403f40
mov eax, dword [eax]
mov edi, dword [sym.imp.KERNEL32.dll_CreateDirectoryW]
add esp, 0xc
push 0
push eax
call edi
lea ecx, [esp + 0x14]
call fcn.004046b0
push str.eMachines
lea eax, [esp + 0x20]
push eax
lea ecx, [esp + 0x20]
push ecx
call fcn.00403f40
add esp, 0xc
push str.eMachines
push eax
lea edx, [esp + 0x30]
push edx
mov byte [esp + 0xb54], 0xd
call fcn.00403f40
add esp, 0xc
push 0x42eee4
push eax
lea eax, [esp + 0x28]
push eax
mov byte [esp + 0xb54], 0xe
call fcn.00403f40
add esp, 0xc
push 0x42f2e0
push eax
lea ecx, [esp + 0x1c]
push ecx
mov byte [esp + 0xb54], 0xf
call fcn.00403f40
mov eax, dword [eax]
add esp, 0xc
push 0
push eax
call edi
lea ecx, [esp + 0x14]
call fcn.004046b0
lea ecx, [esp + 0x20]
call fcn.004046b0
lea ecx, [esp + 0x28]
call fcn.004046b0
lea ecx, [esp + 0x18]
mov byte [esp + 0xb48], 2
call fcn.004046b0
push str.eMachines
lea ecx, [esp + 0x24]
call fcn.00404c20
push str.eMachines_Updater
push eax
lea edx, [esp + 0x1c]
push edx
mov byte [esp + 0xb54], 0x10
call fcn.00403f40
add esp, 0xc
mov byte [esp + 0xb48], 0x11
jmp 0x4022b9
cmp edi, 4
jne 0x4021c0
push str.Founder
lea eax, [esp + 0x20]
push eax
lea ecx, [esp + 0x1c]
push ecx
call fcn.00403f40
mov eax, dword [eax]
mov edi, dword [sym.imp.KERNEL32.dll_CreateDirectoryW]
add esp, 0xc
push 0
push eax
call edi
lea ecx, [esp + 0x14]
call fcn.004046b0
push str.Founder
lea edx, [esp + 0x20]
push edx
lea eax, [esp + 0x20]
push eax
call fcn.00403f40
add esp, 0xc
push str.Founder
push eax
lea ecx, [esp + 0x30]
push ecx
mov byte [esp + 0xb54], 0x12
call fcn.00403f40
add esp, 0xc
push 0x42eee4
push eax
lea edx, [esp + 0x28]
push edx
mov byte [esp + 0xb54], 0x13
call fcn.00403f40
add esp, 0xc
push 0x42f2e0
push eax
lea eax, [esp + 0x1c]
push eax
mov byte [esp + 0xb54], 0x14
call fcn.00403f40
mov eax, dword [eax]
add esp, 0xc
push 0
push eax
call edi
lea ecx, [esp + 0x14]
call fcn.004046b0
lea ecx, [esp + 0x20]
call fcn.004046b0
lea ecx, [esp + 0x28]
call fcn.004046b0
lea ecx, [esp + 0x18]
mov byte [esp + 0xb48], 2
call fcn.004046b0
push str.Founder
lea ecx, [esp + 0x24]
call fcn.00404c20
push str.Founder_Updater
push eax
lea ecx, [esp + 0x1c]
push ecx
mov byte [esp + 0xb54], 0x15
call fcn.00403f40
add esp, 0xc
mov byte [esp + 0xb48], 0x16
jmp 0x4022b9
push str.Acer
lea edx, [esp + 0x20]
push edx
lea eax, [esp + 0x1c]
push eax
call fcn.00403f40
mov eax, dword [eax]
mov edi, dword [sym.imp.KERNEL32.dll_CreateDirectoryW]
add esp, 0xc
push 0
push eax
call edi
lea ecx, [esp + 0x14]
call fcn.004046b0
push str.Acer
lea ecx, [esp + 0x20]
push ecx
lea edx, [esp + 0x20]
push edx
call fcn.00403f40
add esp, 0xc
push str.Acer
push eax
lea eax, [esp + 0x30]
push eax
mov byte [esp + 0xb54], 0x17
call fcn.00403f40
add esp, 0xc
push 0x42eee4
push eax
lea ecx, [esp + 0x28]
push ecx
mov byte [esp + 0xb54], 0x18
call fcn.00403f40
add esp, 0xc
push 0x42f2e0
push eax
lea edx, [esp + 0x1c]
push edx
mov byte [esp + 0xb54], 0x19
call fcn.00403f40
mov eax, dword [eax]
add esp, 0xc
push 0
push eax
call edi
lea ecx, [esp + 0x14]
call fcn.004046b0
lea ecx, [esp + 0x20]
call fcn.004046b0
lea ecx, [esp + 0x28]
call fcn.004046b0
lea ecx, [esp + 0x18]
mov byte [esp + 0xb48], 2
call fcn.004046b0
push str.Acer
lea ecx, [esp + 0x24]
call fcn.00404c20
push str.Acer_Updater
push eax
lea eax, [esp + 0x1c]
push eax
mov byte [esp + 0xb54], 0x1a
call fcn.00403f40
add esp, 0xc
mov byte [esp + 0xb48], 0x1b
push eax
lea ecx, [esp + 0x20]
call fcn.00403d80
lea ecx, [esp + 0x14]
call fcn.004046b0
lea ecx, [esp + 0x20]
mov byte [esp + 0xb48], 2
call fcn.004046b0
push 1
lea ecx, [esp + 0x18]
push ecx
lea ecx, [esp + 0x24]
call fcn.00403e00
mov eax, dword [eax]
mov ecx, dword [eax - 0xc]
cmp ecx, 1
jne 0x402312
test ecx, ecx
jge 0x402305
push 0x80070057
call fcn.00404af0
movzx eax, word [eax]
cmp ax, 0x5c
jne 0x402312
xor bl, bl
jmp 0x402314
mov bl, 1
mov eax, dword [esp + 0x14]
add eax, 0xfffffff0
lea edx, [eax + 0xc]
mov ecx, esi
lock xadd dword [edx], ecx
dec ecx
test ecx, ecx
jg 0x402333
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
test bl, bl
je 0x402342
push 0x5c
lea ecx, [esp + 0x20]
call fcn.00404590
call fcn.00407ddd
xor ecx, ecx
test eax, eax
setne cl
test ecx, ecx
jne 0x40235c
push 0x80004005
call fcn.00404af0
mov edx, dword [eax]
mov ecx, eax
mov eax, dword [edx + 0xc]
call eax
add eax, 0x10
mov dword [esp + 0x18], eax
push str.alu.exe
lea ecx, [esp + 0x30]
push ecx
lea edx, [esp + 0x1c]
mov bl, 0x1c
push edx
mov byte [esp + 0xb54], bl
call fcn.00403f40
add esp, 0xc
push eax
lea ecx, [esp + 0x1c]
mov byte [esp + 0xb4c], 0x1d
call fcn.004044b0
mov byte [esp + 0xb48], bl
mov eax, dword [esp + 0x14]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x4023c4
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, dword [esp + 0x18]
mov edi, 1
cmp dword [eax - 4], edi
jle 0x4023e3
mov ecx, dword [eax - 0xc]
push ecx
lea ecx, [esp + 0x1c]
call fcn.004049a0
mov eax, dword [esp + 0x18]
mov edx, 0x43a188
sub edx, eax
lea ebx, [ebx]
movzx ecx, word [eax]
mov word [edx + eax], cx
add eax, 2
test cx, cx
jne 0x4023f0
push str.sd.exe
lea edx, [esp + 0x30]
push edx
lea eax, [esp + 0x1c]
push eax
call fcn.00403f40
add esp, 0xc
push eax
lea ecx, [esp + 0x1c]
mov byte [esp + 0xb4c], 0x1e
call fcn.004044b0
mov byte [esp + 0xb48], bl
mov eax, dword [esp + 0x14]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40244e
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, dword [esp + 0x18]
cmp dword [eax - 4], edi
jle 0x402468
mov ecx, dword [eax - 0xc]
push ecx
lea ecx, [esp + 0x1c]
call fcn.004049a0
mov eax, dword [esp + 0x18]
mov edx, 0x43a598
sub edx, eax
nop
movzx ecx, word [eax]
mov word [edx + eax], cx
add eax, 2
test cx, cx
jne 0x402470
push str._UpdaterService_LOG.txt
lea edx, [esp + 0x20]
push edx
lea eax, [esp + 0x1c]
push eax
call fcn.00403f40
add esp, 0xc
push eax
lea ecx, [esp + 0x1c]
mov byte [esp + 0xb4c], 0x1f
call fcn.004044b0
mov byte [esp + 0xb48], bl
mov eax, dword [esp + 0x14]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x4024ce
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, dword [esp + 0x18]
cmp dword [eax - 4], edi
jle 0x4024e8
mov ecx, dword [eax - 0xc]
push ecx
lea ecx, [esp + 0x1c]
call fcn.004049a0
mov eax, dword [esp + 0x18]
mov edx, 0x439d78
sub edx, eax
nop
movzx ecx, word [eax]
mov word [edx + eax], cx
add eax, 2
test cx, cx
jne 0x4024f0
push str._UpdaterService_CFG.ini
lea edx, [esp + 0x20]
push edx
lea eax, [esp + 0x1c]
push eax
call fcn.00403f40
add esp, 0xc
push eax
lea ecx, [esp + 0x1c]
mov byte [esp + 0xb4c], 0x20
call fcn.004044b0
mov byte [esp + 0xb48], bl
mov eax, dword [esp + 0x14]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40254e
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov eax, dword [esp + 0x18]
cmp dword [eax - 4], edi
jle 0x402568
mov ecx, dword [eax - 0xc]
push ecx
lea ecx, [esp + 0x1c]
call fcn.004049a0
mov eax, dword [esp + 0x18]
mov edx, 0x439f80
sub edx, eax
nop
movzx ecx, word [eax]
mov word [edx + eax], cx
add eax, 2
test cx, cx
jne 0x402570
push str.ALU_FPResult.xml
lea edx, [esp + 0x20]
push edx
lea eax, [esp + 0x1c]
push eax
call fcn.00403f40
add esp, 0xc
push eax
lea ecx, [esp + 0x1c]
mov byte [esp + 0xb4c], 0x21
call fcn.004044b0
mov byte [esp + 0xb48], bl
mov eax, dword [esp + 0x14]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x4025ce
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov edi, dword [esp + 0x18]
cmp dword [edi - 4], 1
jle 0x4025e9
mov ecx, dword [edi - 0xc]
push ecx
lea ecx, [esp + 0x1c]
call fcn.004049a0
mov edi, dword [esp + 0x18]
mov edx, 0x43a390
mov eax, edi
sub edx, edi
movzx ecx, word [eax]
mov word [edx + eax], cx
add eax, 2
test cx, cx
jne 0x4025f2
push 0x104
lea edx, [esp + 0x130]
push edx
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
test eax, eax
jne 0x402698
push ecx
mov ecx, esp
mov dword [esp + 0x34], esp
push str.Critical_Error__Unable_to_get_Module_Name_
call fcn.00404c20
call fcn.00402dc0
lea eax, [edi - 0x10]
add esp, 4
mov byte [esp + 0xb48], 2
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x402656
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0xb48], 1
mov eax, dword [esp + 0x1c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x401b99
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0xb48], 0
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
jmp 0x401996
xor eax, eax
lea ebx, [ebx]
movzx ecx, word [esp + eax + 0x12c]
mov word [eax + 0x439b58], cx
add eax, 2
test cx, cx
jne 0x4026a0
push ecx
mov ecx, esp
mov dword [esp + 0x18], esp
push 0x43a188
call fcn.00404c20
call fcn.00402dc0
mov ecx, esp
mov dword [esp + 0x18], esp
push 0x439d78
call fcn.00404c20
call fcn.00402dc0
mov ecx, esp
mov dword [esp + 0x18], esp
push 0x439f80
call fcn.00404c20
call fcn.00402dc0
mov ecx, esp
mov dword [esp + 0x18], esp
push 0x439b58
call fcn.00404c20
call fcn.00402dc0
add esp, 4
call dword [sym.imp.KERNEL32.dll_GetVersion]
movzx eax, al
cmp eax, 6
jae 0x402727
mov dword [0x437034], 0
cmp dword [ebp + 8], 2
jne 0x402810
mov ebx, dword [esp + 0x30]
mov ecx, dword [ebx + 4]
push ecx
push 0x42f4f8
call fcn.004129cf
add esp, 8
test eax, eax
jne 0x402754
call fcn.004013a0
jmp 0x402850
mov edx, dword [ebx + 4]
push edx
push 0x42f500
call fcn.004129cf
add esp, 8
test eax, eax
jne 0x402773
call fcn.004014d0
jmp 0x402850
mov eax, dword [ebx + 4]
push eax
push 0x42f508
call fcn.004129cf
add esp, 8
test eax, eax
jne 0x4027c3
call fcn.00401740
push str.Live_Updater_Service
test eax, eax
je 0x4027ae
lea ecx, [esp + 0x38]
push str.Run_Service_:__s
push ecx
call fcn.00412760
lea edx, [esp + 0x40]
jmp 0x402839
lea eax, [esp + 0x38]
push str.Failed_to_Run_Service_:__s
push eax
call fcn.00412760
lea edx, [esp + 0x40]
jmp 0x402839
mov eax, dword [ebx + 4]
push eax
push 0x42f56c
call fcn.004129cf
add esp, 8
test eax, eax
jne 0x402810
call fcn.00401600
push str.Live_Updater_Service
test eax, eax
je 0x4027fb
lea ecx, [esp + 0x38]
push str.Killed_Service_:__s
push ecx
call fcn.00412760
lea edx, [esp + 0x40]
jmp 0x402839
lea eax, [esp + 0x38]
push str.Failed_to_Kill_Service_:__s
push eax
call fcn.00412760
lea edx, [esp + 0x40]
jmp 0x402839
push 0x437038
call dword [sym.imp.ADVAPI32.dll_StartServiceCtrlDispatcherW]
test eax, eax
jne 0x402850
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
lea eax, [esp + 0x38]
push str.StartServiceCtrlDispatcher_failed__error_code___d
push eax
call fcn.00412760
lea edx, [esp + 0x40]
add esp, 8
mov ecx, esp
mov dword [esp + 0x34], esp
push edx
call fcn.00404c20
call fcn.00402dc0
add esp, 4
push 0x439d60
call dword [sym.imp.KERNEL32.dll_DeleteCriticalSection]
lea eax, [edi - 0x10]
mov byte [esp + 0xb48], 2
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x40287e
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0xb48], 1
mov eax, dword [esp + 0x1c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x4028a5
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov byte [esp + 0xb48], 0
mov eax, dword [esp + 0x24]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
mov edx, esi
lock xadd dword [ecx], edx
dec edx
test edx, edx
jg 0x4028cc
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
mov dword [esp + 0xb48], esi
mov eax, dword [esp + 0x2c]
add eax, 0xfffffff0
lea ecx, [eax + 0xc]
lock xadd dword [ecx], esi
dec esi
test esi, esi
jg 0x4028f0
mov ecx, dword [eax]
mov edx, dword [ecx]
push eax
mov eax, dword [edx + 4]
call eax
xor eax, eax
jmp 0x4019d3