Function at 0x406790
Capabilities:
Check if file exists
Get file attributes
Set file attributes
Write file on windows

Disassembly:
sub esp, 0x354
mov eax, dword [0x40c020]
xor eax, esp
mov dword [esp + 0x350], eax
push ebx
push ebp
mov ebp, dword [esp + 0x364]
push esi
push edi
mov edi, ecx
or esi, 0xffffffff
cmp dword [edi + 4], esi
je 0x4067c0
mov ebx, dword [edi]
call fcn.00405f60
mov ebx, dword [esp + 0x368]
mov dword [edi + 4], esi
mov esi, dword [edi]
cmp ebx, dword [esi + 4]
jl 0x4067db
mov eax, 0x10000
jmp 0x406aad
cmp ebx, dword [esi + 0x10]
jge 0x4067e5
call fcn.004058a0
mov eax, dword [edi]
cmp dword [eax + 0x10], ebx
jge 0x406841
lea esp, [esp]
mov esi, dword [edi]
test esi, esi
je 0x40683a
cmp dword [esi + 0x18], 0
je 0x40683a
mov eax, dword [esi + 0x10]
add eax, 1
cmp eax, dword [esi + 4]
je 0x40683a
mov ecx, dword [esi + 0x50]
add ecx, dword [esi + 0x4c]
mov edx, dword [esi + 0x48]
push 0
lea ecx, [ecx + edx + 0x2e]
add dword [esi + 0x14], ecx
mov dword [esi + 0x10], eax
push 0
lea edx, [esi + 0x78]
push edx
lea eax, [esi + 0x28]
push eax
mov eax, esi
call fcn.00405450
add esp, 0x10
neg eax
sbb eax, eax
add eax, 1
mov dword [esi + 0x18], eax
mov ecx, dword [edi]
cmp dword [ecx + 0x10], ebx
jl 0x4067f0
lea edx, [esp + 0x1c]
push edx
push ebx
mov ecx, edi
call fcn.004060f0
test byte [esp + 0x124], 0x10
mov al, byte [ebp]
je 0x406896
cmp al, 0x2f
je 0x40686d
cmp al, 0x5c
je 0x40686d
test al, al
je 0x40687f
cmp byte [ebp + 1], 0x3a
jne 0x40687f
push ebp
push 0
call fcn.00406670
add esp, 8
xor eax, eax
jmp 0x406aad
push ebp
add edi, 0x140
push edi
call fcn.00406670
add esp, 8
xor eax, eax
jmp 0x406aad
test al, al
mov ebx, ebp
mov ecx, ebp
je 0x4068b5
mov edi, edi
cmp al, 0x2f
je 0x4068a8
cmp al, 0x5c
jne 0x4068ab
lea ebx, [ecx + 1]
mov al, byte [ecx + 1]
add ecx, 1
test al, al
jne 0x4068a0
lea edx, [esp + 0x14c]
mov eax, ebp
sub edx, ebp
mov cl, byte [eax]
mov byte [edx + eax], cl
add eax, 1
test cl, cl
jne 0x4068c0
cmp ebx, ebp
jne 0x406976
mov byte [esp + 0x14c], cl
push ebx
lea ecx, [esp + 0x150]
push ecx
lea esi, [edi + 0x140]
push esi
lea edx, [esp + 0x260]
push str._s_s_s
push edx
call dword [sym.imp.USER32.dll_wsprintfA]
add esp, 0x14
lea eax, [esp + 0x14c]
push eax
push esi
call fcn.00406670
add esp, 8
lea ecx, [esp + 0x254]
push ecx
call dword [sym.imp.KERNEL32.dll_GetFileAttributesA]
and eax, 0xfffffffa
push eax
lea edx, [esp + 0x258]
push edx
call dword [sym.imp.KERNEL32.dll_SetFileAttributesA]
mov eax, dword [esp + 0x124]
push 0
and eax, 0xfffffffa
push eax
push 2
push 0
push 0
mov dword [esp + 0x138], eax
push 0x40000000
lea eax, [esp + 0x26c]
push eax
call dword [sym.imp.KERNEL32.dll_CreateFileA]
mov ebx, eax
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp ebx, 0xffffffff
jne 0x4069da
mov eax, 0x200
jmp 0x406aad
mov eax, ebx
sub eax, ebp
mov byte [esp + eax + 0x14c], 0
mov al, byte [esp + 0x14c]
cmp al, 0x2f
je 0x4069a7
cmp al, 0x5c
je 0x4069a7
test al, al
je 0x4068db
cmp byte [esp + 0x14d], 0x3a
jne 0x4068db
push ebx
lea ecx, [esp + 0x150]
push ecx
lea edx, [esp + 0x25c]
push str._s_s
push edx
call dword [sym.imp.USER32.dll_wsprintfA]
lea eax, [esp + 0x15c]
push eax
push 0
call fcn.00406670
add esp, 0x18
jmp 0x406912
mov ecx, dword [edi + 0x138]
mov eax, dword [edi]
push ecx
call fcn.00405b70
add esp, 4
cmp dword [edi + 0x13c], 0
jne 0x406a07
push 0x4000
call fcn.004071fe
add esp, 4
mov dword [edi + 0x13c], eax
mov ebp, dword [sym.imp.KERNEL32.dll_WriteFile]
mov dword [esp + 0x14], 0
mov eax, dword [edi + 0x13c]
lea edx, [esp + 0x13]
push edx
push eax
mov eax, dword [edi]
mov ecx, 0x4000
call fcn.00405cf0
mov esi, eax
add esp, 8
cmp esi, 0xffffff96
je 0x406a68
test esi, esi
jl 0x406a5e
jle 0x406a53
mov edx, dword [edi + 0x13c]
push 0
lea ecx, [esp + 0x1c]
push ecx
push esi
push edx
push ebx
call ebp
test eax, eax
je 0x406a72
cmp byte [esp + 0x13], 0
jne 0x406a7c
test esi, esi
jne 0x406a15
mov dword [esp + 0x14], 0x5000000
jmp 0x406a9b
mov dword [esp + 0x14], 0x1000
jmp 0x406a9b
mov dword [esp + 0x14], 0x400
jmp 0x406a9b
lea eax, [esp + 0x138]
push eax
lea ecx, [esp + 0x12c]
push ecx
lea edx, [esp + 0x138]
push edx
push ebx
call dword [sym.imp.KERNEL32.dll_SetFileTime]
push ebx
call dword [sym.imp.KERNEL32.dll_CloseHandle]
mov ebx, dword [edi]
call fcn.00405f60
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0x360]
pop edi
pop esi
pop ebp
pop ebx
xor ecx, esp
call fcn.004070e8
add esp, 0x354
ret 8