elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)  (Leído 6,012 veces)
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
« en: 14 Julio 2010, 16:43 pm »

Código
  1. import java.lang.String;
  2. import java.math.BigInteger;
  3. import java.security.MessageDigest;
  4. import java.security.NoSuchAlgorithmException;
  5. import java.util.logging.Level;
  6. import java.util.logging.Logger;
  7.  
  8. /**
  9.  *
  10.  * @author root
  11.  */
  12. public class Encriptor {
  13.  
  14.  
  15.    public static void main(String[] args)
  16.    {
  17.        String resultado = null;
  18.        String match = "d9058beaae2e147183870304dd526761";
  19.  
  20.  
  21.        String[] mapaChars = {"A","B","C"};
  22.  
  23.        int posibles = (int) Math.pow(3,mapaChars.length);
  24.  
  25.        String[] combinacion = new String[3];
  26.        int indice1 = 0;
  27.        int indice2 = 0;
  28.        int indice3 = 0;
  29.        for(int i = 0; i < posibles;i++)
  30.        {
  31.            if(indice1 == 3)
  32.            {
  33.  
  34.               indice1 = 0;
  35.               indice2++;
  36.            }
  37.            if(indice2 == 3)
  38.                {
  39.                    indice2 = 0;
  40.                    indice3++;
  41.                }
  42.            if(indice3 == 3)
  43.            {
  44.                indice3 = 0;
  45.            }
  46.          combinacion[0] = mapaChars[indice1];
  47.          combinacion[1] = mapaChars[indice2];
  48.          combinacion[2] = mapaChars[indice3];
  49.          String resultadoTransitorio = new String(combinacion[0] + combinacion[1] + combinacion[2]);
  50.          String resultadoEncriptado = new String(Encriptor.encriptaMD5(resultadoTransitorio));
  51.          if(resultadoEncriptado.equals(match))
  52.          {
  53.              resultado = resultadoTransitorio;
  54.              break;
  55.          }
  56.  
  57.          indice1++;
  58.  
  59.        }
  60.        System.out.println("Hash crackeada con exito!\n" + resultado);
  61.  
  62.        /*String cadena = new String("acb");
  63.         System.out.println(Encriptor.encriptaMD5(cadena) + "\n" + Encriptor.encriptaSHA1(cadena));*/
  64.    }
  65.    public static String encriptaMD5(String toEnc)
  66.    {
  67.  
  68.  
  69.        MessageDigest mdEnc = null;
  70.        try {
  71.            mdEnc = MessageDigest.getInstance("MD5"); // Encryption algorithm
  72.        } catch (NoSuchAlgorithmException ex) {
  73.            Logger.getLogger(Encriptor.class.getName()).log(Level.SEVERE, null, ex);
  74.        }
  75.  
  76.            mdEnc.update(toEnc.getBytes(), 0, toEnc.length());
  77.  
  78.            String md5 = new BigInteger(1, mdEnc.digest()).toString(16);
  79.            return md5;
  80.    }
  81.    public static String encriptaSHA1(String cadena)
  82.    {
  83.        byte[] defaultBytes = cadena.getBytes();
  84.  
  85. MessageDigest algorithm = null;
  86.        try {
  87.            algorithm = MessageDigest.getInstance("SHA1");
  88.        } catch (NoSuchAlgorithmException ex) {
  89.            Logger.getLogger(Encriptor.class.getName()).log(Level.SEVERE, null, ex);
  90.        }
  91. algorithm.reset();
  92. algorithm.update(defaultBytes);
  93. byte messageDigest[] = algorithm.digest();
  94.  
  95. StringBuffer hexString = new StringBuffer();
  96. for (int i=0;i<messageDigest.length;i++) {
  97. hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
  98. }
  99. String foo = messageDigest.toString();
  100.  
  101. cadena = hexString+"";
  102.        return cadena;
  103.    }
  104.  
  105. }

Por fin!
He conseguido crear mi propio programa para romper hashes MD5, y SHA1 (aun por implementar), pero me hace ilusión compartirlo con todos vosotros.

Para simplificar el trabajo tan solo he usado 3 posibles caracteres A B y C, encriptad cualquier combinación de estas 3 en MD5 y dadle el valor de la cadena a la variable match y os la crackeará en menos de un segundo!

Cuando este listo al 100% lo haré publico.

Saludos


En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
« Respuesta #1 en: 14 Julio 2010, 17:33 pm »

"Te he enseñado bien, haora la fuerza esta con tigo" XD :xD jaja

Se puede mejorar mucho, ademas con tu metodo es facil mejorarlo para que soporte mas de 3 caracteres, lo modifique para 4 y funcionaba  :P

Mas tarde lo miro con mas profundidad.

Sigue asi.

Un saludo.


En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
« Respuesta #2 en: 14 Julio 2010, 17:39 pm »

"Te he enseñado bien, haora la fuerza esta con tigo" XD :xD jaja

Se puede mejorar mucho, ademas con tu metodo es facil mejorarlo para que soporte mas de 3 caracteres, lo modifique para 4 y funcionaba  :P

Mas tarde lo miro con mas profundidad.

Sigue asi.

Un saludo.

Yo he probado con 24 caracteres y como no cabe un numero tan grande de posibilidades en un tipo int standard... lo tengo chungo :S
Me queda este algoitmo mas dinamico pero que me arroja un index out of bounds exepction en un array:

He comentado donde falla:
Código
  1. package main;
  2.  
  3. import java.lang.String;
  4. import java.math.BigInteger;
  5. import java.security.MessageDigest;
  6. import java.security.NoSuchAlgorithmException;
  7. import java.util.logging.Level;
  8. import java.util.logging.Logger;
  9.  
  10. /**
  11.  *
  12.  * @author root
  13.  */
  14. public class Encriptor {
  15.  
  16.  
  17.    public static void main(String[] args)
  18.    {
  19.        String resultado = null;
  20.        String match = "65070638cd89011c9ab230ba2fac46dd";
  21.        int limCaracteres = 4;
  22.  
  23.        String[] mapaChars = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
  24.  
  25.        int posibles = (int) Math.pow(limCaracteres,mapaChars.length);
  26.        System.out.println("Posibles: " + posibles + "\n" + "Lenght mapa: " + mapaChars.length);
  27.        String[] combinacion = new String[limCaracteres];
  28.        int[] indices = new int[limCaracteres];
  29.        for(int y = 0; y < indices.length; y++)
  30.        {
  31.            indices[y] = 0;
  32.        }
  33.  
  34.        for(int i = 0; i < posibles;i++)
  35.        {
  36.            for(int x = 0; i < limCaracteres; i++)
  37.            {
  38.                 if(indices[x] == mapaChars.length)
  39.                 {
  40.                     indices[x] = 0;
  41.                     indices[x+1]++;
  42.                 }
  43.            }
  44.  
  45.            for(int j = 0; j < limCaracteres; j++)
  46.            {
  47.                combinacion[j] = mapaChars[indices[j]]; /* Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
  48.         at main.Encriptor.main(Encriptor.java:52)
  49. Java Result: 1 */
  50.            }
  51.  
  52.          String resultadoTransitorio = new String(combinacion[0] + combinacion[1] + combinacion[2]);
  53.          String resultadoEncriptado = new String(Encriptor.encriptaMD5(resultadoTransitorio));
  54.          if(resultadoEncriptado.equals(match))
  55.          {
  56.              resultado = resultadoTransitorio;
  57.              break;
  58.          }
  59.  
  60.          indices[0]++;
  61.  
  62.        }
  63.        System.out.println("Hash crackeada con exito!\n" + resultado);
  64.  
  65.        /*String cadena = new String("acb");
  66.         System.out.println(Encriptor.encriptaMD5(cadena) + "\n" + Encriptor.encriptaSHA1(cadena));*/
  67.    }
  68.    public static String encriptaMD5(String toEnc)
  69.    {
  70.  
  71.  
  72.        MessageDigest mdEnc = null;
  73.        try {
  74.            mdEnc = MessageDigest.getInstance("MD5"); // Encryption algorithm
  75.        } catch (NoSuchAlgorithmException ex) {
  76.            Logger.getLogger(Encriptor.class.getName()).log(Level.SEVERE, null, ex);
  77.        }
  78.  
  79.            mdEnc.update(toEnc.getBytes(), 0, toEnc.length());
  80.  
  81.            String md5 = new BigInteger(1, mdEnc.digest()).toString(16);
  82.            return md5;
  83.    }
  84.    public static String encriptaSHA1(String toEnc)
  85.    {
  86.       MessageDigest shEnc = null;
  87.        try {
  88.            shEnc = MessageDigest.getInstance("SHA1"); // Encryption algorithm
  89.        } catch (NoSuchAlgorithmException ex) {
  90.            Logger.getLogger(Encriptor.class.getName()).log(Level.SEVERE, null, ex);
  91.        }
  92.  
  93.            shEnc.update(toEnc.getBytes(), 0, toEnc.length());
  94.  
  95.            String sha1 = new BigInteger(1, shEnc.digest()).toString(16);
  96.            return sha1;
  97.    }
  98.  
  99. }


Saludos
« Última modificación: 14 Julio 2010, 17:47 pm por Debci » En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
« Respuesta #3 en: 14 Julio 2010, 18:03 pm »

Luego me lo reviso bien, no se olviden que programo en C# :xD, pero desde ya le veo un problema al algoritmo

Código
  1. int limCaracteres = 4;
  2.  
  3. String[] mapaChars = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
  4.  
  5. int posibles = (int) Math.pow(limCaracteres,mapaChars.length);

El problema es el algoritmo desde un principio, con eso para una lista de 10 números, y largo de cadena de 4, te da 1048576, y en realidad debería de ser solamente 10000 :P

Saludos
« Última modificación: 14 Julio 2010, 18:05 pm por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
« Respuesta #4 en: 14 Julio 2010, 18:39 pm »

Luego me lo reviso bien, no se olviden que programo en C# :xD, pero desde ya le veo un problema al algoritmo

Código
  1. int limCaracteres = 4;
  2.  
  3. String[] mapaChars = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
  4.  
  5. int posibles = (int) Math.pow(limCaracteres,mapaChars.length);

El problema es el algoritmo desde un principio, con eso para una lista de 10 números, y largo de cadena de 4, te da 1048576, y en realidad debería de ser solamente 10000 :P

Saludos


Pues no se como sera eso de las posibilidades :xD ha modificado y colocando tanto el code que estoy perdido. creo que anteriormente lo tenia: si la cadena era de 3 seria 3^3 igualmente deberia ser es 10^10, segun lo ha venido colocando, tu dices 1000 pero eso es si lo colocas al contrario.

pienso que esta haciendo algo mal en los bucles
Código
  1. //               Index:0====Valor:1649
  2. //             Index:1====Valor:0
  3. //             Index:2====Valor:0
  4. //             Index:3====Valor:0
  5. //             Index:4====Valor:0
  6. //             Index:5====Valor:0
  7. //             Index:6====Valor:0
  8. //             Index:7====Valor:0
  9. //             Index:8====Valor:0
  10. //             Index:9====Valor:0
  11. //             Index:0====Valor:1650
  12.  
  13.  

y esta haciendo
Código
  1. combinacion[j] = mapaChars[indices[j]];


Obviamente dara error
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
« Respuesta #5 en: 14 Julio 2010, 18:46 pm »

No dije 1000, sino 10000 :xD

Te dejo un pequeño txt ...
:http://www.mediafire.com/file/cwtzom2nnmdbzkz/Combinaciones_10x4.txt

Es que tengo mi propio algoritmo :P
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
« Respuesta #6 en: 14 Julio 2010, 18:55 pm »

LO que yo he pretendido ha sido que fuese dinamico osea decir cuantos caracteres quieres comprobar si es una cadena de 24 caracteres, si es de 15 o de 6 caracteres (lo que quieras).
No entiendo porque debe dar error xD Ahora me lo miro mas a fondo jeje

Saludos
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
« Respuesta #7 en: 14 Julio 2010, 19:09 pm »

Pero es lo que estoy diciendo, mira el archivo ese que he subido, en ese archivo se muestran las posibles combinaciones de las 10 letras tomadas de a 4, el mío también es dinámico, le metes la lista de caracteres y el largo máximo para la palabra, y te tira el diccionario :P, lo único que no le puse es para que pruebe con todas las palabras hasta llegar al límite, pero eso es solo poner un FOR

Saludos
« Última modificación: 14 Julio 2010, 19:12 pm por Novlucker » En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
« Respuesta #8 en: 14 Julio 2010, 19:11 pm »

Pero es lo que estoy diciendo, mira el archivo ese que he subido, en ese archivo se muestran las posibles combinaciones de las 10 letras tomadas de a 4, el mío también es dinámico, le metes la lista de caracteres y el largo máximo para la palabra, y te tira el diccionario :P

Saludos

xD ya lo he pre-supuesto, no he tenido que montarme ningun algoritmo para ello xD

Ya estoy re-componiendo el codigo.

Saludos
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
« Respuesta #9 en: 14 Julio 2010, 19:14 pm »

Bueno, pero eso que tienes arriba es un algoritmo :xD
Mañana paso el que tengo a C# y lo publico aclarando que te he compiado la idea xD

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PC multimedia con grafica ampliable
Hardware
Ahm_Shere 3 2,189 Último mensaje 11 Diciembre 2010, 19:40 pm
por Ahm_Shere
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines