Autor
|
Tema: ¿Cómo sacar el algoritmo? (Leído 12,136 veces)
|
P44gl3
Desconectado
Mensajes: 6
|
Hola a todos! Estoy intentando descifrar un algoritmo de cifrado simétrico. Tengo los datos que introduzco y los datos que el algoritmo devuelve, y quiero saber si hay alguna forma de saber cómo funciona este algoritmo. Os escribo algunos ejemplos: CARÁCTER ASCII PASS cifrado d (1 n (v dd (l*n ddd (l*nN3 dn (l*x nn (v*x nnd (v*xN3 judio {f1'O4?)1! j (r jj (r*t jjj (r*tN9 jjjj {f*tfQL7 jjjjj {f*tfQL7Q< e (m f (n g (o h (p i (q k (s a (i aa (i*k aaa (i*kN0 aaaa ^@7xY;T6 aaaaa ^@7xY;T6Q3 aaaaaa ^@7xY;T6Q30q aaaaaaa ^@7xY;T6Q30qdF aaaaaaaa ^@7xY;T6Q30qdF6w aaaaaaaaa ^@7xY;T6Q30qdF6wxZ aaaaaaaaaa ^@7xY;T6Q30qdF6wxZ#d aaaaaaaaaaa ^@7xY;T6Q30qdF6wxZ#d^@ aaaaaaaaaaaa ^@7xY;T6Q30qdF6wxZ#d^@I+ aaaaaaaaaaaaa ^@7xY;T6Q30qdF6wxZ#d^@I+wY aaaaaaaaaaaaaa ^@7xY;T6Q30qdF6wxZ#d^@I+wYG) aaaaaaaaaaaaaaa ^@7xY;T6Q30qdF6wxZ#d^@I+wYG)6w aaaaaaaaaaaaaaaa ^@7xY;T6Q30qdF6wxZ#d^@I+wYG)6w$e aaaaaaaaaaaaaaaaa ^@7xY;T6Q30qdF6wxZ#d^@I+wYG)6w$eX: awwedffrtghhghyhju mOyq1)jPZ?nUN5K>(|u]]F_H>&.v]WE.^Izp Sé que a cada carácter le asigna dos caracteres, pero estos dos caracteres dependen de muchos factores, entre ellos, la posición del carácter con respecto a la cadena, el tamaño de la cadena e incluso (como se puede ver en los dos últimos que tienen la misma longitud y sin embargo el primer carácter, la "a", se cifra de forma distinta) los caracteres que forman la cadena... Quiero seguir investigándolo y sacar el algoritmo, pero ahora mismo estoy completamente stuck, y no sé qué puedo hacer para continuar. ¿Alguna idea? GRACIAS por adelantado para los que se preocupen en leer el mensaje y darme su opinión!!!!!!!
|
|
« Última modificación: 14 Abril 2011, 00:01 am por P44gl3 »
|
En línea
|
|
|
|
APOKLIPTICO
Desconectado
Mensajes: 3.871
Toys in the attic.
|
Mmh, bastante complejo. Bueno, por lo que veo, infiero que se hace alguna "suma" de todos los caracteres, que luego se aplica a cada uno de los caracteres. Por otro lado, veo que se utilizan todos caracteres legibles. Quizás puede llegar a ser algun tipo de cambio de base, como "base 64", pero lo que veo, es que hay relación entre caracteres. Probá lo siguiente: aaaajikeldiaopskdi aaajikeldiaopskdii
|
|
|
En línea
|
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore ASUS M4A89GTD-PRO/USB3 2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T) Seagate 500 Gb XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
|
|
|
zosemu
Desconectado
Mensajes: 39
|
A ver si entendí, lo que tienes en la tabla es el carácter en ASCII por una parte y en la otra el resultado del cifrado, el pass que usaste para cifrar esa información fue "cifrado", puedes poner otros resultados de las letras usando por ejemplo "0" y "1" para cifrar, o el programa te solicita que el pass de cifrado sea de determinada longitud, lo que puedo ver es que un carácter en determinada posición, es reemplazado por dos caracteres que estos no se alteran bajo determinadas circunstancias, es decir cuando la longitud de la cadena ocupa de 1 a 2 caracteres, cuando la longitud de la cadena es de tres ocurre algo bastante raro y luego cuando son mayores a eso se mantienen constantes otra vez, por lo que infiero que tal vez use algo de módulos, ojala puedas poner otras cadenas y el pass que usaste para cifrar.
SaluDoS!!
|
|
|
En línea
|
|
|
|
P44gl3
Desconectado
Mensajes: 6
|
Antes de nada, muchísimas gracias a APOKLIPTICO Y zosemu por haberos molestado en contestar. Muchísimas gracias!!! APOKLIPTICO: Sí, tiene que haber relación entre los caracteres, ya que se modifican según el tipo de los caracteres que hay delante y detrás. Estos son los cifrados de las dos cadenas que me has pedido: aaaajikeldiaopskdi ^@7xY;T6Q<0ydP6{xe#g^HI+wgG86*$oX=mW aaajikeldiaopskdii aC}_8yWB?)!lU;xe:~{eA#.}+{@4P<uZB,u_ ¿Podría saber porqué me has pedido esas cadenas? De nuevo, muchas gracias!!! Zosemu: Sí, a partir de tres caracteres se modifica todo. He hecho lo que tú me has comentado, he jugado con unos y ceros y ha salido algo bastaaaaante interesante 0 (8 1 (9 00 (8*: 01 (8*; 10 (9*: 11 (9*; 000 (8*:N^ 001 (8*:N_ 010 (8*;N^ 011 (8*;N_ 100 (9*:N^ 110 (9*;N^ 111 (9*;N_ 0000 ]mVf(81A 0001 hxIYbrz, 0010 gw)9J[AQ 0011 q"y*'8-> 0100 (8$5=MHX 0101 3Ct&x)3D 0110 2BSd_pXh 0111 <LFW<MCT 1000 CTo >N3C 1001 N_brx){- 1010 M^BR`qCS 1011 Wh5E=N.? 1100 k|=NTdIY 1101 v(0A1A5F 1111 3_pSdEV Es impresionante como se modifica absolutamente todo cuando pasa de 3 caracteres... Si te fijas, el 0100 es el único que mantiene el primer carácter igual que cuando eran menos de 3 caracteres "(8". MMMMmmmm... ¿Alguna idea de qué podría hacer ahora para seguir investigando y sacar más información? Y de nuevo, y no me cansaré de repetirlo, MUCHÍSIMAS GRACIAS POR AYUDARME.
|
|
|
En línea
|
|
|
|
P44gl3
Desconectado
Mensajes: 6
|
WOW! He seguido jugando con los ceros y los unos y ya he entendido bastante más cómo funciona este algoritmo!! Muchísimas gracias por vuestro valioso consejo!! Os explico:
Lo que sabía antes era que cada carácter en cada posición de la cadena, tiene dos caracteres asignados. Cuando el carácter aumenta (en valor ASCII), los dos caracteres correspondientes aumentaban de forma proporcional, por lo tanto tiene que haber una relación aritmética fácil de encontrar. El problema era cuando aumentábamos a 4 o más caracteres. Los dos caracteres que se le asignaban eran otros completamente distintos.
Esto son los datos que he conseguido al jugar con los ceros:
00000 ]mVf(81A^n 00001 ]mVf(81A^o 00010 hxIYbrz,<L 00011 hxIYbrz,<M 00100 gw)9J[AQ!1 00101 gw)9J[AQ!2 00110 q"y*'8->]m 00111 q"y*'8->]n 01000 (8$5=MHX?O 01001 (8$5=MHX?P 01010 3Ct&x)3D{, 01011 3Ct&x)3D{- 01100 2BSd_pXh`p 01101 2BSd_pXh`q 01110 <LFW<MCT?O 01111 <LFW<MCT?P 10000 CTo >N3C4D 10001 CTo >N3C4E 10010 N_brx){-p! 10011 N_brx){-p" 10100 M^BR`qCSUe 10101 M^BR`qCSUf 10110 Wh5E=N.?4D 10111 Wh5E=N.?4E 11000 k|=NTdIYs$ 11001 k|=NTdIYs% 11010 v(0A1A5FRb 11011 v(0A1A5FRc 11100 u'l}u'Yi6F 11101 u'l}u'Yi6G 11110 3_pSdEVr# 11111 3_pSdEVr$ 000000 ]mVf(81A^nCS 000001 ]mVf(81A^nCT 000010 ]mVf(81A^oCS 000011 ]mVf(81A^oCT 000100 hxIYbrz,<L#3 000101 hxIYbrz,<L#4 000110 hxIYbrz,<M#3 000111 hxIYbrz,<M#4 001000 gw)9J[AQ!1iy 001001 gw)9J[AQ!1iz 001010 gw)9J[AQ!2iy 001011 gw)9J[AQ!2iz 0000000 ]mVf(81A^nCS<L 0001000 hxIYbrz,<L#3:J 0010000 gw)9J[AQ!1iyN^ 00000000 ]mVf(81A^nCS<L#3 00010000 hxIYbrz,<L#3:J}. 00100000 gw)9J[AQ!1iyN^gw
Si observáis, la cadena cifrada sigue manteniendo ese aumento proporcional, pero se ve afectada POR LOS CUATRO PRIMEROS CARÁCTERES.
Ahora que sé cómo el algoritmo funciona de forma general, necesito saber cuál es la fórmula matemática que usa para asignar los dos caracteres a cada carácter. Necesito números!!! ¿Cómo podría pasar los caracteres a números para estudiar mejor la relación aritmética?
De nuevo, muchísimas gracias!! Ahora entiendo porqué APLOKÍPTICO me ha pedido las dos cadenas. Eran para ver cómo se transforma cambiando los 4 primeros caracteres, verdad? Qué máquina!! Y muchas gracias Zosemu por tu excelente idea. GRACIAS!!!!
(¿Alguna idea para que pueda pasar los caracteres a números y seguir trabajando? ^^ Graciasssss!!!)
|
|
|
En línea
|
|
|
|
APOKLIPTICO
Desconectado
Mensajes: 3.871
Toys in the attic.
|
Mirá, si te manejás bien con los números hexadecimales, usá el código ASCII de cada una de las letras para manejarte bien. Te recomiendo "Cryptool" para hacer manipulaciones de texto, o un editor hexadecimal como xvi32.
Suerte!!!
|
|
|
En línea
|
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore ASUS M4A89GTD-PRO/USB3 2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T) Seagate 500 Gb XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
|
|
|
zosemu
Desconectado
Mensajes: 39
|
Perdón por no contestar antes pero la diferencia de horarios entre continentes XD...
Bueno ya le eche un vistazo a tus resultados y de manera inicial se me ocurre lo siguiente lo voy a intentar explicar con el cero y el uno iniciales:
cadena = 0 si len(cadena) <= 1 x = asc(cadena) '48 Si x MOD 2 = 0 y1 = x -8 '40 y2 = x + 8 '56 si no y1 = x - 9 '40 y2 = x + 8 '57 fin si cifrado = car(y1) & car(y2) '(8
Para dos valores funciona exactamente igual pero en lugar de restar de manera simple le suma dos al valor del carácter en este caso 48 y luego realiza el mismo procedimiento para el valor uno y con la suma de dos para el siguiente valor, hay algo extraño con todo esto, pero ya hiciste que se despertara mi curiosidad puedes poner las siguientes cadenas:
000 111 0000 1111 a ab abc abcd a b c d e f g h i j k l m n o p q r s t u v w x y z : ; < = > ? @ A AA AAA AAAA AAAB Sigo con la sospecha de que se esta usando algún tipo de modulo aritmético para los valores superiores a cierto número teóricamente 64, pero por eso te pido esos valores.
SaluDoS!!
|
|
|
En línea
|
|
|
|
P44gl3
Desconectado
Mensajes: 6
|
Gracias APLOKIPTICO, pero, porqué mejor trabajar con hexadecimal que con decimal? Zosemu: Muchísimas gracias por haberte preocupado en sacar la fórmula, pero me temo, que no es correcta. El primer valor (y1) siempre es el mismo para todos los caracteres en esa posición. Así que creo que y1 tiene algo que ver con la posición del carácter y siempre es el mismo para todos los caracteres en esa posición (estoy hablando siempre de las cadenas de menos de 3 caracteres, como sabemos cuando son 4 o más, entran no cumplen esta regla) y "y2" sí que tiene relación aritmética con el valor en ASCII, que como muy bien has dicho, serían valor en ASCII-8 ó ASCII-9 dependiendo si es par o no. Te copio los cifrados devuelto al meter los valores que me has pedido: 000 (8*:N^ 111 (9*;N_ 0000 ]mVf(81A 1111 3_pSdEV a (i ab (i*l abc (i*lN2 abcd ]?= J.N3 a (i b (j c (k d (l e (m f (n g (o h (p i (q j (r k (s l (t m (u n (v o (w p (x q (y r (z s ({ t (| u (} v (~ w ( (Paréntesis y espacio) x (! y (" z (# : (B ; (C < (D = (E > (F ? (G @ (H A (i AA (i*k AAA (i*kN0 AAAA ^@7xY;T6 AAAB iK*k6w@# Gracias a esto, acabo de descubrir otra cosa: La contraseña no es casesensitive. Si te das cuenta A y a tiene el mismo cifrado. Otra cosa a tener en cuenta, no? También, se puede observar como y1 en el primer carácter es siempre (, y1 del segundo carácter es * y y1 del tercer carácter es N y no se modifica (hasta que llegamos al cuarto caracter ) jaja! Muchísimas gracias por tomaros la molestia y por orientarme en este mundillo que desconocía por completo y me estoy enganchando más y más. Gracias!! Un abrazo!
|
|
|
En línea
|
|
|
|
APOKLIPTICO
Desconectado
Mensajes: 3.871
Toys in the attic.
|
P44G3: El hexadecimal es mucho más cómodo para trabajar que el decimal, porque todos los valores se pueden expresar con dos caracteres. Por ejemplo, si uno quisiese expresar tres caracteres en decimal serían: 203 10 55 y los tendríamos que separar con un espacio, haciéndolo dificil para su lectura, en cambio, en hexadecimal: CD0A37. Y listo.
|
|
|
En línea
|
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore ASUS M4A89GTD-PRO/USB3 2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T) Seagate 500 Gb XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
|
|
|
zosemu
Desconectado
Mensajes: 39
|
Interesante algoritmo , según parece el primer carácter se trata de un carácter único y posicional dependiente de la longitud de la cadena y los valores de esta, ṕor ejemplo para cadenas de no más de tres caracteres son "( *" y "N" respectivamente, cuando el problema parece ser en las cadenas cuya longitud es múltiplo de 4, ahí es cuando parece descomponerse, luego se vuelven a ser las mismas, prueba para esas longitudes y veras que hasta las cadenas exactamente iguales cambian, por otra parte tienes razón seguramente esta convirtiendo a minúsculas los caracteres antes de pasar al cifrado. De acuerdo con esto la cantidad de caracteres ASCII imprimibles es de 94 (93 realmente pero usando el espacio ya son los 93), no creo que se estén usado todos así que lo mejor que se me ocurre es que para cifrar se use un algoritmo y para descifrar otro, el primero tiene como fin agregar ruido en donde realmente no existe, de esa manera lo hace parecer más complejo de lo que es pero para descifrar debe estar usando otro basado únicamente en los segundos caracteres, para probar esto podrías usar una cadena alterada de 5 o más caracteres por ejemplo intentar descifrar esto: O^DR>qESWf Suponiendo que el algoritmo use los valores del primer carácter y la posición de este a fin de poder llevar a cabo su función de descifrar el incremento de estos valores debería ser valido para el algoritmo y te daría un resultado que nos ayude a comprender la función empleada para el cifrado, pero por otra parte si solo se trata de ruido, el resultado deberá ser el mismo que para la cadena original: M^BR`qCSUf, en cuyo caso sería valida mi teoría del ruido. Por otra parte no creo que se estén usando los 94 caracteres imprimibles sino solo 92 o 72 de ellos, lo que nos debería de conducir al algoritmo al evaluar las posiciones los ciclos, por una parte los ciclos tendrían que ser de 18 o 23 (por aquello que ocurre con las longitudes múltiplos de 4); determinar la longitud de la cadena original no debería ser más complicado que aplicar módulos aritméticos a fin de saber cual es el carácter que debe ser usado, si probamos toda la cadena de caracteres del 32 (espacio) al 126 (~) tendríamos una idea más aproximada a la cantidad de caracteres que se están usando para el cifrado y de ahí también podríamos evaluar cuantos se usan realmente, aunque por ahora algo me dice que son 72 y todo los demás son módulos jeje, lo que nos regresa al detalle del primer carácter que de ser usado debe decirle al algoritmo la relación que existe entre nuestro modulo de 72 y el carácter original, a ver si me explico. SaluDoS!!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como sacar la animacionn del msn
Diseño Gráfico
|
gargo89
|
2
|
2,179
|
9 Agosto 2005, 18:25 pm
por xadap
|
|
|
como descubrir el algoritmo y crear un keygen
« 1 2 »
Ingeniería Inversa
|
greenvati
|
10
|
19,743
|
30 Septiembre 2010, 00:24 am
por MCKSys Argentina
|
|
|
algoritmo de ordenamiento¿como los uno en un menu principal?
Programación C/C++
|
chaarlyyyy
|
2
|
3,873
|
26 Mayo 2010, 23:13 pm
por @synthesize
|
|
|
¿Cómo se resuelve una integral con un algoritmo recursivo?
Programación General
|
--<<<@u6u$t0>>>--
|
3
|
7,400
|
11 Diciembre 2010, 20:31 pm
por do-while
|
|
|
Pregunta: Cómo sacar un algoritmo de creación de contraseñas
Ingeniería Inversa
|
BlackCircle
|
7
|
4,040
|
10 Septiembre 2015, 17:36 pm
por engel lex
|
|