Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: x64core en 21 Mayo 2012, 22:02 pm



Título: Accediendo a nueva seccíon
Publicado por: x64core en 21 Mayo 2012, 22:02 pm
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 :)



Título: Re: Accediendo a nueva seccíon
Publicado por: fary en 21 Mayo 2012, 22:11 pm
No es lo mismo la direccion física que la virtual, ten cuidado con eso.



Título: Re: Accediendo a nueva seccíon
Publicado por: x64core 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


Título: Re: Accediendo a nueva seccíon
Publicado por: fary en 21 Mayo 2012, 22:19 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...


Título: Re: Accediendo a nueva seccíon
Publicado por: x64core en 21 Mayo 2012, 22:24 pm
jaja entonces como sería lo correcto para acceder a una nueva sección creada por mi? sacar la direccion relativa...?


Título: Re: Accediendo a nueva seccíon
Publicado por: fary en 22 Mayo 2012, 12:52 pm
Pues colocandote en su direcicón física.



Título: Re: Accediendo a nueva seccíon
Publicado por: The Swash en 22 Mayo 2012, 13:21 pm
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 (:


Título: Re: Accediendo a nueva seccíon
Publicado por: Eternal Idol en 22 Mayo 2012, 13:25 pm
Base del ejecutable (no se relocalizan nunca que yo sepa) + virtual address.

Casi seguramente:
memcpy(miArray, 0x400000 + 0x3000, 10);


Título: Re: Accediendo a nueva seccíon
Publicado por: The Swash en 22 Mayo 2012, 14:29 pm
@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.


Título: Re: Accediendo a nueva seccíon
Publicado por: Eternal Idol en 22 Mayo 2012, 14:35 pm
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.


Título: Re: Accediendo a nueva seccíon
Publicado por: The Swash en 22 Mayo 2012, 14:44 pm
Digamos que lo mencionaba porque de que hay ejecutables usando esa flag, los hay! Generalmente funciona cuando está activo el ASLR, y vamos para tratar de protegerse un poquito de los exploits. Ahora que el ejecutable no falle dependería de si tiene o no tabla de reubicaciones.

Citar
(como minimo en su mente)
Vaya que te pasaste, como mola :)

Un saludo.


Título: Re: Accediendo a nueva seccíon
Publicado por: Eternal Idol en 22 Mayo 2012, 14:51 pm
Ya veo, ese flag es el que habilita el ASLR (y asi el enlazador crea la sección .reloc) para el PE y funciona en Windows >= Vista. Igual sigue siendo la misma logica, aunque cambie el valor mismo de la base siempre hay que usarla (aunque a veces no sera la base del PE).


Título: Re: Accediendo a nueva seccíon
Publicado por: The Swash en 22 Mayo 2012, 15:01 pm
Y bueno precisamente a eso me refería, y por ahí dicen "Mejor la seguridad que la policía". Siempre hay que tratar de andar prevenido y creo que acceder a la PEB garantizaría tener la ImageBase del ejecutable, pero es cierto que en algún lado deberá guardar el RVA de la misma.

Un saludo!


Título: Re: Accediendo a nueva seccíon
Publicado por: Eternal Idol en 22 Mayo 2012, 15:26 pm
Si, ImageBaseAddress, que no siempre sera la ImageBase del PE.