Truecrypt intelligente Wordlist

also: sowas ähnliches gibts im board schon ... hab ich mal für walimuk geschrieben ...

http://www.hackerboard.de/wlan-zone/41638-zahlenkombination.html

hatte zwar einen anderen hintergrund und eine andere anwendung, aber im prinzip steckt da 90% von dem drin was du haben willst ...

das ganze ist in c# geschrieben, das visual studio projekt (programm als quelltext) befindet sich mit in der zip ...

besorge dir z.B. visual studio express (kostenfrei von MS) und du kannst das prog selber verändern / erweitern / damit rumprobieren ...

was den mangel an erfahrung mit programmiersprachen angeht => learning by doing ist ein verbreiteter ansatz ...
 
Ich arbeite leider unter Linux. Könnte das jemand für Linux irgendwie umsetzen?
 
Wenn es nicht unbedingt dieser neumodischer Krams wie VB, Java, PHP oder C# sein muss ;)
Code:
[color=#008800][i]#! /usr/bin/env python[/i][/color]
[color=#008800][i]# -*- coding: utf-8 -*-[/i][/color]

[color=#AA22FF][b]from[/b][/color] [color=#0000FF][b]sys[/b][/color] [color=#AA22FF][b]import[/b][/color] stdout

CONST [color=#666666]=[/color] [color=#BB4444]"MyPass"[/color]
VARS [color=#666666]=[/color] [color=#BB4444]"1257"[/color]
MIN_LEN [color=#666666]=[/color] [color=#666666]1[/color]
MAX_LEN [color=#666666]=[/color] [color=#666666]6[/color]


[color=#AA22FF][b]def[/b][/color] [color=#00A000]generator[/color](comb, pos, max_pos):
    [color=#AA22FF][b]if[/b][/color] pos [color=#666666]>=[/color] max_pos:
        stdout[color=#666666].[/color]write(CONST [color=#666666]+[/color] [color=#BB4444]""[/color][color=#666666].[/color]join(comb) [color=#666666]+[/color] [color=#BB4444]"[/color][color=#BB6622][b]\n[/b][/color][color=#BB4444]"[/color])
        [color=#AA22FF][b]return[/b][/color]

    [color=#AA22FF][b]for[/b][/color] val [color=#AA22FF][b]in[/b][/color] VARS:
        [color=#AA22FF][b]if[/b][/color] pos [color=#666666]>[/color] [color=#666666]1[/color] [color=#AA22FF][b]and[/b][/color] (comb[pos [color=#666666]-[/color] [color=#666666]1[/color]] [color=#666666]==[/color] comb[pos [color=#666666]-[/color] [color=#666666]2[/color]] [color=#666666]==[/color] val):
            [color=#AA22FF][b]continue[/b][/color]
        comb[pos] [color=#666666]=[/color] val
        generator(comb, pos [color=#666666]+[/color] [color=#666666]1[/color], max_pos)

[color=#AA22FF][b]for[/b][/color] comb_len [color=#AA22FF][b]in[/b][/color] [color=#AA22FF]range[/color](MIN_LEN, MAX_LEN [color=#666666]+[/color] [color=#666666]1[/color]):
    [color=#008800][i]# [None] * n creates a list of length n[/i][/color]
    generator([[color=#AA22FF]None[/color]] [color=#666666]*[/color] comb_len, [color=#666666]0[/color], comb_len)
Ausführbar mit Python 2.7 (dürfte auch unter älteren Versionen gehen - allerdings ungetestet) oder Python 3:
(da ich gehört habe, es soll noch die Unart geben, Rechner/Betriebssysteme ohne vorinstalliertes Python auszuliefern: Download Python ;) )
Code:
python wordlist.py > passwords.txt
'>' ist die übliche Umleitung der Ausgabe in eine Datei (sonst wird in die Standardausgabe geschrieben). Und ja, man sollte das Script per Kommandozeile ausführen.

Das ist ein einfacher, "naiver" Ansatz:
für jede gewünschte Länge erstellt man erstmal ein leeres Array der gleichen Länge.
Code:
[color=#AA22FF][b]for[/b][/color] comb_len [color=#AA22FF][b]in[/b][/color] [color=#AA22FF]range[/color](MIN_LEN, MAX_LEN [color=#666666]+[/color] [color=#666666]1[/color]):
    [color=#008800][i]# [None] * n creates a list of length n[/i][/color]
    generator([[color=#AA22FF]None[/color]] [color=#666666]*[/color] comb_len, [color=#666666]0[/color], comb_len)
(hier wird die Syntaxmöglichkeit: '[leerer Eintrag] mal X' verwendet)
dann wird die rekursive Funktion 'generator' aufgerufen, die dieses Array füllt:
generator(leeres_array, start_position, max_position)
Ohne jetzt auf das Prinzip der Rekursion einzugehen, lässt sich der Algorithmus so beschreiben:
Code:
prüfe ob aktuelle position >= max. Wert, 
wenn ja: Ausgabe, fertig. (join(array) bei der Ausgabe => fügt die einzelnen Arrayeinträge zu einem string zusammen)
wenn nein:
  für jeden Kandidaten in "VARS":
     prüfe, ob 3 gleiche Werte in Reihe auftreten
     setze den Kandidaten auf die aktuelle Arrayposition
     rufe sich selbst(array, neue position)
Das Ganze ist alles andere als optimal, da durch die Aufrufe und Prüfungen viel Overhead entsteht, allerdings ist es "schnell genug" ;)
Ich habe noch die Ausgabe mit den generierten Passwörtern angehängt (Länge 1 bis 6).
Im günstigsten Fall braucht man also das Script gar nicht auszuführen, sondern die Passwortliste mit einem gescheiten Texteditor öffnen und einfach "MyPass" durch "richtigesPasswort" ersetzen (Notepad: "Bearbeiten" => "Ersetzen" => "Alle ersetzen" )

Edit:
Ich arbeite leider unter Linux
Ok, das mit Notepad und Pythoninstallation hat sich damit erledigt ;)
Habe das Script nochmal angehängt, damit man nicht ggf. C&P&Rename&sichÜberfalscheKodierungärger&nochmalC&P usw. betreiben muss.
 
Zurück
Oben