Seite 1 von 1

Brute Force Script gesucht

Verfasst: 07.08.2007 03:38
von mgutt
Hallo,

ich will nicht brutforcen, das nur vorab. Ich will Referal URLs möglichst "versteckt" konstruieren, damit erfahrene Nutzer nicht erkennen können, dass es sich um ein solchige handelt. D.h ich wollte mit Mod Rewrite eine URL bauen wie folgt:

domain.com/Ajd9

Das normale Zahlensystem von 0-9 reicht mir da nicht. Daher wollte ich von 0-9 über a-z und A-Z mit in die Zählung reinnehmen, um so die Adressen so kurz wie möglich zu halten. Also "Buchstaben und Zahlen hochzählen" könnte man das nennen.

Wichtig ist aber, dass ich das auch rückwärts rechnen kann, also dass z.B. "a" die ID "10" ist und "aa" müsste dann... ...naja schon recht hoch sein ;)

Da Bruteforcescripte genau sowas machen, wollte ich fragen, ob jemand eine Quelle zu einer solchen Funktion hat. Kann von mir aus auch per PN sein, ist mir gleich.

Gruß

Verfasst: 07.08.2007 06:36
von Pyramide
D.h. du suchst [php:base_convert]?

Verfasst: 07.08.2007 08:46
von mgutt
5 mal gelesen und trotzdem nicht verstanden. Was hat es mit den Angaben auf sich:

Code: Alles auswählen

frombase
Die Basis zu der number kodiert ist 

tobase
Die Basis zu der number konvertiert werden soll 
Ich hab ein paar Zeichenketten durchgetestet, kann mir da aber nicht wirklich einen Reim drauf machen.

Ich suche was, was mir bei 1 die 1, bei z die 36, bei 00 die 37, bei 01 die 38 und bei 0z eben die 72 ausgibt.

Und dann brauche ich was, was so zählen kann: 1, 2, 3, 4, ... a, b, c, .... z, 00, 01, 02, ... 0z, 10, 11, usw.

Nur am besten noch mit Großbuchstaben, damit ich noch mehr Möglichkeiten habe.

EDIT:
Ich hab leider so meine Probleme mit rekursiven Funktionen, daher hab ich es mal so "gebastelt":

Code: Alles auswählen

function rec($str, $all)
{
	$i = 0;
	foreach ( $all as $ones )
	{
		echo($ones . ' ');
		$i++;
	}
	foreach ( $all as $tens )
	{
		foreach ( $all as $ones )
		{
			echo($tens . $ones . ' ');
			$i++;
		}
	}
	foreach ( $all as $hundreds )
	{
		foreach ( $all as $tens )
		{
			foreach ( $all as $ones )
			{
				echo($hundreds . $tens . $ones . ' ');
				$i++;
			}
		}
	}
	echo($i);
}
$str = '';
$all = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
rec($str, $all);
exit;
Das läuft genau wie ich es brauche. Hört jetzt bei ZZZ auf, was laut Zählung mit 242.234 gleichzusetzen ist. Jetzt brauche ich was, was mir die 242.234 in ZZZ umwandeln kann bzw. etwas was ohne kompletten Durchlauf das gleiche andersherum macht. Dann baue ich das mit 4 Stellen, denn ich denke, dann sind das genug Varianten. Ich denke es werden so 2 Millionen Varianten gebraucht.

EDIT2:
Also ich habe das noch mit Tausender durchprobiert, dann habe ich 15.018.570 Varianten (ZZZZ). Und das finde ich super, da es nur 4 Stellen sind.

EDIT3:
Eine mathematische Grundlade dafür hätte ich auch:

Für jede Stelle muss man 62 hoch Anzahl der Stelle addieren. Also bei 4 Stellen sieht die Formel so aus:

62 hoch 4 + 62 hoch 3 + 62 hoch 2 + 62 hoch 1 = 15.018.570 Varianten

Fragt man sich jetzt nur, wie mir das beim Rückwärtsbestimmen helfen könnte ;)

EDIT4:

Ich weiß laut meinem Script, dass 2.000.000 z.B. 7nh4 ist. Die Frage ist, wenn ich nur 7nh4 habe, wie ich schnellstmöglich auf 2.000.000 komme und wenn ich nur 2.000.000 habe, wie ich schnellstmöglich auf 7nh4 komme.

Verfasst: 07.08.2007 11:45
von gn#36
Du dividierst den Zahlenwert im einen Zahlensystem durch die Basis des anderen Zahlensystems und bestimmst den Rest der Division (also Modulo). Diesen Rest merkst du dir, denn dass ist eine Zahlenstelle deines Ergebnisses. Mit dem Teil der Zahl der sich bis auf den Rest dividieren ließ verfährst du wieder so bis du bei einer Zahl ankommst wo das nicht mehr geht. Falls das zu verwirrend war hier ein Beispiel mit der Konvertierung von Basis 10 auf Basis 2:
Zahlenwert: 145 (als Beispiel)

Code: Alles auswählen

145 / 2 = 144/2 Rest 1
-> Wiederhole diesen Schritt mit 144/2 = 72
72 / 2 = 72/2 Rest 0
-> Wiederhole diesen Schritt mit 72/2 = 36
36 / 2 = 36/2 Rest 0
-> Wiederhole diesen Schritt mit 36/2 = 18
18 / 2 = 18/2 Rest 0
-> Wiederhole diesen Schritt mit 18/2 = 9
9 / 2 = 8/2 Rest 1
-> Wiederhole diesen Schritt mit 8/2 = 4
4 / 2 = 4/2 Rest 0
-> Wiederhole diesen Schritt mit 4/2 = 2
2 / 2 = 2/2 Rest 0
-> Wiederhole diesen Schritt mit 2/2 = 1
1 / 2 = 0 Rest 1
-> Abbruchbedingung erreicht.
Ergebnis: 10010001 (Rückwärts die Zahlenwerte aneinanderreihen)
Im Prinzip brauchst du also lediglich einen Algorithmus, der in der Lage ist Buchstaben durcheinander zu dividieren. Irgendwann habe ich auch sowas schon mal geschrieben, finde ich aber gerade nicht, das Horner-Schema oben ging noch so im Kopf ;)
Vermutlich macht base_convert nicht viel anderes, allerdings nur bei Basen bis 36.

Verfasst: 07.08.2007 15:00
von Pyramide
gn#36 hat geschrieben:Vermutlich macht base_convert nicht viel anderes, allerdings nur bei Basen bis 36.
Jo.
  • echo base_convert('1234', 10, 36);
    -> ya
  • echo base_convert('ya', 36, 10);
    -> 1234

Verfasst: 08.08.2007 03:15
von mgutt
Ok. Ich hab was gebaut (nachdem ich das mit base_convert() immer noch nicht verstanden habe), was mir einen String in eine Zahl konvertiert und einen String in eine Zahl. Mein oben gebautes Schleifenkonstrukt brauche daher nicht mehr. Was ich mir jetzt gebastelt habe, wollte ich nicht voreilig veröffentlichen, da man damit eine beliebige Zeichenkette von 0 aufwärts aufbauen kann (Bruteforce eben), außer ihr habt nichts dagegen.

Ein paar Ergebnisse:
String bei 237297: YIm (Prüfwert)
Berechnete ID des Strings: 237297
Berechneter String der ID: YIm

String bei 883352: 2GMB (Prüfwert)
Berechnete ID des Strings: 883352
Berechneter String der ID: 2GMB

String bei 109985: rAW (Prüfwert)
Berechnete ID des Strings: 109985
Berechneter String der ID: rAW

String bei 981289: 36ge (Prüfwert)
Berechnete ID des Strings: 981289
Berechneter String der ID: 36ge

String bei 625084: 1BAZ (Prüfwert)
Berechnete ID des Strings: 625084
Berechneter String der ID: 1BB

String bei 5967: 0xe (Prüfwert)
Berechnete ID des Strings: 5967
Berechneter String der ID: 0xe

String bei 187201: LGm (Prüfwert)
Berechnete ID des Strings: 187201
Berechneter String der ID: LGm
Den Prüfwert habe ich mit der oben genannten Schleife ermittelt, danach Berechne ich mit zwei verschiedenen Funktionen die ID des Strings bzw. den String zur ID. Wie man sieht recht erfolgreich :D