BruteForce-Iterativ
-
Hallo,
ich versuche mit einer iterativen BruteForce-Technik einen Passwort-Knacker zu programmieren. Rekursiv habe ich es schon geschafft.
Könne mir vielleicht einer einen Tipp geben, wir ich folgenden Code optimieren kann. Er sieh schrecklich aus!import java.text.DecimalFormat; public class Main { static int versuche = 0; public static void main(String[] args) throws PasswordNotFoundException { System.out.println("Passwort wird geknackt..."); long start = System.currentTimeMillis(); String password = getPasswordWithBruteForce(); double sekunden = (System.currentTimeMillis() - start) / 1000d; System.out .printf("Das Passwort lautet: \"%s\" Es wurde mit %s Versuchen in %f Sekunden geknackt. Das sind %s Versuche pro Sekunde.", password, new DecimalFormat("0,000").format(versuche), sekunden, new DecimalFormat("0,000.0").format(versuche / sekunden)); } public static String getPasswordWithBruteForce() throws PasswordNotFoundException { char[] zeichen = "1234567890eEnNiIsSrRaAtTdDhHuUlLcCgGmMoObBwWfFkKzZpPvVjJyYxXqQ".toCharArray(); int[] i = new int[10]; StringBuffer password = new StringBuffer(); // Passwortlänge: 0 if (tryPassword("")) return ""; if (tryPassword(null)) return null; // Passwortlänge: 1 for (i[0] = 0; i[0] < zeichen.length; i[0]++) { password.append(zeichen[i[0]]); if (tryPassword(password.toString())) return password.toString(); password.deleteCharAt(password.length() - 1); } // Passwortlänge: 2 for (i[0] = 0; i[0] < zeichen.length; i[0]++) { password.append(zeichen[i[0]]); for (i[1] = 0; i[1] < zeichen.length; i[1]++) { password.append(zeichen[i[1]]); if (tryPassword(password.toString())) return password.toString(); password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } // Passwortlänge: 3 for (i[0] = 0; i[0] < zeichen.length; i[0]++) { password.append(zeichen[i[0]]); for (i[1] = 0; i[1] < zeichen.length; i[1]++) { password.append(zeichen[i[1]]); for (i[2] = 0; i[2] < zeichen.length; i[2]++) { password.append(zeichen[i[2]]); if (tryPassword(password.toString())) return password.toString(); password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } // Passwortlänge: 4 for (i[0] = 0; i[0] < zeichen.length; i[0]++) { password.append(zeichen[i[0]]); for (i[1] = 0; i[1] < zeichen.length; i[1]++) { password.append(zeichen[i[1]]); for (i[2] = 0; i[2] < zeichen.length; i[2]++) { password.append(zeichen[i[2]]); for (i[3] = 0; i[3] < zeichen.length; i[3]++) { password.append(zeichen[i[3]]); if (tryPassword(password.toString())) return password.toString(); password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } // Passwortlänge: 5 for (i[0] = 0; i[0] < zeichen.length; i[0]++) { password.append(zeichen[i[0]]); for (i[1] = 0; i[1] < zeichen.length; i[1]++) { password.append(zeichen[i[1]]); for (i[2] = 0; i[2] < zeichen.length; i[2]++) { password.append(zeichen[i[2]]); for (i[3] = 0; i[3] < zeichen.length; i[3]++) { password.append(zeichen[i[3]]); for (i[4] = 0; i[4] < zeichen.length; i[4]++) { password.append(zeichen[i[4]]); if (tryPassword(password.toString())) return password.toString(); password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } // Passwortlänge: 6 for (i[0] = 0; i[0] < zeichen.length; i[0]++) { password.append(zeichen[i[0]]); for (i[1] = 0; i[1] < zeichen.length; i[1]++) { password.append(zeichen[i[1]]); for (i[2] = 0; i[2] < zeichen.length; i[2]++) { password.append(zeichen[i[2]]); for (i[3] = 0; i[3] < zeichen.length; i[3]++) { password.append(zeichen[i[3]]); for (i[4] = 0; i[4] < zeichen.length; i[4]++) { password.append(zeichen[i[4]]); for (i[5] = 0; i[5] < zeichen.length; i[5]++) { password.append(zeichen[i[5]]); if (tryPassword(password.toString())) return password.toString(); password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } // Passwortlänge: 7 for (i[0] = 0; i[0] < zeichen.length; i[0]++) { password.append(zeichen[i[0]]); for (i[1] = 0; i[1] < zeichen.length; i[1]++) { password.append(zeichen[i[1]]); for (i[2] = 0; i[2] < zeichen.length; i[2]++) { password.append(zeichen[i[2]]); for (i[3] = 0; i[3] < zeichen.length; i[3]++) { password.append(zeichen[i[3]]); for (i[4] = 0; i[4] < zeichen.length; i[4]++) { password.append(zeichen[i[4]]); for (i[5] = 0; i[5] < zeichen.length; i[5]++) { password.append(zeichen[i[5]]); for (i[6] = 0; i[6] < zeichen.length; i[6]++) { password.append(zeichen[i[6]]); if (tryPassword(password.toString())) return password.toString(); password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } // Passwortlänge: 8 for (i[0] = 0; i[0] < zeichen.length; i[0]++) { password.append(zeichen[i[0]]); for (i[1] = 0; i[1] < zeichen.length; i[1]++) { password.append(zeichen[i[1]]); for (i[2] = 0; i[2] < zeichen.length; i[2]++) { password.append(zeichen[i[2]]); for (i[3] = 0; i[3] < zeichen.length; i[3]++) { password.append(zeichen[i[3]]); for (i[4] = 0; i[4] < zeichen.length; i[4]++) { password.append(zeichen[i[4]]); for (i[5] = 0; i[5] < zeichen.length; i[5]++) { password.append(zeichen[i[5]]); for (i[6] = 0; i[6] < zeichen.length; i[6]++) { password.append(zeichen[i[6]]); for (i[7] = 0; i[7] < zeichen.length; i[7]++) { password.append(zeichen[i[7]]); if (tryPassword(password.toString())) return password.toString(); password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } // Passwortlänge: 9 for (i[0] = 0; i[0] < zeichen.length; i[0]++) { password.append(zeichen[i[0]]); for (i[1] = 0; i[1] < zeichen.length; i[1]++) { password.append(zeichen[i[1]]); for (i[2] = 0; i[2] < zeichen.length; i[2]++) { password.append(zeichen[i[2]]); for (i[3] = 0; i[3] < zeichen.length; i[3]++) { password.append(zeichen[i[3]]); for (i[4] = 0; i[4] < zeichen.length; i[4]++) { password.append(zeichen[i[4]]); for (i[5] = 0; i[5] < zeichen.length; i[5]++) { password.append(zeichen[i[5]]); for (i[6] = 0; i[6] < zeichen.length; i[6]++) { password.append(zeichen[i[6]]); for (i[7] = 0; i[7] < zeichen.length; i[7]++) { password.append(zeichen[i[7]]); for (i[8] = 0; i[8] < zeichen.length; i[8]++) { password.append(zeichen[i[8]]); if (tryPassword(password.toString())) return password.toString(); password.deleteCharAt(password .length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } // Passwortlänge: 10 for (i[0] = 0; i[0] < zeichen.length; i[0]++) { password.append(zeichen[i[0]]); for (i[1] = 0; i[1] < zeichen.length; i[1]++) { password.append(zeichen[i[1]]); for (i[2] = 0; i[2] < zeichen.length; i[2]++) { password.append(zeichen[i[2]]); for (i[3] = 0; i[3] < zeichen.length; i[3]++) { password.append(zeichen[i[3]]); for (i[4] = 0; i[4] < zeichen.length; i[4]++) { password.append(zeichen[i[4]]); for (i[5] = 0; i[5] < zeichen.length; i[5]++) { password.append(zeichen[i[5]]); for (i[6] = 0; i[6] < zeichen.length; i[6]++) { password.append(zeichen[i[6]]); for (i[7] = 0; i[7] < zeichen.length; i[7]++) { password.append(zeichen[i[7]]); for (i[8] = 0; i[8] < zeichen.length; i[8]++) { password.append(zeichen[i[8]]); for (i[9] = 0; i[9] < zeichen.length; i[9]++) { password.append(zeichen[i[9]]); if (tryPassword(password .toString())) return password.toString(); password.deleteCharAt(password .length() - 1); } password.deleteCharAt(password .length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } password.deleteCharAt(password.length() - 1); } throw new PasswordNotFoundException( "Das Passwort konnte nicht gefunden werden."); } private static boolean tryPassword(String password) { //System.out.println(password); versuche++; return "Halo".equals(password); } }
Ich hoffe, dass ihr mir helfen könnt!
-
y0 y0 brudA, brother, bratan (iS RuSsIscH DaS k4nN iCh W3iL aLLe H4cK3r köNneN d4s )
JaVa IsT voLL SchEiSSe nIMM lieBeR AsSeMbLeR soWie EchtE h4cK3r wIe iCh z.B. !
gr33tz
-
Programmier ein Rollenzählwerk http://de.wikipedia.org/wiki/Zählwerk nach. Dann haste die Zahlen in einemn Array und die Anzahl der Zahlen läßt den Code nicht explodieren.