Accediendo a nueva seccíon

Iniciado por x64core, 21 Mayo 2012, 22:02 PM

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

x64core

hola a todos, bueno quería preguntar algo simple, que no tengo idea si sería lo correcto...
verán aprendí a agregar una sección a un ejecutable todo bien... ahora en el propio ejecutable quiero acceder a los datos
de la nueva sección  agregada, por ejemplo si la nueva sección la virtualadress estaría en 3000, como es la manera correcta para
acceder a esos datos?

estaria bien si quiero los primeros 10 bytes haciendo esto:

memcpy(miArray,3000,10); ???

tambien me pregunto si esto afectaria si el ejecutable tiene sección relocation...
tambien pense que quizas tendria que sacar la direccion relativa...
nose..

como sería lo correcto? gracias :)


fary

No es lo mismo la direccion física que la virtual, ten cuidado con eso.

Un byte a la izquierda.

x64core

pero que quieres decir...
la linea de memcpy sería en tiempo de ejecucion cuando el ejecutable esta en memoria, y tambien dije virtualadress :P

fary

Cita de: RHL en 21 Mayo 2012, 22:13 PM
pero que quieres decir...
la linea de memcpy sería en tiempo de ejecucion cuando el ejecutable esta en memoria, y tambien dije virtualadress :P

No puede ser que esa la direccion virtual sea 3000 xD, aparte para que quieres tener un puntero a la direccion virtual de la sección? no tiene sentido xD

Aun consiguiendo el puntero virtual a la secion que tu quieres, tendrías que estar en su espacio de memoria, sino tendrías un puntero a un lugar de tu proceso que sepa dios que haya...
Un byte a la izquierda.

x64core

jaja entonces como sería lo correcto para acceder a una nueva sección creada por mi? sacar la direccion relativa...?

fary

Pues colocandote en su direcicón física.

Un byte a la izquierda.

The Swash

Es aquí donde sirven o se emplean las direcciones virtuales. Solo que no contarás con una "referencia" o los conocidos nombres de variables. Si tu sección tiene permisos de lectura y escritura podrás trabajar de la nueva sección como tipo de datos.

Direcciones virtuales: ImageBase + Relative Virtual Address.

Un saludo (:

Eternal Idol

Base del ejecutable (no se relocalizan nunca que yo sepa) + virtual address.

Casi seguramente:
memcpy(miArray, 0x400000 + 0x3000, 10);
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

The Swash

@Eternal Idol, creo que hay un flag en la cabecera PE IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE más exáctamente. Se ve en ciertos casos, pero no vengo a luchar con vuestra experiencia.

En tal caso lo mejor sería la lectura del ImageBase desde la PEB no? Porque es obvio que si agrega una sección físicamente trabajará con shellcodes.

Un saludo.

Eternal Idol

#9
Ese flag es de DLL como su nombre lo indica y entiendo que estamos hablando de un ejecutable, es simple de comprobar poniendo la direccion base de la NTDLL por ejemplo. ¿Se relocaliza o el programa falla por completo? En fin, el ejecutable lo tiene el y sabra cual es su direccion y sus cabeceras PE ...

Por lo que yo entendi el esta modificando el binario asi que ya tiene que tener si o si en algun lado (como minimo en su mente) la base del ejecutable, el codigo llamando a memcpy (o lo que pueda) tendra que ser puesto en esa sección o en otra que este secuestrando. En cualquier caso es lo mismo: base + direccion relativa de la sección.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón