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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  VirtualSize mayor que RawSize??
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: VirtualSize mayor que RawSize??  (Leído 5,445 veces)
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
VirtualSize mayor que RawSize??
« en: 10 Mayo 2009, 00:09 am »

Hola

De siempre he tenido entendido que el VirtualSize debía ser menor que el RawSize, que el RawSize debía ser múltiplo del FileAlignment y que la diferencia debía estar rellenada con ceros.

Por ejemplo, si un ejecutable tiene FileAlignment 10 y una sección tiene un VirtualSize = 22 el RawSize debería ser 30 y que los últimos 8 bytes de la sección deberían ser ceros.

Y siempre lo he visto así en los exe's generados por el compilador, pero hoy me he puesto a añadir una sección con el Stud PE y para añadirla me pedía únicamente VirtualSize y RawSize, yo he puesto un RawSize múltiplo del FileAlignment (aunque si no es múltiplo funciona igual) y mi sorpresa es que cuando añado el VirtualSize (menor que el RawSize) me dice que tiene que ser mayor  :o :o

Si lo pongo el exe funciona, de hecho si luego lo dejo menor peta, pero por que hay que hacerlo así?? no le veo sentido, si yo quiero introducir código en esa sección no puedo meter más código del que entra, que es lo que me están diciendo....

Vamos, supongamos que quiero hacer una sección nueva que contendrá 15 bytes, si el FileAlignment es 10 el RawSize debería ser 20, pero no me deja, me obliga a poner un RawSize = 10... y donde meto yo los 5 bytes restantes???

A ver si alguien puede aclararme esto..
Salu2
En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: VirtualSize mayor que RawSize??
« Respuesta #1 en: 10 Mayo 2009, 01:54 am »

bueno, que yo sepa, el RawSize es lo que ocupa cada sección en el archivo incluyendo los ceros. y el VirtualSize es lo que ocupa una vez cargado en la memoria ram.

Hacker_Zero izo un code para ampliar una sección, igual te sirve
En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: VirtualSize mayor que RawSize??
« Respuesta #2 en: 10 Mayo 2009, 02:26 am »

Claro, pues por eso mismo, no entiendo el por qué de que el virtual size sea mayor que el raw size, ampliar una sección ya se...

Tu mismo lo has dicho:
Citar
el RawSize es lo que ocupa cada sección en el archivo incluyendo los ceros. y el VirtualSize es lo que ocupa una vez cargado en la memoria ram

Como vas a tener más código cargado en la ram del que puedes almacenar en disco? xDDD
En línea

[Zero]
Wiki

Desconectado Desconectado

Mensajes: 1.082


CALL DWORD PTR DS:[0]


Ver Perfil WWW
Re: VirtualSize mayor que RawSize??
« Respuesta #3 en: 10 Mayo 2009, 02:37 am »

Pos yo siempre había entendido que el VirtualSize tiene que ser mayor o igual que el RawSize. Si sobra VirtualSize, el sobrante se rellena de 0's al cargarse en memoria . Lo que no creo que se pueda es menor, entonces no cogería el código en memoria   :P.

Saludos

PD: Es más, los redondeos que hacen los compiladores siempre redondean más largo el VirtualSize que el RawSize.
« Última modificación: 10 Mayo 2009, 02:39 am por Hacker_Zero » En línea


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


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: VirtualSize mayor que RawSize??
« Respuesta #4 en: 10 Mayo 2009, 02:41 am »

ya, si se que no tiene logica lo de ese programa.

Pon la descarga de un exe, uno que este como deberia ser y otro como te dice el programa que tiene que ser. y asi miro la diferencia

Saludos

edit:
Cita de:  Hacker_Zero
Pos yo siempre había entendido que el VirtualSize tiene que ser mayor o igual que el RawSize. Si sobra VirtualSize, el sobrante se rellena de 0's al cargarse en memoria . Lo que no creo que se pueda es menor, entonces no cogería el código en memoria

Yo cuando miro un exe la virtualsize es donde acaban los datos y empiezan los zeros.
y la RawSize donde empieza la siguiente
« Última modificación: 10 Mayo 2009, 02:44 am por Arcangel_0x7C5 » En línea

bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: VirtualSize mayor que RawSize??
« Respuesta #5 en: 10 Mayo 2009, 03:05 am »

la raw size tendria que ser el tamaño real (de codigo en bytes) que contiene la sección, y la virtual una vez alineada y tendria que ser superior a la raw size por el tema de redondeos.
En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: VirtualSize mayor que RawSize??
« Respuesta #6 en: 10 Mayo 2009, 03:07 am »

Esto es un exe compilado con VC++, las dos primeras secciones son del compilador, la última se la he añadido con el stud pe:

Si el VirtualSize es menor me dice que aplicación Win32 no válida, lo cachondo del asunto es que si le añado una sección con un código mío (que por defecto deja el virtual size a cero)
http://e0n-productions.blogspot.com/2008/10/aadiendo-una-seccin-un-ejecutable.html

Luego puedo aumentar el VirtualSize, pero siempre menor al RawSize, podéis probarlo :P Y bueno, ya como gran colofón si amplio una sección a mano el VirtualSize tengo que dejarlo mayor para que funcione....

En fin, alguna explicación? xDDD



Te me has adelantado ctlon:
Citar
la raw size tendria que ser el tamaño real (de codigo en bytes) que contiene la sección, y la virtual una vez alineada y tendria que ser superior a la raw size por el tema de redondeos.

No se supone que es siempre al revés??? Las dos primeras secciones de la foto desde luego lo respetan y las ha añadido el compilador...
« Última modificación: 10 Mayo 2009, 03:09 am por E0N » En línea

Arkangel_0x7C5


Desconectado Desconectado

Mensajes: 361



Ver Perfil
Re: VirtualSize mayor que RawSize??
« Respuesta #7 en: 10 Mayo 2009, 03:21 am »

misterios del win. xD

La añadida es la ultima o algo asi?

Saludos

PD:Yo prefiero poder comparar las diferencias y hacerle pruebas que ver imágenes
En línea

bizco


Desconectado Desconectado

Mensajes: 698


Ver Perfil
Re: VirtualSize mayor que RawSize??
« Respuesta #8 en: 10 Mayo 2009, 03:23 am »

si siempre te dice que necesita ser menor, a ver si el sizeofimage tendra algo que ver. prueba aumentandolo.
En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: VirtualSize mayor que RawSize??
« Respuesta #9 en: 10 Mayo 2009, 03:58 am »

Curioso, al hacer los dos exe's he caído en que sería buena idea usar la función "compara" (muy útil por cierto) y he visto la diferencia entre los dos, aquí los dejo tal cual:
http://rapidshare.com/files/231186043/exes.zip.html


Al hecho a mano le he añadido una sección de 0x1000 bytes (RawSize = 0x1000) al creado con el stud pe también le he puesto un RawSize = 0x1000 peeeero al ser el VirtualSize = 0x1001, es decir, mayor, aunque al exe le añade 0x1000 bytes el size of image es 0x1001 bytes mayor...

Creo que ya he entendido por que, a la hora de crear la nueva sección el program te da dos opciones, la primera es llenar la sección con ceros, y la segunda cargar la sección desde otro exe, al darle al rellenarla con ceros y leyendo la documentación oficial...
Citar
VirtualSize
The total size of the section when loaded into memory. If this value is greater than SizeOfRawData, the section is zero-padded. This field is valid only for executable images and should be set to zero for object files.

Todo arreglado xD Ahora si entiendo el por qué  ;D

En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines