Function at 0x4012d0
Capabilities:
Allocate or change rwx memory
Create process on windows
Create thread
Hide graphical window
Inject thread
Spawn thread to rwx shellcode

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff0
sub esp, 0xa8
push ebx
push esi
push edi
mov dword [ebp - 4], 0
call fcn.00405a10
push dword [ebp + 0xc]
push dword [ebp + 8]
call fcn.00401770
mov dword [ebp - 8], 0
mov dword [ebp - 0xc], 0
mov dword [ebp - 0x10], 0
mov dword [ebp - 0x14], 0
mov dword [ebp - 0x18], 0
mov byte [ebp - 0x1c], 0
mov dword [ebp - 0x20], 0
mov dword [ebp - 0x24], 0
mov dword [ebp - 0x28], 0
mov dword [ebp - 0x38], 0
mov dword [ebp - 0x34], 0
mov dword [ebp - 0x30], 0
mov dword [ebp - 0x2c], 0
lea edi, [ebp - 0x7c]
xor eax, eax
mov ecx, 0x11
rep stosd dword es:[edi], eax
push str.KERNEL32.dll
call sub.KERNEL32.dll_GetModuleHandleA
mov dword [ebp - 0x14], eax
cmp dword [ebp - 0x14], 0
jne 0x401391
push 1
push 0x19
push str.Kernel32_not_loaded______
call fcn.00401790
push eax
push 0
call fcn.00401880
push 0xffffffffffffffff
call fcn.004018d0
push 0
call fcn.00401900
mov dword [ebp - 0x7c], 0x44
push 0
push 0x12
push str.Creating_Process:
call fcn.00401790
push eax
push 0
call fcn.00401880
push 1
lea eax, [ebp - 0x38]
push eax
lea eax, [ebp - 0x7c]
push eax
push 0
push 0
push 0
push 0
push 0
push 0
push str.no_gba.exe_NDS2xGL2.ds.gba
push 0
call sub.KERNEL32.dll_CreateProcessA
push eax
push 0
call fcn.00401970
mov eax, dword [ebp - 0x38]
mov dword [ebp - 8], eax
push 0x2000
push dword [ebp - 8]
call sub.USER32.dll_WaitForInputIdle
push 0
push str.No_dlgClass
call sub.USER32.dll_FindWindowA
mov dword [ebp - 0xc], eax
push 0x64
call fcn.004018d0
cmp dword [ebp - 0xc], 0
je 0x4013eb
push 0
push dword [ebp - 0xc]
call sub.USER32.dll_ShowWindow
push 0xffff0000
call fcn.00401b50
push 2
push 0
push 7
call fcn.00401ba0
push 0x40
push 0x101000
push 0x10000
push 0
push dword [ebp - 8]
call sub.KERNEL32.dll_VirtualAllocEx
mov dword [ebp - 0x18], eax
cmp dword [ebp - 0x18], 0
jne 0x401469
push 1
push 0x19
push str.Cannot_Aloc_the_memory__
call fcn.00401790
push eax
push 0
call fcn.00401880
push 0xffffffffffffffff
call fcn.004018d0
push 0
call fcn.00401900
mov eax, section..bss
mov dword [ebp - 0x80], eax
push str.LoadLibraryA
push dword [ebp - 0x14]
call sub.KERNEL32.dll_GetProcAddress
mov ebx, dword [ebp - 0x80]
mov dword [ebx], eax
push str.GetProcAddress
push dword [ebp - 0x14]
call sub.KERNEL32.dll_GetProcAddress
mov ebx, dword [ebp - 0x80]
mov dword [ebx + 4], eax
push 0
push 0xb
push str.remote.dll
push 0xb
mov eax, dword [ebp - 0x80]
lea ebx, [eax + 8]
push ebx
call fcn.00401bf0
push 0
push 0x19
push str.Writing_dada_into_process
call fcn.00401790
push eax
push 0
call fcn.00401880
push 1
push 0
push 0x13
lea eax, section..bss
push eax
push dword [ebp - 0x18]
push dword [ebp - 8]
call sub.KERNEL32.dll_WriteProcessMemory
push eax
push 0
call fcn.00401970
mov dword [0x408014], 0x4016ed
mov dword [0x408018], 0x4016e8
mov dword [0x40801c], 0x401705
mov dword [ebp - 0xa4], 0
mov dword [ebp - 0xa0], 0
mov dword [ebp - 0x9c], 1
mov dword [ebp - 0x98], 1
mov dword [ebp - 0x94], 1
mov dword [ebp - 0x90], 0
mov dword [ebp - 0x8c], 0
mov dword [ebp - 0x88], 0
mov eax, dword [0x40801c]
sub eax, dword [0x408018]
push eax
push 0
push 1
push 0
push 0xffffffffffffffff
push 1
lea eax, [ebp - 0xa4]
push eax
call fcn.00401fa0
add esp, 0x1c
mov eax, dword [ebp - 0xa4]
lea ebx, [eax]
mov dword [0x408020], ebx
mov dword [ebp - 0x20], 0
mov ebx, dword [0x40801c]
sub ebx, dword [0x408018]
mov eax, ebx
mov dword [ebp - 0xa8], eax
jmp 0x4015bf
mov eax, dword [0x408018]
add eax, dword [ebp - 0x20]
mov bl, byte [eax]
mov byte [ebp - 0x1c], bl
mov ebx, dword [0x408020]
add ebx, dword [ebp - 0x20]
mov al, byte [ebp - 0x1c]
mov byte [ebx], al
inc dword [ebp - 0x20]
mov eax, dword [ebp - 0xa8]
cmp dword [ebp - 0x20], eax
jbe 0x4015a1
mov eax, dword [0x408014]
add eax, dword [0x408020]
sub eax, dword [0x408018]
mov ebx, dword [ebp - 0x18]
mov dword [eax - 4], ebx
add dword [ebp - 0x18], 0x13
push 0
push 0x1d
push str.Writing_In_the_Memory_Process
call fcn.00401790
push eax
push 0
call fcn.00401880
push 1
push 0
mov eax, dword [0x40801c]
sub eax, dword [0x408018]
inc eax
push eax
push dword [0x408020]
push dword [ebp - 0x18]
push dword [ebp - 8]
call sub.KERNEL32.dll_WriteProcessMemory
push eax
push 0
call fcn.00401970
push 2
push 0
push 8
call fcn.00401ba0
lea eax, [ebp - 0x24]
push eax
push 0
lea eax, [ebp - 0x28]
push eax
push dword [ebp - 0x18]
push 0
push 0
push dword [ebp - 8]
call sub.KERNEL32.dll_CreateRemoteThread
test eax, eax
je 0x401665
push 1
push 0x19
push str.Thread_Criada_com_sucesso
call fcn.00401790
push eax
push 0
call fcn.00401880
jmp 0x40167b
push 1
push 0x17
push str.Erro_ao_criar_thread__
call fcn.00401790
push eax
push 0
call fcn.00401880
push 0
push 0xe
push str.O_Processo_eh
call fcn.00401790
push eax
push 0
call fcn.00401880
push 1
push dword [ebp - 8]
push 0
call fcn.00401a60
push 0
push 0x19
push str.O_endereco_de_memoria_eh
call fcn.00401790
push eax
push 0
call fcn.00401880
push 1
push dword [ebp - 0x18]
push 0
call fcn.00401a60
push 0
push 0x12
push str.O_ID_da_thread_eh
call fcn.00401790
push eax
push 0
call fcn.00401880
push 1
push dword [ebp - 0x24]
push 0
call fcn.00401a60
push 0
call fcn.00401900
mov esi, 0x75bcd15
lea eax, [esi + 8]
push esi
push eax
mov eax, dword [esi]
call eax
pop esi
push 1
push eax
mov eax, dword [esi + 4]
call eax
call eax
ret 4