Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: BloodSharp en 24 Septiembre 2014, 17:12 pm



Título: [Duda]Como resuelve el PE Loader direcciones de memoria en secciones ejecutables
Publicado por: BloodSharp en 24 Septiembre 2014, 17:12 pm
Buenas, últimamente estoy haciendo un proyecto para ofuscar código de algunas rutinas que programo, por ejemplo:

Código
  1. int sumar(int a,int b)
  2. {
  3. int iRetVal;
  4. BeginEncryption();
  5. iRetVal=a+b;
  6. EndEncryption();
  7. return iRetVal;
  8. }

Donde el código entre BeginEncryption y EndEncryption está cifrado (por un programa externo que he creado que utilizo para cifrar y que encuentra esas 2 funciones) y en tiempo de ejecución se descifra para ejecutarse y vuelve a cifrarse cuando se termina de ejecutar. El problema surge cuando intento llamar a direcciones de memoria y/o funciones importadas dentro del código cifrado, por ejemplo:

Código
  1. char *szHola="Hola";
  2. void imprimiralgo()
  3. {
  4. BeginEncryption();
  5. printf("%s",szHola);
  6. EndEncryption();
  7. }

Mi duda entonces sería como resuelve el PE Loader las direcciones de memoria (ejemplo : push dirección / call[dirección] / mov registro,dirección)en las secciones ejecutables, dado a que estuve buscando información y todavía no logré encontrar. Lo prioritario sería saber como el Loader de Windows arregla en esas secciones ejecutables las direcciones de memoria, así para yo cuando llame a las rutinas de cifrado las pueda arreglar manualmente, las funciones importadas por el momento no son prioritarias debido a que puedo llamarlas de otra manera dentro del código cifrado aunque lo ideal sería también saber como las carga para arreglar ese código también.

Si alguien que sepa y pueda brindarme información respecto a esto se lo agradecería mucho...


B#


Título: Re: [Duda]Como resuelve el PE Loader direcciones de memoria en secciones ejecutables
Publicado por: MCKSys Argentina en 24 Septiembre 2014, 18:34 pm
Hola!

Si tu exe esta programado con ASLR, estonces es casi una DLL, por lo que tendrá informacion de relocacion. Esta info la usa el loader de windows para que todos los valores que hacen referencia a secciones del exe, tengan el valor correcto.

Aqui (http://www.cultdeadcow.com/tools/pewrap.html) tienes un poco de info que te aclará algunas dudas.

Saludos!


Título: Re: [Duda]Como resuelve el PE Loader direcciones de memoria en secciones ejecutables
Publicado por: BloodSharp en 24 Septiembre 2014, 19:46 pm
Hola!

Si tu exe esta programado con ASLR, estonces es casi una DLL, por lo que tendrá informacion de relocacion. Esta info la usa el loader de windows para que todos los valores que hacen referencia a secciones del exe, tengan el valor correcto.

Aqui (http://www.cultdeadcow.com/tools/pewrap.html) tienes un poco de info que te aclará algunas dudas.

Saludos!

Sí, el ejecutable al parecer tenía la tabla .reloc (cosa que yo pensé que no tuviera el ejecutable) y buscando las opciones de visual studio le cambié la opción y se la quité y funcionó con las direcciones de memoria y los imports... ;D
De todas maneras voy a ver bien el tema de las relocaciones debido a que también me gustaría utilizar el cifrado de rutinas en dlls...


B#