Function at 0x4015a0
Capabilities:
Acquire debug privileges
Check mutex on windows
Check os version
Create process on windows
Create thread
Get system information on windows
Read .ini file
Set current directory

Disassembly:
push ebp
mov ebp, esp
mov eax, dword fs:[0]
push 0xffffffffffffffff
push 0x45d368
push eax
mov dword fs:[0], esp
sub esp, 0x5f4
push ebx
push esi
push edi
mov edi, dword [sym.imp.KERNEL32.dll_GetModuleFileNameW]
push 0x208
push 0x4af540
push 0
call edi
mov ecx, 0x4af540
lea edx, [ecx + 2]
lea ecx, [ecx]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x4015e0
sub ecx, edx
sar ecx, 1
dec ecx
cmp word [ecx*2 + 0x4af540], 0x5c
je 0x401618
jmp 0x401600
xor eax, eax
mov word [ecx*2 + 0x4af540], ax
lea ecx, [ecx - 1]
cmp word [ecx*2 + 0x4af540], 0x5c
jne 0x401600
push 0
push 0
push 0
call dword [sym.imp.KERNEL32.dll_CreateMutexW]
mov ecx, 0x4af540
mov dword [0x4b0a68], eax
add ecx, 0xfffffffe
mov ax, word [ecx + 2]
lea ecx, [ecx + 2]
test ax, ax
jne 0x401631
mov eax, dword [str.aplayer.ini]
mov esi, dword [sym.imp.KERNEL32.dll_GetPrivateProfileIntW]
mov dword [ecx], eax
mov eax, dword [0x461b20]
mov dword [ecx + 4], eax
mov eax, dword [0x461b24]
mov dword [ecx + 8], eax
mov eax, dword [0x461b28]
mov dword [ecx + 0xc], eax
mov eax, dword [0x461b2c]
push 0x4af540
push 0xff
mov dword [ecx + 0x10], eax
mov eax, dword [0x461b30]
push str.VolumeLevel
push str.APlayer
mov dword [ecx + 0x14], eax
call esi
imul eax, eax, 0x64
mov dword [ebp - 0x10], eax
fild dword [ebp - 0x10]
fstp qword [ebp - 0x5c]
fld qword [ebp - 0x5c]
fdiv qword [0x462080]
fadd qword [0x462068]
call fcn.00448f90
mov ebx, dword [sym.imp.KERNEL32.dll_GetPrivateProfileStringW]
push 0x4af540
push 0x104
mov dword [0x4a5004], eax
lea eax, [ebp - 0x3f8]
push eax
push str.out_wave.dll
push str.OutputPlugin
push str.APlayer
call ebx
cmp word [ebp - 0x3f8], 0
jne 0x4016e3
xor ecx, ecx
jmp 0x4016ff
lea ecx, [ebp - 0x3f8]
lea edx, [ecx + 2]
lea esp, [esp]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x4016f0
sub ecx, edx
sar ecx, 1
push ecx
lea eax, [ebp - 0x3f8]
push eax
mov ecx, 0x4a5134
call fcn.00405cc0
push 0x4af540
push 0
push str.FullPreloading
push str.APlayer
call esi
test eax, eax
je 0x40172f
mov byte [0x4af527], 1
push 0x4af540
push 0
push str.RunUnderUser
push str.Aplayer
call esi
push 0x4af540
push 0
push str.ServiceMode
push str.Aplayer
mov dword [0x4af748], eax
call esi
push 0x4af540
push 0x40
push 0x4af758
push 0x46b384
push 0x461bd0
push str.Aplayer
mov dword [0x4af74c], eax
call ebx
push 0x4af540
push 0
push str.DoubleCore
push str.APlayer
call esi
push 0x4af540
push 0
push str.SingleCore
push str.APlayer
mov dword [0x4af754], eax
call esi
push 0x4af540
push 1
push str.Gapless
push str.APlayer
mov dword [0x4af7d8], eax
call esi
push 0x4af540
push 0
push str.DirectInput
push str.APlayer
mov dword [0x4af7e0], eax
call esi
test eax, eax
setne al
xor ecx, ecx
test al, al
setne cl
push 0x4af540
push 0
push str.OnlyWav
push str.APlayer
dec ecx
and dword [0x4af7e0], ecx
call esi
push 0x4af540
push 0
push str.SystemVolume
push str.Aplayer
mov dword [0x4af750], eax
call esi
push 0x114
mov dword [0x4b0a44], eax
lea eax, [ebp - 0x1f0]
push 0
push eax
call fcn.00449690
add esp, 0xc
lea eax, [ebp - 0x1f0]
push eax
mov dword [ebp - 0x1f0], 0x114
call dword [sym.imp.KERNEL32.dll_GetVersionExW]
cmp dword [ebp - 0x1ec], 5
jbe 0x401964
cmp dword [0x4b0a44], 0
je 0x40196e
push 0
call dword [sym.imp.ole32.dll_CoInitialize]
push 0x4b1ec0
call dword [sym.imp.ole32.dll_CoCreateGuid]
test eax, eax
js 0x401910
push 0x4b0a50
push 0x4613f0
push 1
push 0
push 0x4613e0
call dword [sym.imp.ole32.dll_CoCreateInstance]
test eax, eax
js 0x401910
mov eax, dword [0x4b0a50]
push 0x4b0a54
mov ecx, dword [eax]
push 0
push 0
push eax
call dword [ecx + 0x10]
test eax, eax
js 0x401910
mov eax, dword [0x4b0a54]
push 0x4b0a48
mov ecx, dword [eax]
push 0
push 0x17
push 0x461400
push eax
call dword [ecx + 0xc]
test eax, eax
js 0x401910
mov eax, dword [0x4b0a48]
push 0x4b0ca0
mov ecx, dword [eax]
push eax
call dword [ecx + 0xc]
test eax, eax
js 0x401910
mov eax, dword [0x4b0a48]
lea edx, [ebp - 0x24]
mov ecx, dword [eax]
push edx
push eax
call dword [ecx + 0x24]
fld dword [ebp - 0x24]
fmul qword [0x462078]
mov esi, eax
fadd qword [0x462068]
call fcn.00448f90
mov dword [0x4a5004], eax
test esi, esi
jns 0x40196e
mov ecx, dword [0x4b0a50]
test ecx, ecx
je 0x40192a
mov eax, dword [ecx]
push ecx
call dword [eax + 8]
mov dword [0x4b0a50], 0
mov ecx, dword [0x4b0a54]
test ecx, ecx
je 0x401944
mov eax, dword [ecx]
push ecx
call dword [eax + 8]
mov dword [0x4b0a54], 0
mov ecx, dword [0x4b0a48]
test ecx, ecx
je 0x40195e
mov eax, dword [ecx]
push ecx
call dword [eax + 8]
mov dword [0x4b0a48], 0
call dword [sym.imp.ole32.dll_CoUninitialize]
mov dword [0x4b0a44], 0
cmp dword [0x4af754], 0
jne 0x401984
cmp dword [0x4af7d8], 0
je 0x401a19
call dword [sym.imp.KERNEL32.dll_GetCurrentProcess]
lea ecx, [ebp - 0x10]
push ecx
push 0x28
push eax
call dword [sym.imp.ADVAPI32.dll_OpenProcessToken]
test eax, eax
je 0x401a01
mov esi, dword [ebp - 0x10]
xor eax, eax
mov dword [ebp - 0x1c], eax
mov dword [ebp - 0x18], eax
mov dword [ebp - 0x14], eax
lea eax, [ebp - 0x3c]
push eax
push str.SeDebugPrivilege
push 0
mov dword [ebp - 0x20], 0
call dword [sym.imp.ADVAPI32.dll_LookupPrivilegeValueW]
test eax, eax
je 0x4019f8
mov eax, dword [ebp - 0x3c]
push 0
mov dword [ebp - 0x1c], eax
mov eax, dword [ebp - 0x38]
push 0
push 0x10
mov dword [ebp - 0x18], eax
lea eax, [ebp - 0x20]
push eax
push 0
push esi
mov dword [ebp - 0x20], 1
mov dword [ebp - 0x14], 2
call dword [sym.imp.ADVAPI32.dll_AdjustTokenPrivileges]
call dword [sym.imp.KERNEL32.dll_GetLastError]
push dword [ebp - 0x10]
call dword [sym.imp.KERNEL32.dll_CloseHandle]
lea eax, [ebp - 0xdc]
push eax
call dword [sym.imp.KERNEL32.dll_GetNativeSystemInfo]
mov eax, dword [ebp - 0xc8]
mov dword [0x4af7dc], eax
push 0x104
push 0x4b0830
push 0
call edi
mov ecx, 0x4b0830
lea edx, [ecx + 2]
nop
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x401a30
sub ecx, edx
sar ecx, 1
dec ecx
cmp word [ecx*2 + 0x4b0830], 0x5c
je 0x401a66
jmp 0x401a50
xor eax, eax
mov word [ecx*2 + 0x4b0830], ax
dec ecx
cmp word [ecx*2 + 0x4b0830], 0x5c
jne 0x401a50
xor eax, eax
push 0x4b0830
mov word [ecx*2 + 0x4b0830], ax
call dword [sym.imp.KERNEL32.dll_SetCurrentDirectoryW]
mov ecx, 0x4b0830
lea edx, [ecx + 2]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x401a83
sub ecx, edx
sar ecx, 1
cmp ecx, 3
jne 0x401a9f
xor eax, eax
mov word [0x4b0834], ax
xor eax, eax
mov dword [ebp - 0x40], 7
mov dword [ebp - 0x44], 0
mov word [ebp - 0x54], ax
cmp word [0x4b0830], ax
jne 0x401ac0
xor ecx, ecx
jmp 0x401adf
mov ecx, 0x4b0830
lea edx, [ecx + 2]
jmp 0x401ad0
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x401ad0
sub ecx, edx
sar ecx, 1
push ecx
push 0x4b0830
lea ecx, [ebp - 0x54]
call fcn.00405cc0
push str.1.rad
lea eax, [ebp - 0x54]
push eax
lea eax, [ebp - 0x74]
push eax
mov dword [ebp - 4], 0
call fcn.00401040
mov esi, eax
add esp, 0xc
cmp esi, 0x4a511c
je 0x401b51
cmp dword [0x4a5130], 8
jb 0x401b2a
push dword [0x4a511c]
call fcn.00447dbf
add esp, 4
xor eax, eax
push esi
mov ecx, 0x4a511c
mov dword [0x4a5130], 7
mov dword [0x4a512c], 0
mov word [0x4a511c], ax
call fcn.00405330
cmp dword [ebp - 0x60], 8
jb 0x401b62
push dword [ebp - 0x74]
call fcn.00447dbf
add esp, 4
xor eax, eax
cmp dword [ebp - 0x40], 8
mov dword [ebp - 0x60], 7
mov dword [ebp - 0x64], 0
mov word [ebp - 0x74], ax
mov dword [ebp - 4], 0xffffffff
jb 0x401b8e
push dword [ebp - 0x54]
call fcn.00447dbf
add esp, 4
mov ebx, dword [sym.imp.KERNEL32.dll_OpenFileMappingW]
push str.GlobalAPWMMapping
push 0
push 0xf001f
call ebx
mov dword [0x4b0a58], eax
test eax, eax
jne 0x401d3c
cmp dword [0x4af74c], eax
je 0x401bc1
call fcn.004068a0
jmp 0x401cd3
xor ecx, ecx
jmp 0x401bd0
movzx eax, word [ecx + 0x461cb8]
mov word [ebp + ecx - 0x600], ax
lea ecx, [ecx + 2]
test ax, ax
jne 0x401bd0
mov edx, 0x4b0830
mov esi, edx
mov edi, edi
mov ax, word [edx]
add edx, 2
test ax, ax
jne 0x401bf0
lea edi, [ebp - 0x600]
sub edx, esi
add edi, 0xfffffffe
mov ax, word [edi + 2]
add edi, 2
test ax, ax
jne 0x401c06
mov ecx, edx
shr ecx, 2
rep movsd dword es:[edi], dword [esi]
mov ecx, edx
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [ebp - 0x600]
add edi, 0xfffffffe
lea esp, [esp]
mov ax, word [edi + 2]
add edi, 2
test ax, ax
jne 0x401c30
mov ecx, 9
mov esi, 0x461cbc
rep movsd dword es:[edi], dword [esi]
push 0x40
lea eax, [ebp - 0xb4]
push 0
push eax
movsw word es:[edi], word [esi]
mov dword [ebp - 0xb8], 0x44
call fcn.00449690
add esp, 0xc
xor eax, eax
mov dword [ebp - 0x30], eax
mov dword [ebp - 0x2c], eax
mov dword [ebp - 0x28], eax
mov word [ebp - 0x88], ax
lea eax, [ebp - 0x34]
push eax
lea eax, [ebp - 0xb8]
push eax
push 0
push 0
push 0
push 0
push 0
push 0
lea eax, [ebp - 0x600]
push eax
push 0
mov dword [ebp - 0x34], 0
mov dword [ebp - 0x8c], 1
call dword [sym.imp.KERNEL32.dll_CreateProcessW]
test eax, eax
je 0x401cd3
push dword [ebp - 0x30]
mov esi, dword [sym.imp.KERNEL32.dll_CloseHandle]
call esi
mov eax, dword [0x4b0a38]
test eax, eax
je 0x401ccb
push eax
call esi
mov eax, dword [ebp - 0x34]
mov dword [0x4b0a38], eax
mov edi, dword [sym.imp.KERNEL32.dll_Sleep]
xor esi, esi
jmp 0x401ce0
mov eax, esi
inc esi
cmp eax, 0x28
jge 0x401d05
push str.GlobalAPWMMapping
push 0
push 0xf001f
call ebx
mov dword [0x4b0a58], eax
test eax, eax
jne 0x401d3c
push 0x64
call edi
jmp 0x401ce0
push 0x10
push str.Failed_to_start_ap2decoder
push str.Could_not_load_ap2decoder_
push 0
call dword [sym.imp.USER32.dll_MessageBoxA]
cmp dword [0x4af74c], 0
je 0x401e35
call fcn.00406b80
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
mov esp, ebp
pop ebp
ret
mov esi, dword [sym.imp.KERNEL32.dll_OpenEventW]
push str.GlobalAPWMEvent
push 0
push 0x1f0003
call esi
push str.GlobalAPWMEvent2
push 0
push 0x1f0003
mov dword [0x4b0a5c], eax
call esi
push str.GlobalAPWMEventRet
push 0
push 0x1f0003
mov dword [0x4b0a60], eax
call esi
push 0x1048
push 0
push 0
push 0xf001f
push dword [0x4b0a58]
mov dword [0x4b0a64], eax
call dword [sym.imp.KERNEL32.dll_MapViewOfFile]
push 0
push 0
push 0
push 0x401e70
push 0
push 0
mov dword [0x4a500c], eax
call fcn.004487c4
mov esi, dword [sym.imp.KERNEL32.dll_ResetEvent]
add esp, 0x18
mov edi, eax
push dword [0x4b0a5c]
call esi
push dword [0x4b0a64]
call esi
mov ecx, dword [0x4a500c]
mov dword [ecx], 0x4fd
mov eax, dword [0x4a500c]
mov dword [eax + 4], 0
mov eax, dword [0x4a500c]
mov dword [eax + 0x10], 0
mov eax, dword [0x4a500c]
mov dword [eax + 0x14], 0
mov eax, dword [0x4a500c]
mov dword [eax + 8], 0
mov eax, dword [0x4a500c]
mov dword [eax + 0xc], 0
push dword [0x4b0a5c]
call dword [sym.imp.KERNEL32.dll_SetEvent]
push 0x2710
push dword [0x4b0a64]
call dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
push edi
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov ecx, dword [ebp - 0xc]
pop edi
pop esi
pop ebx
mov dword fs:[0], ecx
mov esp, ebp
pop ebp
ret