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.


Anmelden zum Antworten