Function at 0x40734d
Capabilities:
Get common file path
Get installed programs
Move file
Set registry value

Disassembly:
push ebp
lea ebp, [esp - 0x3dc]
sub esp, 0x45c
mov eax, dword [0x42005c]
push ebx
push esi
push edi
mov dword [ebp - 0x78], ecx
push 0xd
pop ecx
mov esi, 0x401e1c
lea edi, [ebp + 0x29c]
rep movsd dword es:[edi], dword [esi]
mov dword [ebp + 0x3d8], eax
mov eax, dword [0x420b04]
xor ebx, ebx
cmp dword [eax + 0x218], ebx
movsb byte es:[edi], byte [esi]
je 0x4076e1
push dword [0x403318]
mov ecx, 0x420b10
push dword [0x4032fc]
call fcn.0041433f
mov dword [ebp - 0x74], eax
xor eax, eax
mov cl, byte [ebp + eax + 0x29c]
mov byte [ebp + eax + 0x198], cl
inc eax
test cl, cl
jne 0x4073ab
mov eax, dword [ebp - 0x74]
mov edx, eax
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x4073c3
lea edi, [ebp + 0x198]
sub eax, edx
dec edi
mov cl, byte [edi + 1]
inc edi
test cl, cl
jne 0x4073d3
mov ecx, eax
shr ecx, 2
mov esi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
lea eax, [ebp - 0x80]
push eax
lea eax, [ebp - 0x7c]
push eax
push ebx
push 0xf003f
push ebx
push ebx
push ebx
lea eax, [ebp + 0x198]
push eax
and ecx, 3
push reloc.WS2_32.dll_bind
rep movsb byte es:[edi], byte [esi]
call dword [sym.imp.ADVAPI32.dll_RegCreateKeyExA]
test eax, eax
jne 0x4076e1
mov ecx, dword [ebp - 0x78]
push 0x401c49
lea eax, [ebp + 0x198]
push eax
push 0x401c44
push 0x401c2c
call fcn.00407018
mov eax, dword [ebp - 0x74]
lea edx, [ebp - 0x70]
sub edx, eax
mov cl, byte [eax]
mov byte [edx + eax], cl
inc eax
test cl, cl
jne 0x40743c
lea edi, [ebp - 0x70]
dec edi
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x40744a
mov esi, 0x401e0c
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
lea eax, [ebp - 0x70]
movsb byte es:[edi], byte [esi]
lea ecx, [eax + 1]
mov dl, byte [eax]
inc eax
test dl, dl
jne 0x407461
sub eax, ecx
inc eax
push eax
lea eax, [ebp - 0x70]
push eax
push 1
push ebx
push 0x401e00
push dword [ebp - 0x7c]
call dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
push dword [ebp - 0x74]
call fcn.0040c06d
lea eax, [ebp + 0x2d4]
mov dword [esp], 0x104
push eax
call dword [sym.imp.KERNEL32.dll_GetWindowsDirectoryA]
lea eax, [ebp + 0x2d4]
push eax
call fcn.00403f61
lea edi, [ebp + 0x2d4]
dec edi
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x4074b0
mov ecx, dword [0x420b04]
mov ebx, 0x401df0
mov esi, ebx
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsw word es:[edi], word [esi]
mov eax, dword [ecx]
call dword [eax + 0x28]
lea ecx, [ebp + 0x198]
mov dl, byte [eax]
inc eax
mov byte [ecx], dl
inc ecx
test dl, dl
jne 0x4074d5
lea eax, [ebp + 0x198]
push eax
call fcn.00403f61
lea edi, [ebp + 0x198]
dec edi
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x4074f2
mov esi, ebx
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
push 3
lea eax, [ebp + 0x2d4]
movsd dword es:[edi], dword [esi]
push eax
lea eax, [ebp + 0x198]
push eax
movsw word es:[edi], word [esi]
call dword [sym.imp.KERNEL32.dll_MoveFileExA]
test eax, eax
jne 0x407521
call dword [sym.imp.KERNEL32.dll_GetLastError]
lea eax, [ebp + 0x2d4]
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x40752a
mov ebx, dword [sym.imp.ADVAPI32.dll_RegSetValueExA]
sub eax, edx
inc eax
push eax
lea eax, [ebp + 0x2d4]
push eax
push 1
push 0
push 0x401de4
push dword [ebp - 0x7c]
call ebx
lea edi, [ebp + 0x2d4]
dec edi
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x407557
mov ecx, dword [0x420b04]
mov esi, 0x401de0
movsw word es:[edi], word [esi]
movsb byte es:[edi], byte [esi]
mov eax, dword [ecx]
call dword [eax + 0xc]
mov edx, eax
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x407574
lea edi, [ebp + 0x2d4]
sub eax, edx
dec edi
mov cl, byte [edi + 1]
inc edi
test cl, cl
jne 0x407584
mov ecx, eax
shr ecx, 2
mov esi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [ebp + 0x2d4]
dec edi
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x4075a3
mov eax, dword [0x420b04]
mov esi, 0x401ddc
movsd dword es:[edi], dword [esi]
mov eax, dword [eax + 0x1264]
mov edx, eax
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x4075be
lea edi, [ebp + 0x2d4]
sub eax, edx
dec edi
mov cl, byte [edi + 1]
inc edi
test cl, cl
jne 0x4075ce
mov ecx, eax
shr ecx, 2
mov esi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
lea edi, [ebp + 0x2d4]
dec edi
mov al, byte [edi + 1]
inc edi
test al, al
jne 0x4075ed
mov esi, 0x401dd8
lea eax, [ebp + 0x2d4]
movsw word es:[edi], word [esi]
lea ecx, [eax + 1]
mov dl, byte [eax]
inc eax
test dl, dl
jne 0x407605
sub eax, ecx
inc eax
push eax
lea eax, [ebp + 0x2d4]
push eax
push 1
xor esi, esi
push esi
push 0x401dc8
push dword [ebp - 0x7c]
call ebx
mov ebx, dword [ebp - 0x78]
push 0x401dc4
push ebx
call fcn.0040cd41
cmp eax, esi
pop ecx
pop ecx
mov dword [ebp - 0x74], eax
je 0x4076e1
cmp dword [ebx + 0x110], esi
mov dword [ebp - 0x78], esi
jbe 0x4076d8
mov eax, dword [ebx + 0x108]
mov ecx, dword [ebp - 0x78]
mov ecx, dword [eax + ecx*4]
lea esi, [ecx - 2]
mov al, byte [esi]
cmp al, 0x66
je 0x4076a1
cmp al, 0x46
je 0x4076a1
cmp al, 0x6f
je 0x4076a1
cmp al, 0x4f
je 0x4076a1
cmp al, 0x62
je 0x4076a1
cmp al, 0x73
je 0x40768d
cmp al, 0x72
je 0x40768d
cmp al, 0x52
je 0x40768d
cmp al, 0x64
je 0x40768d
cmp al, 0x75
je 0x40768d
cmp al, 0x70
jne 0x4076c6
push ecx
push esi
push 0x401dbc
push dword [ebp - 0x74]
call fcn.0040cce5
add esp, 0x10
jmp 0x4076c6
mov eax, ecx
lea edi, [eax + 1]
mov dl, byte [eax]
inc eax
test dl, dl
jne 0x4076a6
sub eax, edi
lea eax, [eax + ecx + 1]
push eax
push ecx
push esi
push 0x401db0
push dword [ebp - 0x74]
call fcn.0040cce5
add esp, 0x14
inc dword [ebp - 0x78]
mov eax, dword [ebp - 0x78]
cmp eax, dword [ebx + 0x110]
jb 0x407650
push dword [ebp - 0x74]
call fcn.0040cc8f
pop ecx
mov ecx, dword [ebp + 0x3d8]
pop edi
pop esi
pop ebx
call fcn.0040bf1b
add ebp, 0x3dc
leave
ret