Autor
|
Tema: Bruteforce final! Rompe MD5 de 3 caracteres (ampliable) (Leído 6,323 veces)
|
Debci
Wiki
Desconectado
Mensajes: 2.021
Actualizate o muere!
|
import java.lang.String; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author root */ public class Encriptor { public static void main (String[] args ) { String match = "d9058beaae2e147183870304dd526761"; String[] mapaChars = {"A", "B", "C"}; int posibles = (int) Math. pow(3,mapaChars. length); int indice1 = 0; int indice2 = 0; int indice3 = 0; for(int i = 0; i < posibles;i++) { if(indice1 == 3) { indice1 = 0; indice2++; } if(indice2 == 3) { indice2 = 0; indice3++; } if(indice3 == 3) { indice3 = 0; } combinacion[0] = mapaChars[indice1]; combinacion[1] = mapaChars[indice2]; combinacion[2] = mapaChars[indice3]; String resultadoTransitorio = new String(combinacion [0] + combinacion [1] + combinacion [2]); String resultadoEncriptado = new String(Encriptor. encriptaMD5(resultadoTransitorio )); if(resultadoEncriptado.equals(match)) { resultado = resultadoTransitorio; break; } indice1++; } System. out. println("Hash crackeada con exito!\n" + resultado ); /*String cadena = new String("acb"); System.out.println(Encriptor.encriptaMD5(cadena) + "\n" + Encriptor.encriptaSHA1(cadena));*/ } { try { mdEnc = MessageDigest. getInstance("MD5"); // Encryption algorithm Logger.getLogger(Encriptor.class.getName()).log(Level.SEVERE, null, ex); } mdEnc.update(toEnc.getBytes(), 0, toEnc.length()); return md5; } { byte[] defaultBytes = cadena.getBytes(); try { Logger.getLogger(Encriptor.class.getName()).log(Level.SEVERE, null, ex); } algorithm.reset(); algorithm.update(defaultBytes); byte messageDigest[] = algorithm.digest(); for (int i=0;i<messageDigest.length;i++) { hexString. append(Integer. toHexString(0xFF & messageDigest [i ])); } String foo = messageDigest. toString(); cadena = hexString+""; return cadena; } }
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
Mensajes: 786
leyer@elhacker.net
|
"Te he enseñado bien, haora la fuerza esta con tigo" 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 Mas tarde lo miro con mas profundidad. Sigue asi. Un saludo.
|
|
|
En línea
|
|
|
|
Debci
Wiki
Desconectado
Mensajes: 2.021
Actualizate o muere!
|
"Te he enseñado bien, haora la fuerza esta con tigo" 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 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: package main; import java.lang.String; import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author root */ public class Encriptor { public static void main (String[] args ) { String match = "65070638cd89011c9ab230ba2fac46dd"; int limCaracteres = 4; String[] mapaChars = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; int posibles = (int) Math. pow(limCaracteres,mapaChars. length); System. out. println("Posibles: " + posibles + "\n" + "Lenght mapa: " + mapaChars. length); int[] indices = new int[limCaracteres]; for(int y = 0; y < indices.length; y++) { indices[y] = 0; } for(int i = 0; i < posibles;i++) { for(int x = 0; i < limCaracteres; i++) { if(indices[x] == mapaChars.length) { indices[x] = 0; indices[x+1]++; } } for(int j = 0; j < limCaracteres; j++) { combinacion[j] = mapaChars[indices[j]]; /* Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at main.Encriptor.main(Encriptor.java:52) Java Result: 1 */ } String resultadoTransitorio = new String(combinacion [0] + combinacion [1] + combinacion [2]); String resultadoEncriptado = new String(Encriptor. encriptaMD5(resultadoTransitorio )); if(resultadoEncriptado.equals(match)) { resultado = resultadoTransitorio; break; } indices[0]++; } System. out. println("Hash crackeada con exito!\n" + resultado ); /*String cadena = new String("acb"); System.out.println(Encriptor.encriptaMD5(cadena) + "\n" + Encriptor.encriptaSHA1(cadena));*/ } { try { mdEnc = MessageDigest. getInstance("MD5"); // Encryption algorithm Logger.getLogger(Encriptor.class.getName()).log(Level.SEVERE, null, ex); } mdEnc.update(toEnc.getBytes(), 0, toEnc.length()); return md5; } { try { shEnc = MessageDigest. getInstance("SHA1"); // Encryption algorithm Logger.getLogger(Encriptor.class.getName()).log(Level.SEVERE, null, ex); } shEnc.update(toEnc.getBytes(), 0, toEnc.length()); return sha1; } }
Saludos
|
|
« Última modificación: 14 Julio 2010, 17:47 pm por Debci »
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Luego me lo reviso bien, no se olviden que programo en C# , pero desde ya le veo un problema al algoritmo int limCaracteres = 4; String[] mapaChars = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; 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 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
Mensajes: 786
leyer@elhacker.net
|
Luego me lo reviso bien, no se olviden que programo en C# , pero desde ya le veo un problema al algoritmo int limCaracteres = 4; String[] mapaChars = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}; 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 Saludos Pues no se como sera eso de las posibilidades 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 // Index:0====Valor:1649 // Index:1====Valor:0 // Index:2====Valor:0 // Index:3====Valor:0 // Index:4====Valor:0 // Index:5====Valor:0 // Index:6====Valor:0 // Index:7====Valor:0 // Index:8====Valor:0 // Index:9====Valor:0 // Index:0====Valor:1650
y esta haciendo combinacion[j] = mapaChars[indices[j]];
Obviamente dara error
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
No dije 1000, sino 10000 Te dejo un pequeño txt ... :http://www.mediafire.com/file/cwtzom2nnmdbzkz/Combinaciones_10x4.txt Es que tengo mi propio algoritmo
|
|
|
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
Mensajes: 2.021
Actualizate o muere!
|
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
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
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 , 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
Mensajes: 2.021
Actualizate o muere!
|
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 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
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Bueno, pero eso que tienes arriba es un algoritmo 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
|
|
|
|
|