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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Localizar entrypoint en un editor hexadecimal
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Localizar entrypoint en un editor hexadecimal  (Leído 3,169 veces)
SheKeL_C$


Desconectado Desconectado

Mensajes: 549


_-=[Sh3K3L_C$]=-_


Ver Perfil
Localizar entrypoint en un editor hexadecimal
« en: 22 Junio 2015, 21:57 pm »

Estoy haciendo un programa para modificar el entrypoint de otro, esto es lo que hago:

Voy a 0x3c contando desde el inicio y alli recojo la direccion de la cabezera a la cual le sumo 0x28 y me da el entrypoint en mi caso es [74 2E 00 00].

Si le abro con el ollydbg me daria la direccion: entrypoint + ImageBase = 74 2E 40 00.

Hasta aqui todo correcto.

Lo que quiero es obtener la direccion del entrypoint en un editor hexadecimal. Lo he localizado en el offset 0x2274..

Si hago la diferencia entre el entrypoint  (0x2E74) y la localizacion en el editor (0x2274) me da 0xC00..

De donde sale ese dato??

Como puedo posicionarme en un archivo al abrirlo en la direccion fisica (real) donde empezaria el programa?
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.524


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Localizar entrypoint en un editor hexadecimal
« Respuesta #1 en: 22 Junio 2015, 23:23 pm »

Hola!

El problema que tienes radica en la diferencia que existe entre un ejecutable cargado en memoria y en disco.
Para determinar el offset en el archivo a partir de un RVA:

1) Determina la sección a la que apunta el RVA (en este caso debería ser la sección de codigo: .text, .CODE, etc.)
2) Réstale el RVA de la sección.
3) Súmale el offset de la sección en el archivo.

Saludos!
« Última modificación: 23 Junio 2015, 19:55 pm por MCKSys Argentina » En línea

MCKSys Argentina

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

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Localizar entrypoint en un editor hexadecimal
« Respuesta #2 en: 23 Junio 2015, 19:30 pm »

Si hago la diferencia entre el entrypoint  (0x2E74) y la localizacion en el editor (0x2274) me da 0xC00..

De donde sale ese dato??
La RVA de la sección del punto de entrada ( IMAGE_SECTION_HEADER.VirtualAddress ) menos el tamaño de las cabeceras ( IMAGE_OPTIONAL_HEADER.SizeofHeaders ).

Como puedo posicionarme en un archivo al abrirlo en la direccion fisica (real) donde empezaria el programa?
Muchos programas, uno simple es PEID:
Código:
https://tuts4you.com/download.php?view.398
al cargarlo muestra "File Offset", copiarlo y saltar a ese offset con el editor hexadecimal, ahi se debe de encontrar la primera instruccion.

MCKSys Argentina, Si es mediante código entonces seria trasladar un RVA a offset, el campo en IMAGE_OPTIONAL_HEADE.AddressOfEntryPoint es una valor relativo a la direccion base no un offset:

Código:
// VC++
ULONG RVAToOffset(
    _Out_ PDWORD OffsetPtr,
    _In_ PIMAGE_NT_HEADERS NT,
    _In_ DWORD RVA
    )
{
    PIMAGE_SECTION_HEADER Img;
    DWORD Limit;
    DWORD Offset;

    Offset = RVA;
    Img = IMAGE_FIRST_SECTION(NT);

    if (RVA < Img[0].PointerToRawData)
    {
        *OffsetPtr = Offset;
        return 0;
    }

    for (WORD i = 0; i < NT->FileHeader.NumberOfSections; i++)
    {
        if (Img[i].SizeOfRawData)
        {
            Limit = Img[i].SizeOfRawData;
        }
        else
        {
            Limit = Img[i].Misc.VirtualSize;
        }

        if (RVA >= Img[i].VirtualAddress &&
            RVA < (Img[i].VirtualAddress + Limit))
        {
            if (Img[i].PointerToRawData &&
                Img[i].SizeOfRawData)
            {
                Offset -= Img[i].VirtualAddress;
                Offset += Img[i].PointerToRawData;
                *OffsetPtr = Offset;

                return 0;
            }
        }
    }

    return 1;
}
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.524


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Localizar entrypoint en un editor hexadecimal
« Respuesta #3 en: 23 Junio 2015, 19:58 pm »

MCKSys Argentina, Si es mediante código entonces seria trasladar un RVA a offset, el campo en IMAGE_OPTIONAL_HEADE.AddressOfEntryPoint es una valor relativo a la direccion base no un offset:

Recién me doy cuenta de que el ejemplo que puse era lo contrario: offset -> RVA.

De todas formas, las indicaciones están bien.  :P

Saludos!
En línea

MCKSys Argentina

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

karmany
Moderador
***
Desconectado Desconectado

Mensajes: 1.615


Sueñas que sueñas


Ver Perfil WWW
Re: Localizar entrypoint en un editor hexadecimal
« Respuesta #4 en: 26 Junio 2015, 19:28 pm »

Yo hice un programa hace años que calcula eso: la dirección virtual conociendo el offset o viceversa. Realmente te permite calcular los 3 tipos de direcciones que encontrarás:
Virtual Address, Relative Virtual Address y Offset
Tiene un pequeño archivo de ayuda y ahí explico cómo calcular a mano esos valores. Estoy convencido que puede serte útil.
http://foro.elhacker.net/ingenieria_inversa/file_location_calculator_v032_por_karmany-t262979.0.html

Además dispone de un potente editor hexadecimal.
« Última modificación: 26 Junio 2015, 19:31 pm por karmany » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA (editor hexadecimal)
Ingeniería Inversa
imperio 2 3,207 Último mensaje 4 Enero 2008, 18:37 pm
por karmany
Duda con editor hexadecimal
Programación Visual Basic
Crawe 3 3,102 Último mensaje 27 Enero 2012, 05:03 am
por Elemental Code
Editor Hexadecimal...???? ( Terminado y Resuelto :) )
Java
xoftfox 3 3,525 Último mensaje 30 Abril 2012, 00:22 am
por xoftfox
¿Editor hexadecimal en batch?
Scripting
Meine programmen 1 2,738 Último mensaje 2 Julio 2012, 23:41 pm
por zu-zu
se puede usar editor hexadecimal en vb6
Programación Visual Basic
asdexiva 9 3,725 Último mensaje 15 Enero 2013, 20:10 pm
por Danyfirex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines