elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
26 Mayo 2012, 13:38  


Tema destacado: [AIO elhacker.NET] Compilación herramientas análisis y desinfección malware

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Desafíos - Wargames (Moderador: Kasswed)
| | | |-+  Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?  (Leído 3,668 veces)
Debci
Wiki

Desconectado Desconectado

Mensajes: 1.945


Actualizate o muere!


Ver Perfil WWW
Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« en: 30 Noviembre 2009, 22:29 »

Hola a todos los de elhacker.net, quiero proponeros un reto, que seais capaces de trazar y romper mi algoritmo de cifrado en java, puede que os sea facil o puede que no, he retorcido muchisimo el codigo, todo lo que he podido para que cueste mas de resolver, ahi va:

Código
public void cifra() {
String cadenaIntroducida = new String("Hola");
String Clave = new String("debci");
   String SubClave = Clave.substring(Clave.length() / 2);
String Subcadena = cadenaIntroducida.substring(cadenaIntroducida.length() / 2);
String SubClave1 = Clave.substring(0, (Clave.length() / 2));
String Subcadena1 = cadenaIntroducida.substring(0, (cadenaIntroducida.length() / 2));
SubClave1 = SubClave1.toLowerCase();
 
Subcadena1 = Subcadena1.toLowerCase();
int maximoValor = Clave.length() + cadenaIntroducida.length();
String mezclaBytesCadena[] = new String[maximoValor];
 
for(int i = 0; i < 3; i++){
   String claveVolatil = Clave.substring(i, (Clave.length() / 2)) + cadenaIntroducida.substring(i, (cadenaIntroducida.length() / 2));
mezclaBytesCadena[i] = claveVolatil;
 
}
String CadenaFinal = Subcadena + SubClave + (Subcadena1 + SubClave1) + mezclaBytesCadena[0] + mezclaBytesCadena[1] + mezclaBytesCadena[2];
CadenaFinal = CadenaFinal.toLowerCase();
System.out.println(CadenaFinal);
}
 
Y con las dos calves introducidas obetenemos como resultado lo siguiente:
Código:
labcihodedehoeo

Suerte a todos.

Saludos


En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 1.945


Actualizate o muere!


Ver Perfil WWW
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #1 en: 2 Diciembre 2009, 21:26 »

Nadie se atreve?

Saludos


En línea

LastDragon


Desconectado Desconectado

Mensajes: 847


Usuario Baneado (troll)


Ver Perfil WWW
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #2 en: 11 Enero 2010, 18:07 »

Nadie se atreve?

Saludos

Lee el codigo de openssl, reescribe el programa despues de lo aprendido del que te sugeri y cre oque a mas gente le va a interesar
En línea
raul338


Desconectado Desconectado

Mensajes: 2.370


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #3 en: 11 Enero 2010, 18:37 »

No entiendo bien lo que hace (a simple vista :P se puede usar eso en javascript?, no se java y no voy a bajar un IDE para eso solo)

lo ideal seria que no pongas el codigo, ya que se hace el paso inverso para desencriptarlo no? XD hubieras puesto asi

Cadena: Hola
Cadena enriptada: labcihodedehoeo

y de ahi ir poniendo pistas para que uno se rompa el coco  xD


Ahora una pregunta, si encriptas varias veces "hola", te sale siempre lo mismo? intenta hacer un algoritmo que siempre devuelva valores distintos y de ahi desencriptarlo :P
En línea

jdc


Desconectado Desconectado

Mensajes: 3.253


janito dos cuatro...


Ver Perfil WWW
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #4 en: 11 Enero 2010, 18:47 »

El problema al parecer es que puede llegar desde hola a labcihodedehoeo pero no desde labcihodedehoeo a hola xD

Osea es como si te mostrara como cifra algo a sha1 y te dijera que lo devolvieras xD
En línea

LastDragon


Desconectado Desconectado

Mensajes: 847


Usuario Baneado (troll)


Ver Perfil WWW
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #5 en: 11 Enero 2010, 20:03 »

El problema al parecer es que puede llegar desde hola a labcihodedehoeo pero no desde labcihodedehoeo a hola xD

Osea es como si te mostrara como cifra algo a sha1 y te dijera que lo devolvieras xD


Es encriptacionde una via, tipo Triple DES, de hecho.. ni siquiera DES, es version hiper ligera, bueno solo es una encriptacion de una via


Alguien dijo que era Java, yo creo que es C#


No he intentado entender el codigo pero se ve sencillo, debe ser posible reverir con la llave correcta, basicamente haciendolo a la inversa exactamente
« Última modificación: 11 Enero 2010, 20:05 por LastDragon » En línea
Novlucker
Ninja y
Ex-Staff
*
Desconectado Desconectado

Mensajes: 10.239


Yo que tu lo pienso dos veces


Ver Perfil
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #6 en: 11 Enero 2010, 20:14 »

Java .... C# por ejemplo no tiene toLowerCase(), en su lugar tiene ToLower(), pero eso no quita que son dos lenguajes terriblemente parecidos :P

labcihodedehoeo

Luego me fijo, pero por lo que veo con solo conocer la longitud del texto cifrado y la longitud de la contraseña se podría "descifrar", ya que por lo que veo solo corta y suma fragmentos de "texto" y "clave", no es poca cosa pero por fuerza bruta se podría ;D
« Última modificación: 11 Enero 2010, 20:16 por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
http://twitter.com/novlucker

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

raul338


Desconectado Desconectado

Mensajes: 2.370


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #7 en: 11 Enero 2010, 20:17 »

no tengo idea de java, asi que lo pase a C# y quedo asi
Código
public static string cifra(string cadenaIntroducida, string Clave) {
   string SubClave = Clave.Substring(Clave.Length / 2);
   string Subcadena = cadenaIntroducida.Substring(cadenaIntroducida.Length / 2);
   string SubClave1 = Clave.Substring(0, (Clave.Length / 2));
   string Subcadena1 = cadenaIntroducida.Substring(0, (cadenaIntroducida.Length / 2));
   SubClave1 = SubClave1.ToLower();
 
   Subcadena1 = Subcadena1.ToLower();
   int maximoValor = Clave.Length + cadenaIntroducida.Length;
   string[] mezclaBytesCadena = new string[maximoValor];
 
   for(int i = 0; i < 3; i++){
       string claveVolatil = Clave.Substring(i, (Clave.Length / 2)) +
           cadenaIntroducida.Substring(i, (cadenaIntroducida.Length / 2));
       mezclaBytesCadena[i] = claveVolatil;
 
   }
   string CadenaFinal = Subcadena + SubClave + (Subcadena1 + SubClave1) + mezclaBytesCadena[0] + mezclaBytesCadena[1] + mezclaBytesCadena[2];
   CadenaFinal = CadenaFinal.ToLower();
 
   return CadenaFinal;
}
 


La diferencia es que me devuelve
Código:
labcihodedehoebolbcla
y no
Código:
labcihodedehoeo
como puso ..::| D3Bć1 |::. :P
Pero es verdad, no se puede recomponer, descifrar, porque borras gran parte de lo que se cifra jeje

EDIT 1:
Advertencia - mientras estabas escribiendo, fueron publicadas 2 respuestas. Probablemente desees revisar tu mensaje.
:xD  Novlucker ya lo hizo xD

EDIT 2:
Código
string CadenaFinal = Subcadena + SubClave + (Subcadena1 + SubClave1) ....
 

Eso te dice como Novlucker logro sacarlo xD, en lugar de hacer todo lo que hiciste antes, si vas a hacer eso, rellena el resultado con letras basura, siguiendo un patron, y despues devuelves la cadena original =)

Código
int maximoValor = Clave.Length + cadenaIntroducida.Length;
string[] mezclaBytesCadena = new string[maximoValor];
 
Para que haces eso si solo vas a usar 3 valores? Que gran gasto de memoria :P
« Última modificación: 11 Enero 2010, 20:27 por raul338 » En línea

Kasswed
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.202


Andalucía


Ver Perfil
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #8 en: 11 Enero 2010, 20:23 »

A mí si me lo dais en C++ o python me pongo al lío, pero con Java no me apaño :-\
En línea

"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.
raul338


Desconectado Desconectado

Mensajes: 2.370


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #9 en: 11 Enero 2010, 20:48 »

Código
using System.Text.RegularExpressions;
//...
public static string descifra(string cadenaIntroducida, string Clave)
{
   string SubClave = Clave.Substring(Clave.Length / 2);
   string SubClave1 = Clave.Substring(0, (Clave.Length / 2));
   SubClave1 = SubClave1.ToLower();
   string Pattern = @"^([\w\s]*)" + SubClave + @"([\w\s]*)(?:" + SubClave1 + @"){2}";
   Regex reg = new Regex(Pattern);
   Match matches = reg.Match(cadenaIntroducida);
 
   return matches.Groups[2].Value + matches.Groups[1].Value;
}
 

Ahi tienen la forma para descifrar a fuerza bruta, adivinando la clave :P
Ahora vere la forma total de desencriptarlo facilmente :P
En línea

Novlucker
Ninja y
Ex-Staff
*
Desconectado Desconectado

Mensajes: 10.239


Yo que tu lo pienso dos veces


Ver Perfil
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #10 en: 11 Enero 2010, 21:01 »

raul388, no mire el algoritmo en C#, pero tiene que haber un pequeño error en algún sitio, a mi me da tal cual lo puso debci.

A mí si me lo dais en C++ o python me pongo al lío, pero con Java no me apaño :-\
:D

Código
def cifra(cadenaIntroducida, Clave):
SubClave = Clave[len(Clave)//2:]
Subcadena = cadenaIntroducida[len(cadenaIntroducida)//2:]
SubClave1 = Clave[0:len(Clave)//2].lower()
Subcadena1 = cadenaIntroducida[0:len(cadenaIntroducida)//2].lower()
mezclaBytesCadena = []
for i in range(3):
claveVolatil = Clave[i:len(Clave)//2] + cadenaIntroducida[i:len(cadenaIntroducida)//2]
mezclaBytesCadena.append(claveVolatil)
CadenaFinal = Subcadena + SubClave + Subcadena1 + SubClave1 + ''.join(mezclaBytesCadena)
CadenaFinal = CadenaFinal.lower()
return CadenaFinal
 
print(cifra("Hola","debci"))

Saludos
« Última modificación: 11 Enero 2010, 21:08 por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
http://twitter.com/novlucker

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Novlucker
Ninja y
Ex-Staff
*
Desconectado Desconectado

Mensajes: 10.239


Yo que tu lo pienso dos veces


Ver Perfil
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #11 en: 11 Enero 2010, 22:00 »

Era más sencillo de lo que pensé!

La mitad del texto se tiene al principio del mensaje, y la longitud de la contraseña se saca por fuerza bruta :P

Texto: Novlucker rompe importante cifrado :P
Clave: passsecreto
Resultado: portante cifrado :pecretonovlucker rompe impassspasssnovlucker rompe imasssovlucker rompe imsssvlucker rompe im

Código
def descifra(CadenaFinal,LenFragmento):
result = []
for i in range(15):
cadena = CadenaFinal[LenFragmento+i:LenFragmento*2+i-1]+CadenaFinal[0:LenFragmento]
if (cadena not in result):
result.append(cadena)
for i in range(15):
cadena = CadenaFinal[LenFragmento+i:LenFragmento*2+i]+CadenaFinal[0:LenFragmento]
if (cadena not in result):
result.append(cadena)
return result
 
d = descifra('portante cifrado :pecretonovlucker rompe impassspasssnovlucker rompe imasssovlucker rompe imsssvlucker rompe im',19)
for t in d:
print(t)

Salida:
Citar
D:\Py>python descifra.py
ecretonovlucker roportante cifrado :p
cretonovlucker romportante cifrado :p
retonovlucker rompportante cifrado :p
etonovlucker rompeportante cifrado :p
tonovlucker rompe portante cifrado :p
onovlucker rompe iportante cifrado :p
novlucker rompe importante cifrado :p
ovlucker rompe impportante cifrado :p
vlucker rompe impaportante cifrado :p
lucker rompe impasportante cifrado :p
ucker rompe impassportante cifrado :p
cker rompe impasssportante cifrado :p
ker rompe impassspportante cifrado :p
er rompe impassspaportante cifrado :p
r rompe impassspasportante cifrado :p
ecretonovlucker romportante cifrado :p
cretonovlucker rompportante cifrado :p
retonovlucker rompeportante cifrado :p
etonovlucker rompe portante cifrado :p
tonovlucker rompe iportante cifrado :p
onovlucker rompe importante cifrado :p
novlucker rompe impportante cifrado :p
ovlucker rompe impaportante cifrado :p
vlucker rompe impasportante cifrado :p
lucker rompe impassportante cifrado :p
ucker rompe impasssportante cifrado :p
cker rompe impassspportante cifrado :p
ker rompe impassspaportante cifrado :p
er rompe impassspasportante cifrado :p
r rompe impassspassportante cifrado :p

A la función le paso el texto cifrado y el largo del texto reconocido a "simple vista", ya que al estar la mitad del texto al inicio ,debería de ser legible por una persona.

[Edito]
Había olvidado decir que; en el bucle del for he puesto 15 iteraciones por el simple hecho de que estoy descifrando un texto para una contraseña de dicho número de caracteres, y salen 30 soluciones porque hay que probar textos de longitud par e impar, así que por ej de estar buscando una pass de hasta 50 caracteres, igual hubiesen sido solamente 100 soluciones ;D

Saludos
« Última modificación: 11 Enero 2010, 22:52 por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
http://twitter.com/novlucker

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Novlucker
Ninja y
Ex-Staff
*
Desconectado Desconectado

Mensajes: 10.239


Yo que tu lo pienso dos veces


Ver Perfil
Re: Prueba romper algoritmo ¿Serás capaz de trazar mi algoritmo?
« Respuesta #12 en: 12 Enero 2010, 01:00 »

Si, yo otra vez, por tercera vez consecutiva :-X

raul338, ya vi cual era el problema en tu código, la manera en la que utilizabas las funciones substring de C# y Java de igual manera
Lo que ocurre es que en Java la función substring recibe un rango de caracteres a extraer (desde/hasta), y en cambio en C# es "desde la posición x, n caracteres"

Código
for(int i = 0; i < 3; i++){
string claveVolatil = Clave.Substring(i, (Clave.Length / 2)) +
cadenaIntroducida.Substring(i, (cadenaIntroducida.Length / 2));
mezclaBytesCadena[i] = claveVolatil;}

Código
for(int i = 0; i < 3; i++){
string claveVolatil = Clave.Substring(i, (Clave.Length / 2)-i) +
cadenaIntroducida.Substring(i, (cadenaIntroducida.Length / 2)-i);
mezclaBytesCadena[i] = claveVolatil;}

Saludos
« Última modificación: 12 Enero 2010, 01:05 por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
http://twitter.com/novlucker

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines