
Entferne Duplikate aus einer RIESIGEN Wortliste, ohne sie zu sortieren (für wörterbuchbasiertes Passwortknacken)
Heutzutage beinhaltet die Erstellung von Passwort-Wortlisten normalerweise das Verketten mehrerer Datenquellen.
Idealerweise sollten die wahrscheinlichsten Passwörter am Anfang der Wortliste stehen, damit die häufigsten Passwörter sofort geknackt werden.
Mit vorhandenen Deduplizierungswerkzeugen sind Sie gezwungen zu wählen, ob Sie die Reihenfolge beibehalten ODER massive Wortlisten verarbeiten möchten.
Leider erfordert die Erstellung von Wortlisten beides
Also habe ich Duplicut in hochoptimiertem C geschrieben, um dieses sehr spezifische Bedürfnis zu erfüllen 🤓 💻
git clone https://github.com/nil0x42/duplicut # download ...
cd duplicut/ && make # compile ...
./duplicut wordlist.txt -o clean-wordlist.txt # dedupe !!!
-o, --outfile <FILE> Write result to <FILE>
-t, --threads <NUM> Max threads to use (default max)
-m, --memlimit <VALUE> Limit max used memory (default max)
-l, --line-max-size <NUM> Max line size (default 1024, max 4095)
-p, --printable Filter ascii printable lines
-c, --lowercase Convert wordlist to lowercase
-C, --uppercase Convert wordlist to uppercase
-D, --dupfile <FILE> Write dupes to <FILE> (slows down duplicut)
-h, --help Display this help and exit
-v, --version Output version information and exit
Merkmale:
--line-max-size)--printable)--dupfile)--lowercase oder --uppercaseImplementierung:
Einschränkungen:
--line-max-size kann 4095 nicht überschreitenEin uint64 reicht aus, um Zeilen in der Hashmap zu indizieren, indem die size-Information in den zusätzlichen Bits des Zeigers untergebracht wird:

Wenn die gesamte Datei nicht in den Speicher passt, wird sie in virtuelle Blöcke aufgeteilt, so dass jeder Block so viel RAM wie möglich nutzt.
Jeder Block wird dann in die Hashmap geladen, dedupliziert und gegen nachfolgende Blöcke getestet.
Auf diese Weise reduziert sich die Ausführungszeit auf höchstens die -te Dreieckszahl:

Wenn Sie einen Fehler finden oder etwas nicht wie erwartet funktioniert, kompilieren Sie Duplicut bitte im Debug-Modus und veröffentlichen Sie ein Issue mit der angehängten Ausgabe:
# debug level can be from 1 to 4
make debug level=1
./duplicut [OPTIONS] 2>&1 | tee /tmp/duplicut-debug.log