Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Hendrix en 6 Mayo 2006, 23:18 pm



Título: Inyectando codigo en espacios vacios de programas
Publicado por: Hendrix en 6 Mayo 2006, 23:18 pm
Weno, una par de dudas que se me vienen a la cabeza....

Hace tiempo lei que hay virus que lo que hacen para inyectarse en otros procesos es okupar sus espacion vacios kon su kodigo.....para hacer eso hay que usar alguna API ene special??? alomejor se tendria que buskar lso espacios vacios y leugo kalkular el tamaño de este espacio e ir copiandose en el espacio...trozo a trozo....Pero ahora tengo otra duda...komo se va a ejekutar si pro ejemplo el PE del virus esta por enmedio del cuerpo del archivo origen??? :-\ :-\ :-\

Mi ultima duda...si eso fuera posible...se podria por ejemplo inyectar kode en .jpg??? puesto que no veo ninguna diferencia infectar a un .exe....y que este mismo "te ejekute" a ti mismo....que un .jpg....puesto que el PE del worm no influye en la ejekucin del archcivo origen...o si????

Weno, respondenme si no se an perdido por la explikacion de mi pregunta...xD xD xD

Salu2

Hendrix



Título: Re: Inyectando codigo en espacios vacios de programas
Publicado por: Eternal Idol en 6 Mayo 2006, 23:31 pm
Me parece que estas mezclando dos cosas, una la inyeccion de codigo sobre un PROCESO y otra la "incrustacion" de codigo en un PROGRAMA.
En la primera se escribe en el espacio de direcciones de un proceso en ejecucion mientras que en la segunda se escribe en el archivo en disco.

¿Como se ejecuta el codigo incrustado en un archivo ejecutable en disco? Asi rapidamente se me ocurren un par de formas, la mas simple es cambiar el entry point. En el PE hay un campo que indica la direccion de comienzo del ejecutable (entry point), haciendo que la misma apunte al codigo nuevo y que este codigo termina saltando a la direccion original del entry point se consigue ejecutar antes el nuevo codigo y despues el programa de siempre.


Título: Re: Inyectando codigo en espacios vacios de programas
Publicado por: Hendrix en 6 Mayo 2006, 23:38 pm
es decir...que esto de modificar el PE solo funcionaria en .exe's....no???? y komo se haria para modificar el PE??? :-\ :-\

Salu2 y gracias por contestar.....



Título: Re: Inyectando codigo en espacios vacios de programas
Publicado por: Eternal Idol en 6 Mayo 2006, 23:43 pm
es decir...que esto de modificar el PE solo funcionaria en .exe's....no???? y komo se haria para modificar el PE??? :-\ :-\

PE es Portable Executable y se usa para varios tipos de archivos. En NT para codigo objeto (.OBJ), ejecutables (.EXE), librerias (.DLL, .OCX) y drivers (.SYS) entr otros, tanto de 32 como de 64 bits.
Para modificar un PE se necesita lo mismo que para con cualquier otro formato, saber sus especificaciones y modificarlo en modo binario (no texto).


Título: Re: Inyectando codigo en espacios vacios de programas
Publicado por: Hendrix en 7 Mayo 2006, 00:12 am
Weno...pos me puedo conviene que deje este modo de inyeccion...ya que refirigir entry points no es mi fuerte...xD xD xD

Salu2 y gracias... ;) ;)



Título: Re: Inyectando codigo en espacios vacios de programas
Publicado por: Kizar en 7 Mayo 2006, 02:10 am
Eternal Idol a mi me gustaria k expusieras como encontrar el entry point y como cambiar la direcion a la k apunta.
Se algo de asm y de hex supongo k vendra bien.

PD: No ay ganas de buscar nada...

Salu2


Título: Re: Inyectando codigo en espacios vacios de programas
Publicado por: byebye en 7 Mayo 2006, 02:53 am
Código:
mov edx,dword [eax+3Ch] 
add edx,eax       
mov edx,dword [edx+28h] 
 

suponiendo que eax=MZ. ahi tienes el entrypoint. desplazamiento 28h respecto a la cabecera PE.

PD: por si no queda claro, cuando digo MZ quiero decir la direccion base donde se mapea el archivo.


Título: Re: Inyectando codigo en espacios vacios de programas
Publicado por: Eternal Idol en 7 Mayo 2006, 10:30 am
Lo vas a poder ver mejor con las estructuras:

IMAGE_DOS_HEADER
IMAGE_NT_HEADERS

0x3C es el offset al campo e_lfanew de la primera estructura, es el que apunta a la nueva cabecera (del PE real). Todo PE tiene un ejecutable de MS-DOS incrustado al inicio, generalmente y por defecto es el que nos dice "This program cannot be run under DOS" o algo asi.

0x28 es el offset al campo AddressOfEntryPoint de la segunda estructura.