Foro de elhacker.net

Seguridad Informática => Análisis y Diseño de Malware => Mensaje iniciado por: Bb-7 en 5 Julio 2010, 16:21 pm



Título: Leer ejecutable e inyectar ????
Publicado por: Bb-7 en 5 Julio 2010, 16:21 pm
Hola. Voy al grano. Un amigo y yo estamos creando un cripter, y yo soy el encargado del stub. Por ahora todo va perfecto, ya que mi stub es capaz de leerse a sí mismo, extraer el ejecutable y las opciones, descifrar el ejecutable, escribirlo, y correrlo.
Ahora, he decidido dar un paso más, y en vez de crear un ejecutable temporal, lo que quiero es inyectar el código directamente en memoria tras haberlo descifrado. Teóricamente no me suponía ninguna dificultad, pero al pasar a la práctica, no me funcionaba. Sé inyectar funciones al estilo de void inyectada(DATOS *str_datos), en un proceso ó DLL, pero leer un ejecutable entero e inyectarlo es lo que llevo tiempo intentando hacer sin éxito, y me gustaría que me ayudarais.
No quiero un código, puesto que no soy de esas personas que copian, pegan y no entienden, no voy por el camino lammeril. Lo que quiero es una explicación teórica de cómo hacerlo, y a partir de ahí seré yo quien cree el código.
Lo que hacía hasta ahora era una vez leído y descifrado el código del ejecutable, meterlo en un puntero void, abrir el proceso notepad.exe, reservar memoria, e inyectarlo allí, y después abrir un thread, pero no pasaba nada, salvo que se cerraba el notepad.
Un saludo y gracias de antemano.


Título: Re: Leer ejecutable e inyectar ????
Publicado por: Lewert en 8 Julio 2010, 20:28 pm
Antes que nada mira los posts con chinchetas, puede que ahi esté tu respuesta! :D
Código:
http://foro.elhacker.net/analisis_y_diseno_de_malware/ejecucion_de_archivos_desde_memoria_base_relocation-t264564.0.html


Título: Re: Leer ejecutable e inyectar ????
Publicado por: Horricreu en 8 Julio 2010, 21:18 pm
Antes de pasar a hacer todo esto has de tener conocimientos sobre el formato PE (http://www.microsoft.com/whdc/system/platform/firmware/pecoff.mspx) y, luego saber como ofuscar ejecutables (http://foro.elhacker.net/analisis_y_diseno_de_malware/taller_asi_funcionan_los_crypters_cifrando_malware_a_mano-t262806.0.html) mano a mano. Luego todo esto, lo aplicas al código.

Saludos :P


Título: Re: Leer ejecutable e inyectar ????
Publicado por: [Zero] en 9 Julio 2010, 11:07 am
Si, es fundamental que conozcas el formato PE para trabajar con el ejecutable, ya que para inyectar un exe en memoria tienes que emular el loader de Windows.

  • Una vez tienes el ejecutable leído y tienes un puntero hacia el, creas un proceso, vacías los datos con los que arranca (en este caso el notepad.exe) con NtUnmapViewOfSections y reservas una cantidad de memoria igual a su SizeOfImage con VirtualAllocEx en la dirección de su ImageBase.
  • Ahora, tienes que ir recorriendo cada sección del ejecutable y copiarla con WriteProcessMemory a su VirtualAddress.
  • Para terminar, sólo te queda crear el hilo de ejecución con CreateRemoteThread hacia su EntryPoint.

Esa es la forma común, hay otras formas, más detectadas o menos detectadas, más complicadas y menos, pero todo se basa en tener clara la estructura de los ejecutables y qué hace windows para arrancarlos cuando el usuario lo desea.

 Taller Formato PE by Ferchu (http://foro.elhacker.net/analisis_y_diseno_de_malware/abril_negro_2008_taller_de_formato_pe_by_ferchu-t208278.0.html)

Saludos  ;)