Leer ejecutable e inyectar ????

Iniciado por Bb-7, 5 Julio 2010, 16:21 PM

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

Bb-7

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.





Lewert

Antes que nada mira los posts con chinchetas, puede que ahi esté tu respuesta! :D
http://foro.elhacker.net/analisis_y_diseno_de_malware/ejecucion_de_archivos_desde_memoria_base_relocation-t264564.0.html
Crack the bytes, crack yourself

Horricreu

Antes de pasar a hacer todo esto has de tener conocimientos sobre el formato PE y, luego saber como ofuscar ejecutables mano a mano. Luego todo esto, lo aplicas al código.

Saludos :P

[Zero]

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

Saludos  ;)


"El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.”
Nietzsche