Function at 0x50e5e0
Capabilities:
Accept command line arguments
Check mutex on windows
Set current directory

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x5677fb
mov eax, dword fs:[0]
push eax
sub esp, 0x898
mov eax, dword [0x5df7e4]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov esi, dword [ebp + 0x10]
push 0x50dcb0
mov dword [ebp - 0x850], esi
call dword [sym.imp.KERNEL32.dll_SetUnhandledExceptionFilter]
lea eax, [ebp - 0x840]
push eax
call fcn.0050e0f0
add esp, 4
mov dword [ebp - 4], 0
lea eax, [ebp - 0x858]
push eax
push esi
mov dword [ebp - 0x84c], 0
mov dword [ebp - 0x858], 0
call dword [sym.imp.SHELL32.dll_CommandLineToArgvW]
mov ebx, dword [ebp - 0x858]
xor ecx, ecx
cmp word [esi], cx
mov dword [ebp - 0x844], eax
cmove ebx, ecx
mov dword [ebp - 0x858], ebx
test eax, eax
je 0x50e9fc
xor edi, edi
mov dword [ebp - 0x854], ecx
test ebx, ebx
jle 0x50e6cb
nop dword [eax + eax]
mov esi, dword [eax + edi*4]
mov ecx, str._install
mov edx, 8
sub esi, ecx
nop
mov ax, word [esi + ecx]
cmp ax, word [ecx]
jne 0x50e771
add ecx, 2
sub edx, 1
jne 0x50e6a0
mov eax, dword [ebp - 0x844]
mov dword [ebp - 0x854], 1
mov esi, dword [ebp - 0x850]
cmp dword [ebp - 0x854], 0
je 0x50e785
lea eax, [ebp - 0x844]
push esi
push eax
call fcn.0050c2e0
mov byte [ebp - 4], 1
push dword [ebp - 0x844]
push str.start_install:__s
call fcn.004c1030
add esp, 0xc
mov esi, esp
mov dword [ebp - 0x854], esp
mov dword [ebp - 0x850], esi
mov eax, dword [ebp - 0x844]
add eax, 0xfffffff0
push eax
call fcn.004bbb10
add eax, 0x10
add esp, 4
mov dword [esi], eax
mov byte [ebp - 4], 3
lea ecx, [ebp - 0x845]
call fcn.00509be0
mov byte [ebp - 4], 4
mov byte [ebp - 4], 5
mov ecx, eax
call fcn.0050b080
mov byte [ebp - 4], 1
lea ecx, [ebp - 0x845]
call fcn.00509c40
call fcn.0050d030
push dword [ebp - 0x844]
mov dword [ebp - 0x84c], eax
push str.install:__s
call fcn.004c1030
add esp, 8
jmp 0x50e866
mov eax, dword [ebp - 0x844]
inc edi
cmp edi, ebx
jge 0x50e6c5
jmp 0x50e690
xor ecx, ecx
xor edi, edi
test ebx, ebx
jle 0x50e7c5
nop dword [eax]
mov esi, dword [eax + edi*4]
mov ecx, str._uninstall
mov edx, 0xa
sub esi, ecx
nop
mov ax, word [ecx + esi]
cmp ax, word [ecx]
jne 0x50e7b6
add ecx, 2
sub edx, 1
jne 0x50e7a0
lea ecx, [edx + 1]
jmp 0x50e7c5
inc edi
cmp edi, ebx
jge 0x50e7c3
mov eax, dword [ebp - 0x844]
jmp 0x50e790
xor ecx, ecx
test ecx, ecx
je 0x50e891
push dword [ebp - 0x850]
lea eax, [ebp - 0x844]
push eax
call fcn.0050c2e0
mov byte [ebp - 4], 7
push dword [ebp - 0x844]
push str.start_uninstall:__s
call fcn.004c1030
add esp, 0xc
mov esi, esp
mov dword [ebp - 0x854], esp
mov dword [ebp - 0x850], esi
mov eax, dword [ebp - 0x844]
add eax, 0xfffffff0
push eax
call fcn.004bbb10
add eax, 0x10
add esp, 4
mov dword [esi], eax
mov byte [ebp - 4], 9
lea ecx, [ebp - 0x845]
call fcn.00509be0
mov byte [ebp - 4], 0xa
mov byte [ebp - 4], 0xb
mov ecx, eax
call fcn.0050b3e0
mov byte [ebp - 4], 7
lea ecx, [ebp - 0x845]
call fcn.00509c40
call fcn.0050ddf0
push dword [ebp - 0x844]
mov dword [ebp - 0x84c], eax
push str.uninstall:__s
call fcn.004c1030
add esp, 8
mov byte [ebp - 4], 0
or eax, 0xffffffff
mov edx, dword [ebp - 0x844]
add edx, 0xfffffff0
lock xadd dword [edx + 0xc], eax
dec eax
test eax, eax
jg 0x50ec24
mov ecx, dword [edx]
push edx
mov eax, dword [ecx]
call dword [eax + 4]
jmp 0x50ec24
xor eax, eax
xor edi, edi
test ebx, ebx
jle 0x50e8d2
nop dword [eax]
mov eax, dword [ebp - 0x844]
mov ecx, str._check
mov edx, 6
mov esi, dword [eax + edi*4]
sub esi, ecx
mov ax, word [ecx + esi]
cmp ax, word [ecx]
jne 0x50e8cb
add ecx, 2
sub edx, 1
jne 0x50e8b5
lea eax, [edx + 1]
jmp 0x50e8d2
inc edi
cmp edi, ebx
jl 0x50e8a0
xor eax, eax
test eax, eax
je 0x50e927
push 0xfac
call fcn.0050bb70
add esp, 4
test al, al
je 0x50e8eb
xor ebx, ebx
jmp 0x50e90e
push 0x12cc
call fcn.0050bb70
add esp, 4
test al, al
jne 0x50e8e7
push str.check_failed
call fcn.004c1030
add esp, 4
mov ebx, 1
push ebx
push str.check:__d
mov dword [ebp - 0x84c], ebx
call fcn.004c1030
add esp, 8
jmp 0x50ec24
xor eax, eax
xor edi, edi
test ebx, ebx
jle 0x50e962
nop
mov ecx, dword [ebp - 0x844]
mov eax, str._run
mov edx, 4
mov esi, dword [ecx + edi*4]
sub esi, eax
mov cx, word [eax + esi]
cmp cx, word [eax]
jne 0x50e95b
add eax, 2
sub edx, 1
jne 0x50e945
lea eax, [edx + 1]
jmp 0x50e962
inc edi
cmp edi, ebx
jl 0x50e930
xor eax, eax
test eax, eax
je 0x50e9fc
push str.wwbizsrv.runC4B25FA2_C73B_4346_86DE_FCF8CDD398A2
push 1
push 0
call dword [sym.imp.KERNEL32.dll_CreateMutexW]
mov esi, eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0xb7
jne 0x50e9a4
push str.run_is_exist
call fcn.004c1030
add esp, 4
mov dword [ebp - 0x84c], 0xfffffffe
jmp 0x50ec24
test esi, esi
jne 0x50e9c4
push str.create_mutex_failed
call fcn.004c1030
add esp, 4
mov dword [ebp - 0x84c], 0xfffffffd
jmp 0x50ec24
push str.ServiceMain2
call fcn.004c1030
add esp, 4
call fcn.004ff1e0
mov ecx, eax
call fcn.004f22c0
push str.wwbizsrv.closeFB523528_6D29_41E5_ADBB_7052E4A7F97F
push 0
push 1
push 0
call dword [sym.imp.KERNEL32.dll_CreateEventW]
push 0xffffffffffffffff
push eax
call dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
jmp 0x50ec24
push 0x56f60c
call fcn.004c1030
add esp, 4
lea eax, [ebp - 0x810]
push 0x400
push eax
push 0
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
lea eax, [ebp - 0x810]
push eax
lea ecx, [ebp - 0x828]
call fcn.004bb3a0
mov byte [ebp - 4], 0xd
lea ecx, [ebp - 0x828]
push 6
push str.__..__
call fcn.004bb8f0
cmp dword [ebp - 0x814], 8
lea eax, [ebp - 0x828]
cmovae eax, dword [ebp - 0x828]
push eax
call dword [sym.imp.KERNEL32.dll_SetCurrentDirectoryW]
push str.init_ok
mov dword [0x5e5020], 0
mov dword [0x5e5024], 0x10
mov dword [0x5e5028], 1
mov dword [0x5e502c], 1
mov dword [0x5e5030], 0
mov dword [0x5e5034], 0
mov dword [0x5e5038], 0
mov dword [0x5e503c], 0
call fcn.004c1030
add esp, 4
push 0
push 0
push 0
push 0
call dword [sym.imp.KERNEL32.dll_CreateEventW]
lea ecx, [ebp - 0x8a4]
mov esi, eax
call fcn.004c6070
mov byte [ebp - 4], 0xe
lea ecx, [ebp - 0x8a4]
push esi
call fcn.004cba60
push str.prefetch
call fcn.004c1030
mov dword [ebp - 0x864], 0
mov dword [ebp - 0x860], 0
mov dword [ebp - 0x85c], 0
mov byte [ebp - 4], 0xf
lea eax, [ebp - 0x850]
push eax
lea eax, [ebp - 0x854]
mov dword [ebp - 0x854], 0x7530
push eax
lea eax, [ebp - 0x864]
mov dword [ebp - 0x850], 0x1b7740
push eax
call fcn.0050ca50
add esp, 0x10
lea eax, [ebp - 0x864]
lea ecx, [ebp - 0x88c]
push eax
call fcn.0050b830
mov byte [ebp - 4], 0x10
mov eax, dword [ebp - 0x854]
mov dword [ebp - 0x880], eax
mov eax, dword [ebp - 0x850]
mov dword [ebp - 0x87c], eax
mov dword [ebp - 0x878], 0
mov byte [ebp - 4], 0x11
lea ecx, [ebp - 0x88c]
push esi
call fcn.004c1d60
push str.prefetch_ok
call fcn.004c1030
mov eax, dword [0x5e5048]
add esp, 4
mov dword [ebp - 0x874], eax
lea eax, [ebp - 0x874]
mov dword [ebp - 0x870], 0x50d9a0
mov dword [ebp - 0x86c], 0
push eax
mov dword [ebp - 0x868], 0
call dword [sym.imp.ADVAPI32.dll_StartServiceCtrlDispatcherW]
test eax, eax
jne 0x50ebe8
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push str.StartServiceCtrlDispatcher_error.__d_
call fcn.004c1030
add esp, 8
mov byte [ebp - 4], 0xf
lea ecx, [ebp - 0x88c]
call fcn.004bb6b0
mov byte [ebp - 4], 0xe
lea ecx, [ebp - 0x864]
call fcn.004bb6b0
mov byte [ebp - 4], 0xd
lea ecx, [ebp - 0x8a4]
call fcn.004c7400
mov byte [ebp - 4], 0
lea ecx, [ebp - 0x828]
call fcn.004bb2a0
mov dword [ebp - 4], 0xffffffff
lea ecx, [ebp - 0x840]
call fcn.004c02e0
mov eax, dword [ebp - 0x84c]
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.005121be
mov esp, ebp
pop ebp
ret 0x10