[Solucionado] Duda sobre analisis de PE en Ollydbg.

Iniciado por Drewermerc, 28 Junio 2016, 02:49 AM

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

Drewermerc

Hola a todos.
Estoy aprendiendo sobre el formato PE y estoy comprendiendo su estructura ayudandome de Ollydbg, pero me surgieron una dudas.

1. Cuando creo un archivo asm y lo ensamblo con fasm y lo abro con Ollydbg me muestra el siguiente la siguiente advertencia:
Module 'asm001'  has entry point  outside  the code ( as specified in the PE header). Maybe  this file is self-extracting or self-modifying. Please keep it in mind when settings breakpoints

Pero si abro ese mismo codigo ensamblado con masm32, no me muestra esa advertencia, aun que busque y lei que no es algo por lo que me tenga que preocuopar pero quisiera ver si se puede quitar la advertencia con codigo ensamblado en fasm

2. ¿las direcciones de memoria pueden cambiar?
Esto lo pregunto porque ayer esta tenia un valor de ImageBase=6F800000 y en la sección .data el valor de VirtualAdres=800000 y la suma de esto deberia ser la direccion real de la sección .data en Memory map en la columna de Address el valor era 6FC00000 lo cual si era correcta pero al abrir el Dump de la sección .data me debio de haber mostrado los valores de los dos strings que declare en el codigo de fasm, pero no fue asi y me moestraba caractere raros y no estaban los estrings declarados, o acaso no es asi?
Tambien si queria ver el Entry point sumando el ImageBase y el AddressOfEntryPoint no me daba la direccion real del Entry point, de este caso si no recuerdo los valores del AddressOfEntryPoint pero si recuerdo que no me daba.
Pero lo mas curioso es que el programa si se ejecutaba bien y pasaba lo mismo con el codigo ensamblado con masm32.
O ¿hay algunos factores que provoquen estos errores?
Hoy si ya obtengo todas las direccion correctamente y todo coincide hasta lo que he leido.

3. ¿Las direccion del ImageBase siempre sera la misma?
Esto lo pregunto porque cuando abro el programa ensamblado en fasm o en masm32.

El sistema donde estoy usando Ollydbg es windows 10 x64.

Espero haberme expresado correctamente y que se entendian bien mis dudas :D.
Saludo,
Drewermerc.

MCKSys Argentina

Voy por partes:

1) El mensaje de Olly sale cuando en EntryPoint está en una sección que Olly no reconoce como de código (fuera de la sección .text/.code/etc.) Si quieres solucionar eso, haz que el EP esté dentro de la sección que Olly reconoce como de código (normalmente la primera después del PE Header).

2) Si compilas un ejecutable con ASLR (randomización), se compotará como si fuera una DLL cuya dirección base está ocupada. En los OS nuevos, si el ejecutable lo soporta, el mismo será rebaseado, por lo que el valor de la ImageBase no será el mismo que el real. Esto es así porque el sistema lo fuerza por cuestiones de seguridad (ASLR es una medida de seguridad para evitar exploits). Si quieres sacar la base actual usa GetModuleHandle(NULL) y te dará la base del exe (ojo, del exe, no de DLL's).

3) La dirección del campo ImageBase la puedes cambiar al valor que quieras (normalmente es 0x400000). Si compilas con ASLR, la dirección cambiará en runtime. Si no lo haces, usará la del header (busca la documentación de tu ensamblador para saber cómo cambiar el valor).

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Drewermerc

Hola MCKSys Argentina.

Gracias por responder.
Ya me quedaron aclaradas mis dudas.

Saludos,
Drewermerc