Título: Cifrar variables o textos de forma sencilla. Publicado por: Meta en 29 Marzo 2018, 08:47 am Buenas gente:
Hice un ejemplo con este código. Código
Mirando el ejecutable en el editor hexadecimal. Si encuentra los valores de las variables como indica la captura. (https://social.msdn.microsoft.com/Forums/getfile/1245693) Uso Visual Studio 2017 Community. No quiero usar técnica de obfuscación, no se si esta versión la incluye. Quiero saber si existe la manera de camuflar esas variables. Mi idea era usar algo parecido a esto en XOR ^10 con otro programa que haré a parte. Código
El código de ejemplo de una variable tipo array desordenarlo. Luego copio y pego el resultado ya codificado en la variable que es el que estoy usando ahora. En este caso uso una variable tipo string. Tengo que hacer de alguna manera, al ejecutar el programa, lea las variables codificadas y las vuelva a poner bien para que se lea en cristiano, luego lo guarda en otra variable y Console.WriteLine lo muestra. Espero que se entienda lo que quiero decir o lo explico de otra manera. ¿Alguna ocurrencia? Saludos. Título: Re: Cifrar variables o textos de forma sencilla. Publicado por: Eleкtro en 29 Marzo 2018, 09:25 am Puedes usar la clase SecureString para asignar un string mediante el cifrado en un bloque de memoria no administrada, pero no se si esa solución se ajustará a las necesidades que tengas:
no se muy bien lo que quieres conseguir, y tampoco soy un experto en cifrado ni obfuscación avanzada, pero no veo que quieres conseguir mediante XOR para ocultar un string en el código IL... Yo creo que el compañero @KuBoX debe tener buena idea sobre estos temas, a ver si se deja ver por aquí... Saludos Título: Re: Cifrar variables o textos de forma sencilla. Publicado por: Meta en 29 Marzo 2018, 12:37 pm Hola:
Es exactamente lo que explicó nuestro amigo forero aquí, pero en vez de un array, un string que no se como se hace. https://foro.elhacker.net/net/modificar_el_array_de_byte-t462782.0.html;msg2102256#msg2102256 Saludos. Título: Re: Cifrar variables o textos de forma sencilla. Publicado por: srWhiteSkull en 29 Marzo 2018, 13:41 pm En dotnet más fácil todavía, tienes AES y RSA que son muy difíciles de hackear:
https://msdn.microsoft.com/en-us/library/system.security.cryptography.aes(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2 https://msdn.microsoft.com/es-es/library/system.security.cryptography.rijndaelmanaged(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2 https://msdn.microsoft.com/es-es/library/system.security.cryptography.asymmetricalgorithm(v=vs.110).aspx https://msdn.microsoft.com/es-es/library/system.security.cryptography.rsa(v=vs.110).aspx Título: Re: Cifrar variables o textos de forma sencilla. Publicado por: Meta en 29 Marzo 2018, 16:10 pm Gracias.
No quería tanto código, con una mini protección ya me vale. Si tengo un array, hago este código y me basta. Código
Solo tengo este string que dice: Código
Cuando usas el for (https://docs.microsoft.com/es-es/dotnet/csharp/language-reference/keywords/for) arriba otra vez que es un XOR ^10, con usar el mismo, vuelve los valores como estaba. Ahora la variable var1 en su interior lo transforma en "mjcgpow5yp4g0,xy43ph". Si vuelvo aplicar el for pero con la variable var1 igual a mjcgpow5yp4g0,xy43ph, al final dice "Esto es una prueba.". El for de arriba mira un array, pero en este caso es un string, en el cual no se que hacer para que funcione en un string. Ahí está mi problema. Saludos. Título: Re: Cifrar variables o textos de forma sencilla. Publicado por: Serapis en 30 Marzo 2018, 03:35 am En efecto es suficiente con XOR, para algo simple... pero no en la forma que haces.
Es preferible que uses una clave, que luego expandas hasta cierto tamaño... ese valor es el que usas para cifrar con XOR. Tu problema con la cadena se resume en un problema de falta de conocimientos del lenguaje. NET, dispone múltiples funciones de tratamiento de cadenas, alguna de ellas convierte una cadena en un array de bytes (busca GetBytes (creo recordar que en Codificacion)), algo más pobre sería tomar carácter a caracter y convertirlo a byte, pero sabiendo que son cadenas muy cortas (no tochos de 1Gb. por ejemplo) incluso es perfectamente válido... hasta 1Mb... o algo más será prácticamente inmediato... Un ejemplo en pseudocódigoVB... Código: array de bytes = Funcion Code(String ElTexto, String LaClave) ...por qué no?... usaremos de ejemplo, una de las 'contraseñas' más usadas en el planeta.... Array de Bytes cif() = Code(text1.text, "QWERTYUIOP") Text2.Text = Decode(cif, "QWERTYUIOP") Ni qué decir que la clave debe ser la misma en mabos casos... Si no te vale tener de vuelta un array de bytes, porque por ejemplo tienes que mostrarlo en una caja de texto, y muchos bytes no son imprimibles, pués lo pasas por una función a Base64 y listo... Text3.text = Convert.ToBase64String( Code(Text1.Text, "QWERTYUIOP")) Text2.Text = Decode(convert.FromBase64String(text3.text), "QWERTYUIOP") Título: Re: Cifrar variables o textos de forma sencilla. Publicado por: Meta en 30 Marzo 2018, 12:01 pm Buenas campeón:
Deja ver si capto lo que cuentas. Con el XOR ^10 me vale y solo quiero eso. Me da que usas la idea del Windows form y mi idea es en modo consola. Saludos. Título: Re: Cifrar variables o textos de forma sencilla. Publicado por: Serapis en 31 Marzo 2018, 04:29 am Deja ver si capto lo que cuentas. Con el XOR ^10 me vale y solo quiero eso. mmmm... a ver yo leí esto:...Me da que usas la idea del Windows form y mi idea es en modo consola. Citar Mi idea era usar algo parecido a esto en XOR ^10 con otro programa que haré aparte. Es decir, yo entiendo/interpreto que usas ese programa/librería aparte (B)... 1 - Primero para cifrar lo deseado y guardarlo en el ejecutable (A)... 2 - Luego cuando se carga esté 'A', invocar a 'B' para decodificarlo. Yo veo que cumple perfectamente lo que quieres... (aunque tienes que adaptarlo, es solo un simple ejemplo) De todos modos, yo ni siquiera usaría un programa/librería aparte, simplemente crearía un par de métodos de extensión, para la clase String (Code, Decode haciendo justo lo que señalo más Título: Re: Cifrar variables o textos de forma sencilla. Publicado por: Serapis en 31 Marzo 2018, 16:13 pm ...y bueno, aprovechando que es sábado y Semana Santa y que por ello tengo un poco de tiempo libre...
No acostumbro a poner código, creo que todo el que reclama algo tiene que entender lo que sele dice y poner de su parte, pero bueno... Tampoco es plan que pongan en duda, lo que uno dice, porque (al menos yo) lo que uno dice debe decirlo con conocimiento, si no es mejor callarse, ó ante la duda preguntar... El código parte de las líneas que tienes tú, yo simplemente he añadido la extensión de los métodos para los que te señalaba más arriba, corrigiendo en efecto, los pequeños detalles que se escapan cuando escribes al vuelo la idea... esto es, funciona perfectamente. Código
NOTAS: A --- Yo tengo el VS-2010, puede que para una versión más actual, pueda requerir algún cambio, el propio entorno, ya te sugerirá si algo es obsoleto o incluso si no lo reconoce.... por ejemplo los métodos Getbytes, GetString, podrían estar desplazados respecto de UTF8. B --- Nunca ha manejado una versión 'Comunity', solo versiones Enterprise y Profesional, por lo que ignoro las limitaciones de las versiones Comunity, supongo que para algo tan sencillo, no deba afectarle. C --- Fíjate en el detalle de importar el namespace, concretamente en la línea: using CustomExtensions; D --- Al final me he mantenido firme (al pseudocódigo que puse) y he dejado el cifrado con XOR, aparte de codificar con Base64. E --- Para probarlo y entenderlo bien, ejecútalo paso a paso (tecla F11). F --- He añadido bastante 'verbosidad', en main, para reflejar el uso de los métodos Code y Decode. G --- p.d.: Personalmente acostumbro a abrir las llaves en la línea previa, por lo que no estando acostumbrado pueda dar la impresión de que 'falta algo'... cuestión de gustos, solamente... H --- ...y por supuesto y para aclarar tus dudas: Es una aplicaicón de consola, la frase tuya: Me da que usas la idea del Windows form y mi idea es en modo consola.[/i] es irrelevante, aunque yo pusiera en el ejemplo referencias a unos controles textbox, el pseudocódigo es adaptable a ambas situaciones... I --- Para algo más elegante, incluso la clave (QWERTYUIOP), podría estar cifrada (y ser descifrada, por ejemplo con el nombre del programa, con lo que si alguien lo cambia, 'traducirá' a urliburli), o bien ser pasada como un argumento al programa. Título: Re: Cifrar variables o textos de forma sencilla. Publicado por: Meta en 1 Abril 2018, 04:36 am Buenas:
Lo he probado. Funciona de maravilla. ;-) Tarda mucho en darle F11 todo el rato, pero se entiende. ;) Lo que quería hacer era más sencillo, menos protección pero sencillo. Programa A, el original, programa B el que hace el XOR ^10. Los dos hacen XOR ^10. El tipo de varibale como ejemplo es el Byte[]. Código
Usamos el XOR ^10. Código
El problema que tengo ahora, es que no uso Byte[], sino string. Por eso estoy para arriba y para abajo. En vez de usar como ejemplo de arriba que puse Byte[], pongo un string en cristiano. No en códigos hexadecimales. ¿Hay alguna solución sobre lo que busco? Salu2. ;) Título: Re: Cifrar variables o textos de forma sencilla. Publicado por: Serapis en 1 Abril 2018, 16:47 pm Algunas cosas...
1 - Usando el sistema de cifrar usando XOR con un único valor (10 en ese caso), es relativamente sencillo descubrir el sistema. Si en cambio cada carácter en origen se cifra con un valor distinto, no sirve de nada un análisis de frecuencia... Considera cifrar esta palabra: matematicas tiene 3 'a', y dos veces se repite 'mat': 'mat' 'e' 'mat' 'i' 'cas'. matematicas (con XOR 10) = gk~ogk~ciky 'gk~' 'o' 'gk~' 'c' 'iky' matematicas (con XOR ??) = "PTIzNjs3Jy4wYXM=" siendo ?? resultado de la clave "QWERTYUIOP" matematicas (con XOR ??) = "DgAZDAMAGh0GQR0=" siendo ?? resultado de la clave "caminante no hay camino" Como puedes ver en los 2 últimos ejemplos que no usan XOR 10, no hay correspondencia entre caracteres en la salida con respecto de la entrada... que haya dos veces 'mat', o 3 veces una 'a'... no guarda relación con el resultado en la salida. Más aún imaginemos que el texto a cifrar es algo más extenso: "las matematicas son muy utiles" "las matematicas con muy utiles" (con XOR 10) = "fky*gk~ogk~ciky*yed*gs*~cfoy" Como se ve, la subcadena 'matematicas' se localiza dentro de este nuevo resultado, : "gk~ogk~ciky" y s elocaliza porque cada carácter a la entrada arroja siempre el mismo resultado a la salida, hay una correspondecia bidireccional muy tangible... "las matematicas son muy utiles" (con XOR ??) = "RFRaDVxQWUxYYXRcSkxCEV5GWyFtPjJ0Li89Jy5z" siendo ?? resultado de la clave "QWERTYUIOP", como se aprecia, no se puede localizar correspondencia con la subcadena de 'matematicas' anteriormente cifrada a "PTIzNjs3Jy4wYXM=" no aparece como subcadena dentro de un texto mayor que subcontenga al previo... Nota que también existe una correspondecia bidireccional (si no no se podría decodificar), pero es intangible. En cuanto cambia el tamaño de la entrada o cambia la clave, el resultaod es totalmente distinto. 2 - Con tu método, al operar con: 'n XOR 10', puede dejarte algunos caracteres no imprimibles... Recuerda que XOR, se comporta como una suma o una resta, dependiendo de los operandos... deja el bit a 1, cuando el número de bits a 1 (en la misma posición) de los operandos es impar, y en otro caso lo deja a 0. Para ver claramente lo que te digo prueba esto: Código: escribir en consola "Desde: 0 hasta: 15" Tendrás estas conversiones válidas con 'n XOR 10': desde: 31 hasta: 47 42, 43, 40, 41, 46, 47, 44, 45, 34, 35, 32, 33, 38, 39, 36, 37, desde: 47 hasta: 63 58, 59, 56, 57, 62, 63, 60, 61, 50, 51, 48, 49, 54, 55, 52, 53, desde: 63 hasta: 79 74, 75, 72, 73, 78, 79, 76, 77, 66, 67, 64, 65, 70, 71, 68, 69, desde: 79 hasta: 95 90, 91, 88, 89, 94, 95, 92, 93, 82, 83, 80, 81, 86, 87, 84, 85, desde: 95 hasta: 111 106, 107, 104, 105, 110, 111, 108, 109, 98, 99, 96, 97, 102, 103, 100, 101, desde: 111 hasta: 127 122, 123, 120, 121, 126, 127, 124, 125, 114, 115, 112, 113, 118, 119, 116, 117, 3 - Al margen de eso, cifrar como quieres se trata simplemente de obtener un array de bytes (o chars), con los que poder operar partiendo de la matriz, y luego tras el resultado volver a convertir a string de nuevo. Código
4 - Aunque uses esto de XOR 10, te sugiero que lo metas en una función, y lo pongas como una extensión de método para la clase String, como te indicaba más arriba, así tu antes conviertes los textos deseados, los guardas en un fichero, luego los pegas a tu programa, y luego ya modificas de forma definitiva el programa y en 'main', ´simplemente llamarías al método 'decode', por cada variable, que tengas cifrada: por ejemplo: Código El contenido de esa función es básicamente las líneas recién adjuntas... 's', sería el parámetro de entrada y 'r' sería un return. Título: Re: Cifrar variables o textos de forma sencilla. Publicado por: Meta en 1 Abril 2018, 20:22 pm Buenas compañero:
Pedazo de explicación con ejemplso incluido. ;-) Digno de ser admirado. Voy a intentar pasarlo a C# lo que haz contado, un ejemplo sencillo para que nos entendamos y se entienda. Buen trabajo. |