en dnd lo encuentro, en remade? hackyashira? debe tener muchos pts para verlo?
este reto no tiene ninguna restriccion ni de puntuaje , ni resolver ningun reto anterior
esta libre.
que si tiene grandes beneficios , un correo de hackyashira.com con 10mb para empezar y 20 puntos que se agregan a tu cuenta de remade :D
suerte a todos
y esta en remade
pero no veo el reto, ya entre a remade y no veo el encriptado caotico :cry:
ya está en la sección de http://www.hackyashira.com/index.php?mode=RetosRemade&resp=userinfo&level=44
suerte
Hes Pescao q mas :) Oye mira lo que me tiene volando en este momento es esta linea.
Del Cifrado;
esa linea está pq en php no existe el tipo byte que toma un valor hexadecimal entre 00-FF(0-255) y si la suma es mayor a FF comienza desde el principio(por efecto de tratarse de un tipo byte). en otras palabras siempre toma valores entre 0-255(original).
y como lo adapaté para ke funcionara en php(no está el tipo byte) tuve que agregar esa línea para cuando la suma me dé mayora a 255 tenga el mismo efecto.
el funcioanmiento es correcto pq lo comprobé.
se llega al mismo resultado(pero diferente encriptación) aunque si se usa el del php se llega más rápido a la solución ;)
saludos
:P Ya lo Pase a C de todas maneras....Ahora Intento como seria entonces......
Salu2!!
al parecer eres el único haceindo el reto ya que nadie aparte de tí a preguntado acerca del reto o de alguna duda
Estamos en ello, lo que pasa es que llevo varios retos a la vez,...
Cuando me aburro de uno sigo con otro...
Yo lo estoy pasando a ensamblador y tengo algun problemilla con la FPU
en esta linea:
textoClaro[j] = (byte)( textoCifrado[j] + 256 - (int)(X*256) );
fld X ; real QWORD
fmul qwn256 ; real 256
frndint ; redondear
fistp Temp
lea ebx,szTextoClaro
mov edx,pTextoCifrado
movzx edx,byte ptr[edx+edi]
add edx,256
sub edx,Temp
mov [ebx+edi],dl
; edi --> J
aqui no me recoje el byte adecuado...
Saludos
Pues ya solucioné los problemillas con el copro y pase el codigo
a ensamblador...
Resulta que el algoritmo es sensible a la precision con que trabaja la FPU.
uff, hasta que me di cuenta del error...
El código en C# trabaja con precision de 53 bits. asi que cambié el valor del
control de la fpu para adaptarlo a 53 bits de precision y voilá, ya obtengo los mismos resultados en ensamblador.
El problema lo genera el siguiente bucle:
fld qword ptr[K_0_15+edi*8]
fld X
@@: fld1
fsub st,st(1) ; (1-X)
fmul st,st(1) ; * x ; for ( i=0; i<N; i++ )
fmul st,st(2) ; * k ; X = k*X*(1-X);
fstp st(1)
dec ecx
jnz @B
fstp X
...
En el que si hay muchas iteraciones, la precisión entra en juego...
Por supuesto el sistema funciona con más precision, siempre que tanto
el cifrador como el descifrador trabajen igual.
Ahora bien, el cifrador de la web, con que precision de calculo trabaja, porque clave que yo calcule puede ser correcta para una precision de
64 bits y no para la web...
en fin, que opinais del tema?.
la precisión te ayuda a deducir 1 cosa. y es muy importante esa presición al hacer el cálculos. y de hecho te tiene ke dar lo mismo. y por supuesto ya conoces la presicion ke usa la web pq ya tiene el código php.
weno dp ke te des cuenta con respecto a ese tema, te va a llevar a concluir 1 cosa.
en todo caso es importante tenerlo funcionado en cualquier lenguaje para ir entendiendo como funciona. y una vez que comprendas 100% bien el funcionamiento te vas a dar cuenta de la debilidad ke tiene.
dp te va a llevar un poco de tiempo elaborar el ataque que asegure llegar al resultado final( al menos a mi fué lo que mas me demoró aunque simpre supe cual era la debilidad me costó asegurar el ataque a una convergencia(clave)).
La precision de la web no la sé. o al menos no se como deducirla, La sabria si por
ejemplo supiese el resultado del siguiente bucle:
Yo conozco su debidilidad :P , pero me da mucha pereza hacer el programa que la use, ya que es un poco complejillo.
Cuando tenga un par de dias aburridos en el curro lo intento hacer.
He probado una version en Java, y con una clave conocida he echo una prueba y es mas lento que el caballo del malo, vamos que para una clave conocida tarda mas de 5 min.
Con el programa por fuerza bruta 256*256*5min=227 dias, :shock:
Creo que voy a buscar un metodo más corto. :lol:
no en java lo dejé pq era muy lento tb. el que me funcionaba mas rápido es el C# y el c++.
consideranto todo el tiempo que se demoró en terminar el reto "solamente trabajando el pc con el algorimo creado" me tardó mas o menos las primeras claves entre 1 a 2 horas y dp las siguientes mas o menos entre 2 y 3 min estimandos por cada una...
el tiempo total no lo conozco pq lo dejé trabando en la noche y cuando desperté ya había terminado (desde que partió con las claves de 2 min)
pero pienso que debe haber tardado en total unas 3 a 4 horas. mas menos 1 hora.
aunque no se obtienen las subclaves correlativamente.ya que se repiten a veces(teóricamente ya se debe saber cuando se vá a repetir y en que rato vas a obtener la última o penúltima) :;):
u.u, suerte q se algo de php xD, pero pasarlo a C o_O ya me kgaron :( xD
Vicio ya hace tiempo que no pasas un Reto :jana:
parece que te haz quedado estancado
quiero pasar el php a perl,, pero me caga el srand,, como puedo hacer un rand que funcione igual que el srand/rand del php??
se puede.
y para eso tiene que saber como funciona el sistema srand, para que sirve y como funciona.
es decir puedes hacer una imitación en esa funcion en cualquier lenguaje.
Yo probe a hacer un bruteforce suponiendo que las subclaves son todas distintas, con un texto de 16 caracteres... pero me dan un monton de posiblilades... y encima no se si a lo mejor con rand % 16 se repite alguna clave... la verdad no se que hacer. Saludos
architect
te vas a dar cuenta que lo estas resolviendo bien cuando en ese monton de posibilidades comiencen a converger a los mismos valores.
es decir vas a obtener una lista grande de posibilidades. pero en todas la subclave es la misma o a lo mas son 2 o 3 posibles para 1 subclave..
con respecto a si se repiten en el dear:rolleyes:o del ataque pues si se puede repetir y eso no lo conoces bien por lo que tendrías que intentar con un texto mucho mayor a 16.
ya que la funcion rand%16 te puede tirar la sucesion 5,4,3,2,5,1,4 etc...
por lo que ya tendrías que usar un texto mas largo. cuanto mas largo?
no lo sabes y vas a tener que asegurarte con un texto muy largo y ver cuando te aparece la última o penúltima subclave..
tb existe la posibilidad que en la clave real exista un termino repetido que tampoco lo sabes :P .
pero no sigas hasta la última subclave mientras las 2 o 3 primeras te converjan a unas pocas posibilidades. en todo caso el tiempo de ataque te va a permintir decidir si vas o no por buen camino
:;):
bueno, ahora hice el programa definitivo, que me va a decir cuales y en que orden estan las claves... en total va a tardar 5 dias suponiendo que Ns sea 255 (menos si es por ej. 103)... pero me fije en el random de boinasnegras (C#), y no tiene la misma debilidad que el de php (no la voy a decir xDxDxD), asi que el de boinasnegras no se como lo resolveria... la verdad podria hacer alguna func. como la que dijiste pescao, para que vea de todas las posibles soluciones los valores que se repiten, pero me da pereza... en vez de eso, hice que guarde en un archivo el progreso del brute por las dudas haya un corte de luz y tenga que empezar desde 0. Bueno, ya me canse de escribir. Saludos
architect
PD: cuando lo pase pescao, decime como era la forma mas corta
si es mejore ir guardando la ultima configuracion.
pero yo iva guardando las combinaciones validas en un archivo donde el primer archivo me guardaba la primera subclave.
luego pescaba ese archivo e iva leyendolo y gerenrando la segunda subclave válida para esa combinación.
aunque te falta otra variable a considerar aparte de Ns.
beuno mi esquema para el pirmer ataque era así
arhcivo 1(primera subclave)
xx xx xx
yy yy yy
....
archivo2(segunda subclave)
xx xx xx xx
yy yy yy yy
....
"ojo noes que se repitan los valores xx e yy" solo es la apariencia
para ahorrar memoria y luego lees ese archivo y generas otro.
de ese otro vuelves a generar un posterior etc.. hasta que aparezcan todas las subclaves.
aunque debería tardar menos de 5 horas
yo gereré cerca de 84 archivos pero apareció antes la última subclave no recuerdo en cual.
:P
Si el proceso tarda poco, yo tengo uno en Java que te las saca en 8 horas.
El problema es que me saca las claves que pongo yo, he probado con varias claves y me las encuentra todas, pero la del reto no hay manera, tengo algo mal en el código y no lo veo. :oops:
Tambien lo he pasado a C y tarda algo menos, pero sigo con el mismo problema.
Creo que lo voy a dejar unos días, por que es algo del código y ya me he dejado los ojos. Suerte
a diferencia de los lenguajes lo tuve cuando transformaba los tipos.
pq en c++ el typo byte es -127-128 en c# es 0-255 en java no recuerdo y en C creo que tb es 0-255.
pero el script lo puse de php lo puse para que trabajara 0-255.
en todo caso comprobé el script php con el que está en el original simulando la misma secuencia de eleción de subclaves hasta con un texto de longitud de 94 caracteres (en caso del script php 94 hexadecimales).
y me daba lo mismo.
ahora podrías verificar el código encriptando y desencriptando con tu code. para ver si esta corriendo bien la funcion o la clase.
saludos
:P
eso hice yo con una clave 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 y me funciono bien. Ns va 175 con la clave del reto... le hice un previo calculamiento de k e Yi en todos sus casos para que no lo tenga que hacer siempre, asi que ahora ya esta un poco mas del doble mas rapido
architect
PD: en c para que lo haga 0-255 al byte es "unsigned char"
Yo estoy trabajando en el original de Boinas Negras que es en Java y a mi me va muy bien Claro modificando unas Cuantas cosas pero eso si la clave me varia mucho ......Pescao sera mejor trabajarlo desde php? con la misma version que tu tienes instalado como para no joder tanto con el??
Salu2!!
Jaja, miren lo que encontre http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B6TVM-49WKG3X-1&_user=10&_handle=V-WA-A-W-A-MsSAYZA-UUA-U-AAAEAZWCZW-AAAZDVBBZW-AWBZZYDDE-A-U&_fmt=summary&_coverDate=12%2F08%2F2003&_rdoc=1&_orig=browse&_srch=%23toc%235538%232003%23996809996%23471090!&_cdi=5538&view=c&_acct=C000050221&_version=1&_urlVersion=0&_userid=10&md5=b51a2b57f48d4de5225b651f28cb7481&subset=y:
jejeje
Pescao los bytes en java van del -128 al 128, pero se pueden forzar para que vayan del 0 al 255, que es lo que hice para este reto, ya que debe funcionar igual que en php.
Mi problema creo que viene por la forma del ataque, ya que no es igual que el que estais realizado vosotros, yo he divido el ataque en dos pasos, uno inicial para sacar las dos variables principales del sistema (Proceso duro) y otro que sacaría las subclaves (Procesito que conociendo el valor incial de las variables, sacaría las subclaves en 10 minutos)
Mi problema viene con el primer paso, para claves introducidas por mi en el cifrador pasado a java o C, con un tratamiento entre 0 y 255, me encuentra las dos variables en pocas horas.
Si hago lo mismo con los textos generados en la página no me encuentra nada.
Tambien chequee la forma de ataque que utilizais vosotros, pero me tardaba demasiado, aunque no tube en cuenta la relacción que existe entre las dos variables, la cual es problable que baje bastante el tiempo de ejecución.
Estos dias tengo bastante trabajo, cuando lo acabe lo intentaré como vosotros, a ver si hay mas suerte.
si tambien las dividí en 2 partes.
primero hice un brute force a las dos variables en combinación con las primeras dos subclaves(en total un bruteforce de 4).
de allí en adelante ataqué de a 1 subclave. pq atacar de a 2 seguidas tardaba mucho.
pero no lo dije muy explicitamente para no confundir.
pero es má rápido como dices tú.pq demoró bastante en gererar ese archivo de 4.
es raro que no encuentre nada pq si generaste un archivo que tuviera todas las combinaciones de Ns y la otra variable. al tratar de encontrar la pirmera subclave debería encontrar varias soluciones.
luego para la segunda se reducen esas combinaciones hasta que convergen a 1 sola posibilidad de la segunda subclave. y así sucesivamente
"probé usando todas las combinaciones posibles 0-255"
Saludos
yo estoy tambien ustilizano esa forma con una clave conocida y parece funcionar.. trabaje con rangos ya que si intento con todas las posibilidades tardaria una semana, por eso estoy tratando de encontrar alguna relacion entre Ns y la otra variable (una relacion matematica), ya que es claro que si Ns vale N , la otra varieble no Vale ciertos valores y seria perder tiempo probarlos.
XDDDD si no usas todos los valores no vas a dar con las sublaves.
busca una manera de reducir el tiempo sin reducir el rango mayor.
No se por que os liais tanto, Veamos:
SumaClave = 0 ... 255
Para cada una de ellas, XorClave 0 ... 255
Se coloca en web 000000... como cifrado y se recoge el claro correspondiente.
Se coloca en web FFFFFF... como cifrado y se recoge el claro correspondiente.
Cuando se encuentre una combinacion que concuerde con el cifrado 0000..., se comprueba si tambien corresponde con el cifrado FFFF...,
bueno, esto se va haciendo byte a byte, haciendo las dos comprobaciones al mismo tiempo.
Yo hice el algoritmo en ensamblador, y tarda 5 minutos en darme la clave en bruto (para el peor de los casos) normalmente me da la clave en bruto en 2 o tres minutos.
Funciona con todas las claves que he probado, incluso con el de boinas negras
Pero en el de esta web, no hay manera...
He probado todos los modos en FPU
Redondeo:
- Al mas cercano par
- - Infinito
- + Infinito
- Truncar a cero
Control de infinito:
- Proyectivo
- Afinidad
Precision:
- 24 bits
- 53 bits
- 64 bits
En total 24 posibilidades
Por lo que me inclino a pensar que el código que se da en la web no
corresponda con el código real que hace los calculos en la web.
De todas formas, si alguien quiere que me envie:
Claro correspondiente a cifrado 0000... (1024 bytes)
Claro correspondiente a cifrado 5555... (1024 bytes)
Claro correspondiente a cifrado AAAA... (1024 bytes)
Claro correspondiente a cifrado FFFFF... (1024 bytes)
(No utilizar PHP) , y yo le doy la clave en bruto en 24h
Saludos
pues cuando empecé el reto dije que posian usar el de boinas o el de hackyashira. pq es la misma respuesta.
pues si sacaste el de boinas es lo mismo.
aunque insisto que el algoritmo de la web está bien pq lo comparé con el de boinas y rula bien.
es decir el puse la misma secuencia de subclaves que elije en boinas .
y me dá la misma encriptación tanto para encriptar y desencriptar.
de todas maneras lo voy a volver a revisar.
Prueba y veras que no se corresponden.
si intrduces 000000 como cifrado en boinas negras te da 25588F como claro.
No es asi en esta web.
pero si dices que es la misma respuesta, ya me queda poquito para
sacar el reto...
Pasado!!! :arre:
architect
okas.
en todo caso lo estuve revisando.
y en mi pc me rula bastante bien el script y lo ataco = que en boinas.
pero cuando lo subo me toma distintas encriptaciones a como funciona en mi server.
lo cual no me había dado cuenta. seguramente es por la version del php.
y la presicion con la que está configurada.
según lo que ví tiene una presición de 14 decimales(haceindo pruebas).
pero debería trabajar con 18 para ke se pueda atacar con cualquier lenguaje.
en mi servidor donde lo porgramé estaba con 18 decimales.
weno por el momento usen solo el de boinas hasta ke solucione el problema mientras averiguo como cambiar esa configuración y parlar con nuestro aupiciador para ver si lo pueden hacer.
pd:en el mismo enunciado dije que era la misma resp de boinas.
gracias
Manuel tiene razon, todo el problema de mi código venia por esto, según he puesto una entrada y salida de boinas en el código me ha sacado la clave en un par de horas.
Bueno por fin lo termine. :lol:
JO !! el de boinas lo tenia hecho hace un montón de tiempo (solo me quedaba el orden de los bytes y lo deje apartado.), no se como no me
percate de que era la misma solución, y lo pone bien claro en el enunciado.
pero en fin...
PASADOOOOOOOOOOO.
he encontrado la forma de hacerlo con el de boinas y lo he resulta con unas cuantas claves conocidas y funciona bien,, pero tengo un problema con el srand, no genera la misma secuencia mi c# (mono(en linux), msc), que el de boinas que supongo que sera el de microsoft, necesito alguna ayuda o alguna fuente de informacion sobre como crear una secuencia aleatoria determinada,, o sea, en la web de boinas esta para ver la srand que usa y puedo gener cualquier cantida de numeros,, o sea, tengo dos posibles soluciones, 1 - entrar a boinas y guardar 100 rand para 4080 valores de entrada de srand,, 2- intentar simular esa srand, me inclino mas por la segunda,, alguna manita please. ya quiero terminar este maldito reto.
el reto en boinas trae un genreador de secuencias para la funcion rand a partir de una semilla
Te iva a comentar eso, La funcion RND de C# es buena, pero en PHP supongo que cambia. yo hice un bucle con la suma de la clave como argumento para la función Random en C#.
Para corregir el problema, puedes sustituir la funcion RND en tu PHP, por un Array que contenga la secuencia de bytes (rnd) o sea:
$r = rand()%16; Esta linea eliminada.
Si, eso de sustituirlo por un array lo habia pensado,, el problema es que tengo entonces 4081 arrays de 100 bytes (por ejemplo) cada uno,, ya que la semilla de la la funcion Random varia de 0 a 4080, (suma de la clave), y para conseguir esos valores los tendria que generar desde la web de boinas ya que uso el mono c#, php no estoy usando, pero el problema es el mismo ya que en c# en linux no genera la misma secuencia que el c# de microsoft (el que usan en boinas),
No se como abras echo tu el programa, pero el que hice yo te saca la clave tal cual es,, pero ahora estoy penzando cambiar la cosa un poco y hacer 2 prutinas separadas, una que te de una clave con los valor repetidos y sin la ubicacion, para obtener el Ns y luego la otra para ordenarlos.
pues es que tendre que instalar el .net para poder resolverlo????,,
con el mono todo me funka muy bien,, ya he probado con muchas claves, claro,, encriptador con mono/desencriptador con mono,, ahora resulta que el mono y el .net aparte de queno generan los mismo valores aleatorios, parece que tampoco trabajan con la misma precicion en punto flotante.
Tendre que instalar el .net nomas, yo que lo queria esquivar.:_(,,
weno como dijimos correo a los 5 primeros en romper el reto.
architect
androm
Manuel
sarumah.
Felicitaciones :P .
Les voy a mandar un mp con la url y el pass. para entrar a su cuenta y tb el servidor smtp para configurarlo al outlook.
el que no quiera usar la cuenta por favor avisar.
:shock: ... ke bien felicitaciones... algún día llegaré a ese punto... :cry: porke en estos momentos ni put... idea.. jejeje :;):
si puedes :;): . es cosa de pensar bien cual es el objetivc del reto, además de entenderlo bien. y luego estudiar muy bien el funcionamiento del código.
No sé si te sirva saber que ayuda mucho entender el nombre del reto.
es decir estudiar a tu rival antes de enfrentarlo. :P
luego de eso recien probar estrategias de ataques.
bueno eso vá en cada uno.
Manuel dijo q en ASM lo saco en 5 minutos tonces para alla voy a ASM..:) Vamos a haber como me sale..
Salu2!!
Para mi gusto este es el reto más complejo que hay, y también el más divertido ya que necesitar adecuar un programa propio para romperlo. Y como se ha visto cada uno ha utilizado una estrategia para romperlo.
Sip,, fue un reto muy interesante, y como dice pescao , lo mas importante es estudiar muy bien el funionamiento del code,, luego cuando lo conozcas a la perfeccion su funcionamiento, intentar romperlo ya es cuestion de creatividad y una buena programacion..
Por mi parte lo resolvi en C# en 12 min. (clve bruta) y luego unos 2 minutos para conseguir la clave real..
XDDDDDD mi code lo dejé en c# 5 horas en total cuando lo rompí. dp lo optimicé para que lo sacara en 20 min la clave y 5 min la primera estapa(valores iniciales).
:P bueno eso en asm es cool 5 min es genial.
lo que pasa esque cuando descubres la debilidad, lo demás se reduce a dejar corriendo el programita hasta que lo saque solo. mientras ves televisión ya que en mi caso me dejaba sin RAM por lo que no podía trabajar en otra cosa
El mio depurado tardaba un par de horitas, y lo hacia en dos partes, aunque lo termine picando en Java, es que soy muy perro para utilizar C, y no te digo ASM.
:lol:
Bueno ya restablecí las cuentas de mail que se habían perdido tras la mantención del servidor.
los datos son los mismos que les envié anteriormente por mp.
no olividen cambiar su contraseña. y cualquier porblema que tengan con la cuenta , me mandan un mp para arreglarlo.
saludos
PXA..ta muy raro..incluso el decode..hay un parentesis.. de mas..jaja
creo que nunk lo hare..jaja
Estoy medio desorientado pero creo que voy encontrando la forma ;)
Saludos
todo el algoritmo parece Stream, utiliza un flujo continuo de datos, no divide en bloques, además, srand No es puramente aleatorio ¿verdad?