Buenos días a tod@s :)

A ver si alguno puede echarme una mano, porque he estado buscando pero no encuentro nada concreto que me sirva...

El caso es que me gustaría poder "ofuscar" o que no sea "legible" a simple vista las "cadenas de caracteres"/"constantes" que defino en el código de mis aplicaciones a través de un editor hexadecimal...

He probado definiendo las cadenas en hexadecimal de forma escapada, ej.:

ASCII => HOLA MUNDO
HEX => \x48\x4f\x4c\x41\x20\x4d\x55\x4e\x44\x4f

pero aún así es totalmente legible a través del editor...

En fin, si alguno sabe como hacerlo de forma sencilla y me lo explica, se lo agradecería :)

Un saludo!
[ Lo importante no es el final, sino el camino recorrido ]
Haz una función simple como un xor mismamente, ofusca los strings con la función y en ejecución las recuperas pasándolas por la función, asi no se vera la cadena "legible" en el hex.

Saludos.
Todos los refranes deberían acabar en , patada en los cojones ...
Amigo, tenes muchas formas de hacerlo, te doy un ejemplo, espero ser claro ....

Vamos al siguiente code : (abajo explico)

Código: Seleccionar todo

void cadenaOfuscar(unsigned char micadena[], char opcion)
{
	
	unsigned char key[] = "ghjR%$GDFG%GDG657ythgF#GFH";
	int longkey = 26;
	int i =0, j=0;

	do
	{
		if (opcion == 'o')
			micadena[i] = micadena[i] + key[j];
		else
			micadena[i] = micadena[i] - key[j];

		i++; j++;
		if (j==longkey)
			j=0;	

	} while (micadena[i] !='\0');
}
Eso es una funcion que recibe como parametros una cadena de caracteres y un caracter adicional que indica si tengo que "ofuscar" o "deofuscar"

si recibo la 'o' ofusca la cadena recibida sumando a cada caracter un valor arbitrario que corresponde a una key que inventé para el caso... para que se entienda mejor , te muestro un ejemplo de como utilizar esta funcion:

Código: Seleccionar todo

int main ()
{

	unsigned char  cadena[] = "hola mundo";
        
        cadenaOfuscar(cadena, 'o');
	printf ("\n cadena ofuscada: %s \n", cadena);
        
        cadenaOfuscar(cadena, 'd');
	printf ("\n cadena deofuscada: %s \n", cadena);
	
}
Imagen


Ahi puedo ver los resultados de la funcion "CadenaOfuscar" con el "hola mundo"

Ahora bien, hasta ahi todo muy lindo, pero en hex vas a seguir viendo el "hola mundo" ya que hago la ofuscacion y deofuscacion dentro del mismo code
Entonces, deberia guardar en un archivo o "copiar a mano" la cadena ofuscada para evitar poner explicitamente el "hola mundo". Para este ejemplo lo voy a hacer a mano, para lo cual voy a agregar unas lineas al main para ver el codigo en hex y en decimal de cada caracter ofuscado:

Código: Seleccionar todo

int main ()
{
        unsigned char  cadena[] = "hola mundo";

	cadenaOfuscar(cadena, 'o');
	printf ("\n cadena ofuscada: %s \n", cadena);

	for (int i =0; cadena[i]!='\0'; i++)
	{
		printf ("\n byte: %d",i);
		printf ("... en hexa = %x", cadena[i]);
		printf ("... en decimal = %d", cadena [i]);
	}


	cadenaOfuscar(cadena, 'd');

	printf ("\n\n cadena deofuscada: %s \n\n", cadena);

}
ya tengo por pantalla los valores :

Imagen


Ahora debo reemplazar mi cadena en el main con los datos que tengo por consola, en este caso voy a poner los valores decimales ...

Código: Seleccionar todo

int  main()
{
    unsigned char cadenaOfuscada[] = {207,215,214,179,69,145,188,178,170,182,'\0'};
		
	cadenaOfuscar(cadenaOfuscada, 'd');
	
	printf ("\n\n cadena deofuscada: %s \n\n", cadenaOfuscada);
}
Imagen


y en hex ... ya no está visible el "hola mundo"

Espero haber sido claro ... (la proxima vez hago un tuto mejor explicado)

Salud
Imagen
Wolas!

Gracias a ambos por responder tan rápido :)
Y que decir osnaraus... bravo! y mil gracias por dedicar un 'pedacito' de tu tiempo a resolver mi duda! no podría estar mejor explicado :D

De nuevo gracias y... hasta luego! me voy a ponerlo en práctica!
Saludos!
[ Lo importante no es el final, sino el camino recorrido ]
Responder

Volver a “C/C++”