Function at 0x405b61
Capabilities:
Get common file path
Get disk information
Get disk size
Set current directory

Disassembly:
mov edi, edi
push ebp
mov ebp, esp
sub esp, 0x330
mov eax, dword [0x408004]
xor eax, ebp
mov dword [ebp - 4], eax
mov eax, edx
mov dword [ebp - 0x324], eax
push esi
mov esi, ecx
test eax, eax
jne 0x405b8b
inc eax
jmp 0x405e09
push ebx
lea eax, [ebp - 0x110]
push eax
push 0x104
call dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryA]
push esi
call dword [sym.imp.KERNEL32.dll_SetCurrentDirectoryA]
xor ebx, ebx
test eax, eax
jne 0x405bcd
push ebx
push 0x10
push ebx
push ebx
mov edx, 0x4bc
xor ecx, ecx
call fcn.00404657
call fcn.004064a1
mov dword [0x409124], eax
xor eax, eax
jmp 0x405e08
push edi
lea eax, [ebp - 0x314]
mov dword [ebp - 0x31c], ebx
push eax
lea eax, [ebp - 0x320]
mov dword [ebp - 0x318], ebx
push eax
lea eax, [ebp - 0x318]
mov dword [ebp - 0x320], ebx
push eax
lea eax, [ebp - 0x31c]
mov dword [ebp - 0x314], ebx
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetDiskFreeSpaceA]
test eax, eax
je 0x405da4
mov eax, dword [ebp - 0x318]
imul eax, dword [ebp - 0x31c]
push 0x400
push dword [ebp - 0x320]
push eax
mov dword [ebp - 0x328], eax
call dword [sym.imp.KERNEL32.dll_MulDiv]
mov edi, eax
test edi, edi
je 0x405da4
push ebx
push ebx
lea eax, [ebp - 0x32c]
push eax
lea eax, [ebp - 0x330]
push eax
push ebx
push ebx
push ebx
push ebx
call dword [sym.imp.KERNEL32.dll_GetVolumeInformationA]
test eax, eax
jne 0x405ca5
mov edi, 0x200
lea eax, [ebp - 0x310]
push edi
push ebx
push eax
call sub.msvcrt.dll_memset
add esp, 0xc
call fcn.004064a1
push ebx
mov dword [0x409124], eax
lea eax, [ebp - 0x310]
push edi
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push ebx
push 0x1000
call dword [sym.imp.KERNEL32.dll_FormatMessageA]
mov edx, 0x4f9
jmp 0x405de6
lea eax, [ebp - 0x110]
push eax
call dword [sym.imp.KERNEL32.dll_SetCurrentDirectoryA]
lea ecx, [ebp - 0xc]
push 6
mov eax, ecx
pop edx
sub esi, eax
lea eax, [edx - 4]
test eax, eax
je 0x405cd7
mov al, byte [esi + ecx]
test al, al
je 0x405cd2
mov byte [ecx], al
inc ecx
sub edx, 1
jne 0x405cbc
test edx, edx
jne 0x405cd7
dec ecx
mov byte [ecx], bl
mov edx, 0x200
mov ecx, dword [ebp - 0x328]
mov eax, ebx
mov dword [ebp - 0x314], 8
cmp ecx, edx
je 0x405d23
add edx, edx
inc eax
movzx esi, ax
cmp ax, word [ebp - 0x314]
jb 0x405cf0
push 8
pop ecx
mov eax, esi
cmp si, cx
jne 0x405d23
push ebx
push 0x10
push ebx
push ebx
mov edx, 0x4c5
xor ecx, ecx
call fcn.00404657
jmp 0x405e05
test byte [0x409a34], 8
je 0x405d55
test dword [ebp - 0x32c], 0x8000
je 0x405d55
mov ecx, dword [0x409a38]
movzx eax, ax
shr ecx, 2
mov edx, dword [eax*4 + 0x4089e0]
add edx, edx
add ecx, dword [0x409a38]
jmp 0x405d65
mov ecx, dword [0x409a38]
movzx eax, ax
mov edx, dword [eax*4 + 0x4089e0]
mov eax, dword [ebp - 0x324]
and eax, 3
cmp al, 3
jne 0x405d79
lea eax, [ecx + edx]
cmp eax, edi
jmp 0x405d88
test byte [ebp - 0x324], 1
je 0x405d86
cmp edx, edi
jmp 0x405d88
cmp ecx, edi
jbe 0x405d99
lea eax, [ebp - 0xc]
push eax
push ecx
mov ecx, dword [ebp + 8]
call fcn.004027b5
jmp 0x405e07
xor eax, eax
mov dword [0x409124], ebx
inc eax
jmp 0x405e07
mov edi, 0x200
lea eax, [ebp - 0x310]
push edi
push ebx
push eax
call sub.msvcrt.dll_memset
add esp, 0xc
call fcn.004064a1
push ebx
mov dword [0x409124], eax
lea eax, [ebp - 0x310]
push edi
push eax
push ebx
call dword [sym.imp.KERNEL32.dll_GetLastError]
push eax
push ebx
push 0x1000
call dword [sym.imp.KERNEL32.dll_FormatMessageA]
mov edx, 0x4b0
push ebx
push 0x10
lea eax, [ebp - 0x310]
xor ecx, ecx
push eax
push esi
call fcn.00404657
lea eax, [ebp - 0x110]
push eax
call dword [sym.imp.KERNEL32.dll_SetCurrentDirectoryA]
xor eax, eax
pop edi
pop ebx
mov ecx, dword [ebp - 4]
xor ecx, ebp
pop esi
call fcn.00406f80
leave
ret 4