elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  El stud_PE me esta volviendo loco!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: El stud_PE me esta volviendo loco!  (Leído 4,249 veces)
andres52

Desconectado Desconectado

Mensajes: 33


Ver Perfil
El stud_PE me esta volviendo loco!
« en: 16 Mayo 2009, 07:10 am »

Estoy tratando de crear espacio manualmente con el stud pe, aca los pasos de como lo estoy haciendo:

Abro el ejecutable con el programa:


Luego me voy a sections y abro la última (rsrc)


Ahora le sumo 200 en hexa (512 bytes) a RawSize y VirtualSize:


Finalmente le sumo 200 al Size of Image:


Y se me jode.. no funciona de ninguna manera.. guardo el ejecutable y lo abro con el hexadecimal y no sale el nuevo espacio... luego lo trato de abrir con el Olly y me da un error, que no se puede abrir algo así.

Trato de hacer lo mismo con el lord y me pasa exactamente lo mismo, solo que ahora con una diferencia:



Al principio, cuando lo abro, me sale el número de Size of Image que me salía en el Stud, 12000, pero despúes de modificar la sección se me cambia a 11ADC... es decir.. un número menor al anterior... ¿Y esto porque? De cualquier manera... pasa lo mismo que con el stud.. me da el mismo error en el olly y no me agrega el espacio.

Un amigo mio me ayudo a agregarle espacio al ejecutable, se lo pase por msn e hizo lo mismo que yo en el Lord. La diferencia es que a él si le funcionó y el ejecutable si tiene el espacio y se puede abrir en el olly. Compare las cabeceras entre su ejectuable y el mio y eran idénticas, También noté que de size of image tiene 11ADC (porque lo hizo en el lord) y esto me frustró todavía más... ya no entiendo nada.

¿Porque no me funciona? Muchas gracias...
En línea

karmany
Moderador
***
Desconectado Desconectado

Mensajes: 1.615


Sueñas que sueñas


Ver Perfil WWW
Re: El stud_PE me esta volviendo loco!
« Respuesta #1 en: 16 Mayo 2009, 19:07 pm »

Claro, es que te estás olvidando de una cosa importantísima que tienes que hacer a mano:
-Añadir físicamente los bytes que has añadido en el PE header. Esto lo puedes hacer fácilmente con el programa Ultraedit: Botón derecho --> Añadir bytes

En principio, sólo con modificar el RawSize de la última sección y añadir con UltraEdit los bytes al final, te tiene que funcionar.
El problema que te puede ocurrir es que superes el valor de Section Alignment con los nuevos bytes que añades. En un primer momento tampoco te tiene que dar problema, porque Windows cuando cargue la aplicación en memoria modificará su Virtual Size y lo aumentará. Sin embargo, te digo lo del problema porque hay un valor que no será modificado y es posible que lo necesites modificar: SizeofImage; SizeofImage es el tamaño total del PE Image en memoria y por eso si pones un valor muy elevado, tal vez tengas que aumentar el SizeofImage. Aumentarlo es muy fácil, simplemente debes examinar el número de bytes que has añadido realmente y el valor de Section Alignment. Modificar SizeofImage va unido a la modificación de Virtual Size.

En tu primer ejemplo que haces, tienes un RawSize = 0000CA00
Le has sumado 200h bytes --> 0000CC00 = nuevo RawSize
Después modificas el valor de SizeofImage. Eso que haces no es correcto del todo, aunque puede valer, ya que el valor de SizeofImage tiene que ser múltiplo de SectionAlingment. En todo caso tendrías que sumarle 1000h bytes. Sin embargo, si te fijas,:
RawSize_original = 0000CA00
RawSize_final = 0000CC00
Como Section Alignment = 1000h no necesitas sumarle a SizeofImage nada ya que:
0000C000(multiplo de 1000h) + 00001000(Section Alignement) = 0000D000 y 0000CC00 no pasa de 0000D000. Esto quiere decir que tus datos nuevos aparecerán en memoria.

Por lo tanto en este ejemplo que has puesto,simplemente con modificar el RawSize y aumentar los bytes con UltraEdit, te tiene que funcionar.


PD. Otra cosa importante que me dejo es que si añades como te he dicho en el párrafo anterior, bastantes bytes y pasan del siguiente múltiplo de Section Alignment (en el ej. anterior sería que RawSize pasara de D000) debes modificar el Virtual Size de la última sección ya que sino cuando se cargue en memoria el programa, tus datos no se verán. Esto es importante.
Y además cuando aumentes el Virtual Size (sobrepasando el siguiente múltiplo de Section Alignment) debes aumentar el SizeofImage(en múltiplo de Section Alignment).

Finalmente si tienes dudas, sube un archivo que quieras y modificamos la última sección.
« Última modificación: 16 Mayo 2009, 19:32 pm por karmany » En línea

andres52

Desconectado Desconectado

Mensajes: 33


Ver Perfil
Re: El stud_PE me esta volviendo loco!
« Respuesta #2 en: 17 Mayo 2009, 02:28 am »

Muchas gracias, funcionó perfectamente. No se porque tenía la idea de que simplemente con modificar la cabezera se me agregrían los 200h bytes xd.

Otra cosa, estoy tratando de agregar instrucciones en el nuevo código, pero el problema es que me sale unable to save changes in exe file cuando modifico con el olly en la memoria, luego hice más grande el virtual size que el rawsize y nada...


¿Como soluciono esto?
En línea

karmany
Moderador
***
Desconectado Desconectado

Mensajes: 1.615


Sueñas que sueñas


Ver Perfil WWW
Re: El stud_PE me esta volviendo loco!
« Respuesta #3 en: 17 Mayo 2009, 14:45 pm »

Eso te ocurre normalmente porque te encuentras en una zona Virtual, es decir, que no estás en la zona donde has insertado el código.
Fíjate:
En este programa la ImageBase = 400000 y la primera sección es la siguiente:
Código:
Nombre      Virtual Offset     Virtual Size     Raw Offset     Raw Size
.text             00001000         00000076       00000400     00000200

Viendo esa sección: ¿Cuál es la última dirección en donde puedes escribir? ¿Dónde acaban los bytes y dónde empieza la zona virtual?
Pues es muy sencillo fíjate:
-Realmente hay 200 bytes de código en la sección .text
-Al cargarlo en memoria te aparecerán 1000 bytes(Section Alignment) en esa sección.
-Es decir, el último byte que puedes modificar estará en:
00400000 (ImageBase) + 00001000 (Virtual Offset sección .text) + 00000200 = 401200, no puedes escribir después, te dará error. Realmente tienes que restar un byte.

Por lo tanto, si aumentas 100h bytes y te queda así:
Código:
Nombre      Virtual Offset     Virtual Size     Raw Offset     Raw Size
.text             00001000         00000076       00000400     00000300

Cuando se cargue en memoria: ¿Dónde se encuentran esos 100h bytes nuevos que has puesto?
-Respuesta: entre 401200 y 401300. Realmente creo que es 4011FF y 4012FF

PD. Mira, como no he visto ningún programa para poder añadir bytes a la última sección, me comprometo desde hoy a hacer un programa para poder hacer todo este trabajo de una sola vez. Así no habrá que añadir bytes ni modificar nada, y con un visor PE se podrán ver los resultados..
« Última modificación: 17 Mayo 2009, 16:02 pm por karmany » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Fraps me está volviendo loco :(
Software
WarGhost 0 3,170 Último mensaje 8 Junio 2013, 20:25 pm
por WarGhost
Me estan volviendo loco
Redes
locstar 3 2,312 Último mensaje 15 Febrero 2015, 05:13 am
por virtualedu
Netbeans me esta volviendo loco...
Programación C/C++
kraiked 2 1,774 Último mensaje 27 Enero 2016, 16:48 pm
por kraiked
Arreglado el fallo de Google Chrome que estaba volviendo loco a medio mundo
Noticias
wolfbcn 0 982 Último mensaje 21 Junio 2019, 14:27 pm
por wolfbcn
(RESUELTO)[Mongoose] Me estoy volviendo loco, como hacer esto?
Desarrollo Web
[u]nsigned 2 2,611 Último mensaje 6 Julio 2020, 01:43 am
por [u]nsigned
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines