Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Debci en 14 Julio 2010, 16:43 pm



Título: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
Publicado por: Debci 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


Título: Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
Publicado por: Leyer 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.


Título: Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
Publicado por: Debci 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


Título: Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
Publicado por: Novlucker 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


Título: Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
Publicado por: Leyer 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


Título: Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
Publicado por: Novlucker 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


Título: Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
Publicado por: Debci 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


Título: Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
Publicado por: Novlucker 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


Título: Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
Publicado por: Debci 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


Título: Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
Publicado por: Novlucker 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


Título: Re: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable)
Publicado por: Debci en 15 Julio 2010, 16:49 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

Nada no hay manera he conseguido quitar el limite de posibilidades pero no consigo definir el algoritmo para generar todas las combinaciones posibles, no estoy concentrado y no comprendo ni mi antiguo codigo :S

Saludos