¿Por qué cambia la dirección de PE ImageBase en la memoria?

Aug 17 2020

Estoy revirtiendo un ejecutable malicioso de Windows x86 de 32 bits. Revisando estáticamente los encabezados PE en Ghidra, veo que ImageBaseestá configurado 0x400000como se esperaba. Sin embargo, cuando el binario se carga en la memoria, el RVA inicial no coincide con el ImageBasedefinido en el archivo. Por ejemplo, he visto la dirección base en memoria configurada en 0x4B0000y 0x900000. Este comportamiento ocurre en una máquina virtual limpia y al depurar con Immunity y x32dbg, así como con IDA Free.

Tengo entendido que el cargador de Windows lee ImageBasey usa ese desplazamiento para comenzar a asignar secciones al espacio de direcciones virtuales. Debido a que el código del sistema maneja la carga y mi sistema está limpio en la primera ejecución, mi suposición es que lo inusual ImageBasees un síntoma de un matiz del cargador en lugar de una manipulación. Nunca me he encontrado con este escenario y agradecería cualquier información.

MD5: 1f63d04ee95ea041f2f6b1e818d94a7c

SHA1: 823ad6abb05f2393c44cf4b7f1d00e32ac04d1d1


ImageBaseestablecido en 0x400000al ver los encabezados PE en Ghidra:


ImageBaseen el encabezado PE asignado a la memoria ( 0x4B0000) no coincide con el ImageBaseconjunto en el archivo estático:


Secciones de PE mapeadas en la memoria con ImageBaseal0x4B0000

Respuestas

7 PawełŁukasik Aug 17 2020 at 12:44

Esta es solo una dirección preferida. Windows puede cargar el binario en casi cualquier dirección y volver a colocarlo en esta nueva ubicación.

ImageBase: la dirección preferida del primer byte de la imagen cuando se carga en la memoria; debe ser un múltiplo de 64 K. El valor predeterminado para los archivos DLL es 0x10000000. El valor predeterminado para los EXE de Windows CE es 0x00010000. El valor predeterminado para Windows NT, Windows 2000, Windows XP, Windows 95, Windows 98 y Windows Me es 0x00400000.

Fuente: MSDN