Function at 0x405960
Capabilities:
Check if file exists
Copy file
Create shortcut via ishelllink
Delete file
Get common file path
Get file attributes
Move file
Persist via lnk shortcut

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x2c4
mov eax, dword [section..data]
xor eax, ebp
mov dword [ebp - 4], eax
push ebx
push esi
push edi
push 0x258
lea eax, [ebp - 0x2a0]
mov byte [ebp - 0x2a5], dl
push 0
push eax
mov edi, ecx
call fcn.0042a4e0
add esp, 0xc
lea eax, [ebp - 0x48]
push 0x40
push 0
push eax
call fcn.0042a4e0
xorps xmm0, xmm0
add esp, 0xc
cmp dword [0x4574d4], 0
movq qword [ebp - 0x2c0], xmm0
movq qword [ebp - 0x2b8], xmm0
je 0x405cb8
push 0x14
lea eax, [ebp - 0x48]
push eax
call dword [sym.imp.KERNEL32.dll_GetWindowsDirectoryW]
mov esi, eax
test esi, esi
jne 0x4059e9
xor al, al
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 4]
xor ecx, ebp
call fcn.00428cd6
mov esp, ebp
pop ebp
ret
lea eax, [ebp - 0x2a0]
push eax
push 1
push 0
push 9
push 0
call dword [sym.imp.SHELL32.dll_SHGetFolderPathW]
test eax, eax
jne 0x4059d6
push 0x457630
mov edx, 0x7fff
lea ecx, [ebp - 0x2a0]
call fcn.00402470
test eax, eax
jns 0x405a38
xor ebx, ebx
mov dword [0x457630], 0
cmp word [ebp - 0x2a0], bx
mov eax, 0x7fff
cmovne ebx, eax
jmp 0x405a3f
movzx ebx, word [0x457630]
movups xmm0, xmmword [str.DXToolEx.exe]
mov eax, dword [0x44486c]
movups xmmword [ebp + esi*2 - 0x48], xmm0
movq xmm0, qword [0x444864]
movq qword [ebp + esi*2 - 0x38], xmm0
mov dword [ebp + esi*2 - 0x30], eax
movzx eax, bx
inc ebx
cmp byte [ebp - 0x2a5], 0
mov dword [ebp - 0x2ac], ebx
mov dword [ebp + eax*2 - 0x2a0], 0x5c
je 0x405ae3
movzx eax, bx
mov esi, 0x456040
lea ebx, [ebp - 0x2a0]
mov edi, 0xd
lea ebx, [ebx + eax*2]
movzx eax, word [esi + 4]
add eax, eax
push eax
push dword [esi]
push ebx
call fcn.0043c9e0
add esp, 0xc
lea eax, [ebp - 0x2a0]
push eax
call dword [sym.imp.KERNEL32.dll_DeleteFileW]
lea esi, [esi + 0x1c]
sub edi, 1
jne 0x405a96
push 4
push edi
lea eax, [ebp - 0x48]
push eax
call dword [sym.imp.KERNEL32.dll_MoveFileExW]
test eax, eax
jne 0x405ca5
cmp dword [0x4574d4], eax
je 0x405cc4
jmp 0x405ca5
lea eax, [ebp - 0x48]
push eax
call dword [sym.imp.KERNEL32.dll_GetFileAttributesW]
cmp eax, 0xffffffff
je 0x405b33
lea edx, [ebp - 0x2c0]
mov ecx, edi
call fcn.00405670
lea edx, [ebp - 0x2b8]
lea ecx, [ebp - 0x48]
call fcn.00405670
mov eax, dword [ebp - 0x2bc]
cmp eax, dword [ebp - 0x2b4]
ja 0x405b33
jb 0x4059d6
mov eax, dword [ebp - 0x2c0]
cmp eax, dword [ebp - 0x2b8]
jbe 0x4059d6
push 0
lea eax, [ebp - 0x48]
push eax
push edi
call dword [sym.imp.KERNEL32.dll_CopyFileW]
test eax, eax
je 0x4059d6
xor edi, edi
mov esi, 0x456040
nop
cmp di, 0xc
je 0x405c97
movzx eax, word [esi + 4]
lea ecx, [ebp - 0x2a0]
add eax, eax
push eax
push dword [esi]
movzx eax, bx
lea eax, [ecx + eax*2]
push eax
call fcn.0043c9e0
mov eax, dword [esi + 0x18]
add esp, 0xc
cmp word [ebp - 0x48], 0
mov ebx, dword [esi + 0xc]
mov dword [ebp - 0x2bc], eax
mov eax, dword [esi + 8]
mov dword [ebp - 0x2b4], eax
je 0x405c91
cmp word [ebp - 0x2a0], 0
je 0x405c91
lea eax, [ebp - 0x2a4]
push eax
push 0x43e530
push 1
push 0
push 0x43e560
call dword [sym.imp.ole32.dll_CoCreateInstance]
test eax, eax
js 0x405c91
mov eax, dword [ebp - 0x2a4]
lea edx, [ebp - 0x48]
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x50]
mov edx, dword [ebp - 0x2b4]
test edx, edx
je 0x405bf6
cmp word [edx], 0
je 0x405bf6
mov eax, dword [ebp - 0x2a4]
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x2c]
test ebx, ebx
je 0x405c0d
cmp word [ebx], 0
je 0x405c0d
mov eax, dword [ebp - 0x2a4]
push ebx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x1c]
mov eax, dword [ebp - 0x2a4]
push str._SystemRoot_
push eax
mov ecx, dword [eax]
call dword [ecx + 0x24]
cmp word [ebp - 0x48], 0
je 0x405c3b
mov eax, dword [ebp - 0x2a4]
lea edx, [ebp - 0x48]
push dword [ebp - 0x2bc]
push edx
mov ecx, dword [eax]
push eax
call dword [ecx + 0x44]
mov eax, dword [ebp - 0x2a4]
push 6
push eax
mov ecx, dword [eax]
call dword [ecx + 0x3c]
mov eax, dword [ebp - 0x2a4]
lea edx, [ebp - 0x2b0]
push edx
push 0x43e570
push eax
mov ecx, dword [eax]
call dword [ecx]
test eax, eax
js 0x405c85
mov eax, dword [ebp - 0x2b0]
lea edx, [ebp - 0x2a0]
push 1
push edx
push eax
mov ecx, dword [eax]
call dword [ecx + 0x18]
mov eax, dword [ebp - 0x2b0]
push eax
mov ecx, dword [eax]
call dword [ecx + 8]
mov eax, dword [ebp - 0x2a4]
push eax
mov ecx, dword [eax]
call dword [ecx + 8]
mov ebx, dword [ebp - 0x2ac]
inc edi
add esi, 0x1c
cmp di, 0xd
jb 0x405b50
mov ecx, dword [ebp - 4]
mov al, 1
pop edi
pop esi
xor ecx, ebp
pop ebx
call fcn.00428cd6
mov esp, ebp
pop ebp
ret
sub esp, 0xc
xor edx, edx
xor ecx, ecx
call fcn.00403910
sub esp, 0xc
xor edx, edx
xor ecx, ecx
call fcn.00403910
int3