PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Word List Markup Language (WLML)



EBFE
20.06.2009, 21:06
Ich möchte hier eine Word-List Beschreibungssprache samt Interpreter vorstellen ;)

WLML kann dazu benutzt werden, „Worteigenschaften“ zu beschreiben und sich Anhand der Beschreibung komplette Wörterbücher generieren zu lassen.Einsatz: überall da wo man über BF-Methoden nur wenige Versuche pro Sekunde hat und mit intelligenten Listen viel Zeit sparen kann.
Möglichkeiten: im Prinzip "unbegrenzt" (zumindest falls ich kein Feature vergessenen habe ;) ) - sollten aber auf jedenfall viel weiter als jegliche BF-Tool/Wordlistgenerator Masken gehen.

Syntax: relativ einfach gestrickt.
Es werden Variablen/Zeichenlisten/Konstanten definiert, miteinander verknüpft und letzendlich als
Password definiert.
Wobei Variablen nur der "schönheitshalber" als Platzhalter vorhanden sind und sowieso vor der Generierung aufgelöst werden (man kann direkt das Passwort definieren, nur die Übersicht leiden darunter). Kann man auch mit Funktionen in "normalen" Progrmamiersprachen vergleichen - da kann man auch alles in die Main-Funktion reinschreiben, nur wird es irgendwann unübersichtlich.

Weiteres sind nur Auszüge aus dem Manual ;)

Syntax: Auszug aus dem Manual(siehe selbiges für eine bessere Formatierung):

Datentypen

: Konstanten und Zeichenlisten
’ich bin eine konstante’
"ich bin eine Zeichenliste"
’hi’
"abcdefg" der Unterschied: Konstanten werden komplett ausgewählt, von den Zeichenlisten jedoch immer nur ein Zeichen genommen. Eine Zeichenliste ist damit nur eine verkürzte Schreibweise für eine ODER Verknüpfung mehrerer Konstanten:

"abc"
äquivalent:
’a’|’b’|’c’Escapesequenzen: für Konstanten (werden zwischen ' definiert) \'
für Zeichenlisten: \"
Bsp:


"ab\"c"
'Max\'s password'
Operationen
: UND,ODER,ZUWEISUNG

UND: + . & and
ODER: | or
Zuweisung: = :=Variablen
: werden mit define eingeleitet und können Ausdrücke zugewiesen bekommen:

define word1="abc"
define word2=’hi’|’hey’
define myword=word1+word2 Variablennamen beginnen immer mit einem Buchstaben und können Buchstaben, Ziffern, ’_’ oder ’-’ beinhalten.
main
: als von vielen Sprachen bekannte ’Main’ fungiert die Password Zuweisung

define word1=’hi’|’hey
password=word1

oder

PASS=’hallo’+"123" Eigenschaften
: werden zwischen ’[’ und ’]’ aufgelistet.

[min..max ,mixedcase, lowercase, uppercase]
min..max: wiederhole Abschnitt mindestens
’min’ und höchstens ’max’ Male
lowercase: konvertiere alles in Kleinbuchstaben
uppercase: gegenteil von lowercase
mixedcase: es sollen alle
Groß/Kleinschreibungmöglichkeiten
durchprobiert werden. Beispiele:

"abc"[2..3] : wiederhole a oder b oder c zwei bis drei mal
"abc"[1..2,mixedcase]: wiederhole a oder b oder c ein bis 2 male
und probiere Groß/Kleinschreibung durch
(’pass’+"1234567890"[2..2]): ’pass’ und zwei Ziffern: pass12,pass13 Klammern

: ’[ ]’,’< >’,’{ }’, ’( )’
[ ] : hier werden Optionen aufgezählt
( ) : Gruppierungsklammern. Bsp:
("abc"|"def")+(’hi’|’hey’)

< > : Uniqueklammern. Elemente, die hier drin
stehen, dürfen sich nicht wiederholen.
Dies gilt allerdings immer für das
’erste Level’ der Anweisungen. Daher sollte
man im Zweifelsfall Gruppierungsklammern nutzen.
Bsp:
<"12345"[5..5]> (5 Ziffern von 1 bis 5, wobei nur komplett
unterschiedliche Sequnezen erlaubt sind)

{ } eine Liste mit Elementen (durch Kommata getrennt), aus
denen alle möglichen Kombinationen gebildet werden
Bsp:
{’hello’,word2,word3}
Include
: Über include String kann man weitere Quelltextdateien einbinen:

include("stdinc.wlml")
include "stdinc.wlml"
include ’stdinc.wlml’
include "/incs/myinc.wlml"Listen einbinden
: Über file String kann man bestehende Wörterbücher einbinden:

define word=file ’wordlist.txt’
oder
define word=file "wordlist.txt"
define zusatz=’special’
password=word+zusatz Aus dem Wörterbuch wird dann jeweils ein Wort eingelesen und für die Generierung herangezogen. Äquivalente Darstellung - Wörter aus dem Wörterbuch im Quellcode direkt aufzuschreiben.

define word=’word1’ | ’word2’ | ’word3’ | ... Achtung: die Wörterbücher werden komplett in den Speicher eingelesen (20GB große Listen gehen also schon mal nicht).

Kommentare
: Kommentare werden entweder über # oder // eingeleitet und gelten immer bis zum Zeilenende:

#include("ich wurde auskommentiert")
define hello="abc" #|’hi
define hi=’hi’|’hey’|’moin’ //begrüßung

Beispiele:
HelloWorld:


define hello='Hello'
define world='World'
define end="?!."
password=hello+world+end
alternativ


password='HelloWorld'+"?!."
alternativ


password='HelloWorld'+('?'|'!'|'.')
Ausgabe:


HelloWorld?
HelloWorld!
HelloWorld.
Vergessenes Passwort: Passwort von einem RAR Archiv war z.B irgendwas mit ’FreE-hAck’, allerdings ist inzwischen unklar, ob der Bindestrich wirklich vorhanden war und natürlich weiß man die genaue Groß/Kleinschreibung nicht mehr.


#Zip Passwort mit FH:
#Muster: FrEe-hAcK oder fReEHaCk
#(zufällige groß/kleinschreibung, optionaler bindestrich)

include (’stdinc.wlml’)
define free=’free’
define bind=’-’[0..1]
define hack=’hack’
password=(free+bind+hack)[mixedcase]
Ausgabe:


freehack
freehacK
freehaCk
freehaCK
freehAck
...Oder:
passwort besteht aus 7 Zeichen, man weiß, es sind Buchstaben a,b,c,d,e,f,g,h
allerdings gibt es keine wiederholungen im Passwort (also keine "aabcd"/"abbbcd" usw Wörter).

In einem einfachen BF-Tool wären das 8^7 = 2 097 152 Passwörter
in WLML kann man es genau beschreiben:


#passwort hat länge 7 und besteht aus 8 unterschiedlichen zeichen
#allerdings ohne Widerholungen

define zeichen="abcdefgh"
password=<zeichen[7..7]>
#alternativ (viel schneller, aber syntaktisch nicht so gut lesbar)
#password=<{"ah","bh","ch","dh","eh","fh","gh"}>
und hat somit nur noch ~40 000 Wörter in der Liste. Bei einem TC Volume, bei dem man nur 5 P/s hat, sind es 2 Std BF statt 5 Tage ;)
lange Passwörtersequenzen:


#in einem sehr langen passwort wurde in der Mitte die Ziffersequenz vergessen
#vermutung: 4-5 Ziffern, die sich nicht widerholen
#bei einfachem BF würde man 110 000 Kombos durchprobieren,
#gegenüber 35000 (wenn man die "Ziffern wiederholen sich nicht" Bedingung
#miteinbringt).

include ('stdinc.wlml')
define const='ich bin ein sehr sehr langes passwort'
define varpart=<digits[4..5]>
define const2='ich bin das Ende eines langen Passworts'
password=const+varpart+const2Bestehende Wordlisten nutzen geht auch:

#nimm ein Wort aus der Wordlist und füge eine Ziffer hinzu
include (’stdinc.wlml’)
define word=file ’wordlist.txt’
define end="1234"
password=word+endallerdings werden Wordlisten komplett in den Speicher eingelesen - man kann also keine 20GB Listen nutzen (die ich sowieso für
unsinnige halte ;) )

Vordefiniertes: stdinc.wlml bietet Variablen A-Z, a-z und digits (Zeichen A bis Z in groß/klein und Ziffern 1 bis 9)
Ansprechbar über


include "stdinc.wlml"
define myword=A-Z[1..4]
password=myword+'ichbinfest'
Konsole: der Interpreter läuft im Konsolenmodus und bietet mehrere Befehle an (einfach HELP oder ? eingeben). Wichtigste:
compile"datei.wlml" - kompiliert die Datei und liefert eventuell Fehlermeldungen
test - generiert testweise mehrere Passwörter, so dass man sehen kann, ob diese richtig aufgebaut werden
genlist "wordlist.txt" - generiert eine komplette Liste und speichert sie unter dem angegebenen Namen.

Starten der Konsole: Linuxer&Co brauchen noch SWI-Prolog (z.B http://sewiki.iai.uni-bonn.de/service/knowhow/installlatestswiprologasdeb/start)
In der Prolog-Console "consult(cmd)." eingeben.
Windowsuser können start.bat nutzen oder SWI-Prolog installieren und manuell starten "consult(cmd)."

Fehlermeldungen: ich habe zwar versucht, möglichst viele Fehler abzudecken und detailierte Meldungen auszugeben, allerdings sollte man es nicht mit einer VB/VC# Compiler verwechseln ;). Notfalls wird eben die Zeile ausgegeben, ab der der Interpreter nicht weiter kommt.
Manual: liegt im HTML und im PDF Format.

Plattformen: Windows, Mac, Linux

ToDo:
- der Befehl "test" im Interpreter soll noch eine geschätzte Anzahl an Wörtern ausgeben.


Begründete Kritik, Feedback und Anregungen willkommen :)
PS:Source für das komplette Projekt liegt natürlich bei.

Update: Manual um Escapesequenzen erweitert, paar WLML Beispiele hinzugefügt
Update2: Nun können bestehende Wordlisten eingebunden werden (und damit z.B modifiziert).
Manual+Beispielcodes updated
Update3: Manual komplett neu geschrieben, mehrere Optimierungen und einige Sprachfeatures hinzugefügt. Installationsskripte für Linux/Windows beigelegt. Interpreter lässt sich nun mit Quellcodedateien verknüpfen (Doppelklickausführung).

Manual (in verschiedenen Foramten ;)) ) sowie der Interpreter:
Edit: da die ebfe.de.vu Domain abused wurde, sollte erstmal die Mirroralternative genutzt werden.
http://ebfe.de.vu/wlml.zip
http://ebfe.de.vu/manual.pdf
http://ebfe.de.vu/manual.dvi (http://ebfe.de.vu/manual.div)
http://ebfe.de.vu/manual.ps
mirror:
http://ebfe00.eb.funpic.de/

Freak1936
20.06.2009, 23:49
Habs mir gerade mal gezogen, das programm erspart bestimmt mal eine menge zeit und arbeit wen man mal was bruten will. Sehr nütlich um feine wortlisten zu erstellen wenn man ein paar Infos über das ziel hat und sich so ungefähr das Pw denken kann oder noch ungefähr weiss.

Thanks EBFE :)

EBFE
21.06.2009, 21:01
Ein größeres Update: man kann nun über "file 'Filename' " bestehende Wordlisten einbinden:


include ('stdinc.wlml')

define word=file 'wordlist.txt'

define end='a'|'b'|'c'
password=word+end
Es wird dann jeweils ein Wort aus der Liste genommen und in die Generierung eingebracht.
Ausgabe:


wort1a
wort1b
wort1c
wort2a
wort2b
...

womit der praktische Nutzen doch deutlich höher sein sollte :)

inmate
22.06.2009, 22:49
Wow also diese Sprache werde ich mir auch mal anschauen, die sieht sehr interessant aus.
Danke das du sieh hier vorstellst , mir war sie nochnichteinmal bekannt :)

mfG

n00kie
22.06.2009, 23:33
Hab es mir mal genauer angeschaut und ich denke ich werde mich in Zukunft auch öfter damit beschäftigen.

EBFE
10.07.2009, 01:07
Manual komplett neu geschrieben, mehrere Optimierungen und einige Sprachfeatures hinzugefügt. Installationsskripte für Linux/Windows beigelegt. Interpreter lässt sich nun mit den Quellcodedateien verknüpfen, so dass man praktisch mit Doppelklick die Scripte ausführen kann.

http://ebfe.de.vu/wlml.zip (http://ebfe.de.vu/)
http://ebfe.de.vu/manual.pdf
http://ebfe.de.vu/manual.dvi (http://ebfe.de.vu/manual.div)
http://ebfe.de.vu/manual.ps
mirror:
http://ebfe.100webspace.net/wlml/
mirror2:
http://ebfe00.eb.funpic.de/

Invisibility
14.08.2009, 21:46
Danke das du sieh hier vorstellst , mir war sie nochnichteinmal bekannt :)

Hmm, ich könnte mir sogar vorstellen dass EBFE sie selbst entwickelt hat,
was wirklich sehr eindrucksvoll wäre, von der Idee sowie der Realisierung her.

Greetz,
Inviz

Sirect
14.08.2009, 23:27
Naja, ist zwar recht umfangreich und gut gemacht, aber ist einfach zu kompliziert...
Wenn ich ne spezielle Wordlist brauche dann code ich mir kurz nen Snippet der sowas generiert...

EBFE
16.08.2009, 18:50
@Sirect: naja, der Weg ist das Ziel ;). Mir ist nichts besseres & gleichzeitig noch halbwegs sinnvolles eingefallen. Einerseits vom Umfang her noch recht gut umsetzbar (was man bei "allgemeinen" Programmiersprachen nicht mehr sagen kann) und andererseits kein Abklatsch / tausendste Umsetzung von Basic/Pascalunterdialekt, in die man viel mehr Zeit investieren muss und die dann trotzdem garantiert keiner verwenden wird.

Für Vorschläge für eine weitere (sinnvollere?) Domainlanguage bin ich natürlich offen ;).

PS: bevor weitere Spekulationen kommen:

...vorstellen dass EBFE sie selbst entwickelt hat...

korrekt. Entwurf+Umsetzung + Doku :)

PPS: irgendwie funktioniert Threabo-Benachrichtigungsmail nicht mehr so wirklich.

TRX
16.08.2009, 19:30
1A Gemacht!
Super Idee!

werd sie mir mal laden, aber allein die Idee schon super!

Iaa_1
05.04.2010, 16:07
Wieviel Speicherplatz würde eine Liste mit 10000 Wörtern (Std wörtern - gott, städte, usw) brauchen? Und wie lange würde die generierung brauchen?

blackberry
05.04.2010, 16:18
Größe in Bytes = Anzahl der Wörter * (Wortlänge + 2)

Die 2 für \r\n (Zeilenumbruch in Windows).
Für Linux nur +1 (\n).
Je nach dem, welche Art von Zeilenumbrüchen das Programm benutzt.

Zeit? Ausprobieren!

EBFE
05.04.2010, 16:40
10 000 Wörter durchschnittliche Länge ~8 Zeichen: unter Windows wären das 10 000*(10)= 100 KB.
Generierungszeitdauer kommt auf das Script an, welches man zur Generierung nutzt - vor allem einige Filteroptionen fressen richtig Zeit, da zuerst generiert wird und dann daraus das richtige gefiltert ;)
Im Schnitt auf meinem Notebook:
Test1(komplexe generierung ohne Filterung)
40320 Woerter generiert in 3.27 Sekunden
Test3(komplexe generierung mit Filterung)
40320 Woerter generiert in 8.06 Sekunden
Test3 (simples generieren ohne Filtern)
242234 Woerter generiert in 2.58 Sekunden