[FASM] Simple Memory Code Injection

Iniciado por ANTRAX, Junio 05, 2012, 04:43:46 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 05, 2012, 04:43:46 PM Ultima modificación: Junio 03, 2013, 11:57:06 AM por Expermicid
Código: asm
;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\
;\\\///\\\///\\\///\\\///\\\Inyección de Código en Memoria //\\\///\\\///\\\///\\\
;\\\///\\\///\\\///\\\///\\\             [Zero]       //\\\///\\\///\\\///\\\
;\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\

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


Autor: Zero