Function at 0x4010d9
Capabilities:
Create directory
Write file on windows

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x60
push ebx
push esi
mov esi, str.perl56.dll
push edi
push esi
mov ebx, esi
call dword [sym.imp.KERNEL32.dll_GetModuleHandleA]
and dword [ebp - 8], 0
test eax, eax
je 0x401109
push esi
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov edi, eax
test edi, edi
jne 0x40130a
lea eax, [ebp - 0x40]
push eax
push 0xa
push esi
push dword [ebp + 8]
call fcn.0040459b
add esp, 0x10
test eax, eax
je 0x4012f5
mov al, byte [0x40d4ac]
push 7
mov byte [ebp - 0x60], al
pop ecx
xor eax, eax
lea edi, [ebp - 0x5f]
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
stosb byte es:[edi], al
mov edi, 0x40d140
push edi
call dword [sym.imp.KERNEL32.dll_EnterCriticalSection]
push dword [0x40d360]
push dword [ebp + 0xc]
call fcn.00402eaf
pop ecx
mov dword [ebp - 4], eax
pop ecx
push edi
call dword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
cmp dword [ebp - 4], 0
jne 0x40117f
push str.Panic:_Cant_find_temp_dir_for_perlapp
mov eax, dword [sym.imp.MSVCRT.dll__iob]
add eax, 0x40
push eax
call dword [sym.imp.MSVCRT.dll_fprintf]
pop ecx
pop ecx
jmp 0x40132d
push dword [ebp - 4]
call sub.MSVCRT.dll_strlen
push esi
mov ebx, eax
call sub.MSVCRT.dll_strlen
mov edi, eax
pop ecx
add edi, ebx
cmp dword [ebp + 0xc], 0
pop ecx
mov dword [ebp - 8], edi
jne 0x4011e0
lea eax, [ebp - 0x24]
push eax
push 0xa
push str.perl56.md5
push dword [ebp + 8]
call fcn.0040459b
add esp, 0x10
test eax, eax
je 0x4011fc
lea eax, [ebp - 0x24]
push eax
call fcn.0040445d
cmp eax, 0x20
pop ecx
jne 0x4011fc
lea eax, [ebp - 0x60]
push eax
lea eax, [ebp - 0x24]
push eax
call fcn.00404477
pop ecx
test eax, eax
pop ecx
je 0x4011fc
add edi, 0x21
mov dword [ebp - 8], edi
inc edi
push edi
call dword [sym.imp.MSVCRT.dll_malloc]
mov edi, eax
pop ecx
test edi, edi
jne 0x401206
push dword [ebp - 8]
push str.Panic:_Cant_malloc_name___d__n
jmp 0x40131b
push str.Panic:_Cant_extract_MD5_checksum_for_perl56.lib_n
jmp 0x401169
push ebx
push dword [ebp - 4]
push edi
call dword [sym.imp.MSVCRT.dll_strncpy]
add esp, 0xc
cmp dword [ebp + 0xc], 0
jne 0x401241
lea eax, [ebp - 0x60]
push 0x20
push eax
lea eax, [edi + ebx]
push eax
call dword [sym.imp.MSVCRT.dll_strncpy]
and byte [edi + ebx + 0x20], 0
add ebx, 0x20
push edi
call dword [sym.imp.MSVCRT.dll__mkdir]
add esp, 0x10
mov byte [edi + ebx], 0x5c
inc ebx
lea eax, [edi + ebx]
push esi
push eax
call sub.MSVCRT.dll_strcpy
mov esi, dword [sym.imp.MSVCRT.dll_fopen]
push 0x40b194
push edi
mov dword [ebp - 4], edi
mov dword [ebp - 8], 1
call esi
add esp, 0x10
mov dword [ebp + 8], eax
test eax, eax
jne 0x4012e8
lea eax, [ebp - 0x40]
push eax
call fcn.0040445d
mov ebx, eax
lea eax, [ebx + 1]
push eax
call dword [sym.imp.MSVCRT.dll_malloc]
pop ecx
mov dword [ebp + 0xc], eax
test eax, eax
pop ecx
jne 0x401295
push str.Panic:_Cant_allocate_memory_for_perl56.dll
jmp 0x401169
push eax
lea eax, [ebp - 0x40]
push eax
call fcn.00404477
pop ecx
test eax, eax
pop ecx
jne 0x4012af
push str.Panic:_Cant_extract_perl56.dll
jmp 0x401169
mov eax, dword [ebp + 0xc]
push 0x40b144
push edi
and byte [eax + ebx], 0
call esi
pop ecx
mov dword [ebp + 8], eax
test eax, eax
pop ecx
jne 0x4012cf
push edi
push str.Panic:_Cant_create__s_n
jmp 0x40131b
push eax
push ebx
push 1
push dword [ebp + 0xc]
call dword [sym.imp.MSVCRT.dll_fwrite]
push dword [ebp + 0xc]
call dword [sym.imp.MSVCRT.dll_free]
add esp, 0x14
push dword [ebp + 8]
call dword [sym.imp.MSVCRT.dll_fclose]
mov ebx, dword [ebp - 4]
pop ecx
push ebx
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
mov edi, eax
test edi, edi
jne 0x40130a
push ebx
push str.Panic:_Cant_locate__s_n
jmp 0x40131b
push edi
call fcn.00401346
test eax, eax
pop ecx
jne 0x401331
push ebx
push str.Panic:_Some_symbols_not_resolveable_from__s_n
mov eax, dword [sym.imp.MSVCRT.dll__iob]
add eax, 0x40
push eax
call dword [sym.imp.MSVCRT.dll_fprintf]
add esp, 0xc
xor eax, eax
jmp 0x401341
cmp dword [ebp - 8], 0
je 0x40133f
push ebx
call dword [sym.imp.MSVCRT.dll_free]
pop ecx
mov eax, edi
pop edi
pop esi
pop ebx
leave
ret