Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
pcfg_cracker — Generatore di tentativi di password basato su Grammatica Probabilistica Libera dal Contesto (PCFG) | Kitploit
Strumenti/GitHubGitHub/lakiw/pcfg_cracker
Password CrackingAttacchi alle PasswordCrittografiaMachine Learning
GitHublakiw/pcfg_cracker

pcfg_cracker

Generatore di tentativi di password basato su Grammatica Probabilistica Libera dal Contesto (PCFG)

Vedi Repository
3708721 anno faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

PCFG = Grammatica Probabilistica a Contesto Libero

PCFG = Indovinello Fuzzy Piuttosto Figo

In breve: Una raccolta di strumenti per condurre ricerche su come gli umani generano le password. Questi possono essere usati per craccare hash di password, ma anche per creare password sintetiche (honeywords) o aiutare a sviluppare migliori algoritmi di robustezza delle password.

Versioni degli Strumenti

Trainer: 4.4

Guesser: 4.6

PRINCE_LING: 4.3

Password_Scorer: 4.4

Documentazione

Sphinx viene utilizzato per creare dinamicamente una Guida per Sviluppatori basata sui docstring nel codice. Per costruire la Guida per Sviluppatori, fare riferimento alle istruzioni in /doc/INSTRUCTIONS.rst

Una Guida per Sviluppatori pre-costruita in PDF si trova anche in /doc/build/latex/pcfgdevelopersguide.pdf. Nota: non ricostruirò questa guida tra le versioni principali per mantenere la cronologia git più pulita. In pratica, fare commit di PDF diventa molto caotico molto rapidamente. Ciò significa che la guida pre-costruita potrebbe essere leggermente obsoleta, quindi se la stai usando per aiutarti a scrivere/modificare codice, si consiglia di costruire la guida da solo invece di usare quella pre-costruita.

Panoramica

Questo progetto utilizza l'apprendimento automatico per identificare le abitudini di creazione delle password degli utenti. Un modello PCFG viene generato addestrandosi su un elenco di password in chiaro/crackate divulgate. Nel contesto di questo progetto, il modello viene chiamato ruleset e contiene molte diverse parti delle password identificate durante l'addestramento, insieme alle loro probabilità associate. Questa derivazione (stemming) può essere utile per altri strumenti di cracking come PRINCE, e/o parti del ruleset possono essere incorporate direttamente in attacchi basati su dizionario più tradizionali. Questo progetto include anche un generatore di tentativi PCFG che utilizza questo ruleset per generare tentativi di password in ordine di probabilità. Questo è molto più potente degli attacchi standard al dizionario, e nei test si è dimostrato in grado di craccare password in media con significativamente meno tentativi rispetto ad altri metodi pubblicamente disponibili. Lo svantaggio è che generare tentativi in ordine di probabilità è lento, il che significa che crea in media 50-100k tentativi al secondo, mentre gli algoritmi basati su GPU possono creare milioni a miliardi (e oltre) di tentativi al secondo contro algoritmi di hashing veloci. Pertanto, il guesser PCFG è più adatto per l'uso contro grandi numeri di hash salati, o altri algoritmi di hashing lenti, dove il costo prestazionale dell'algoritmo è compensato dall'accuratezza dei tentativi.

Requisiti + Installazione

  • Python3 è l'unico requisito hardware per questi strumenti
  • È altamente raccomandato installare la libreria python3 chardet per l'addestramento. Sebbene non sia richiesta, esegue il rilevamento automatico della codifica dei caratteri delle password di addestramento. Per installarla:
  • Scarica il sorgente da https://pypi.python.org/pypi/chardet
  • Oppure installala usando pip3 install chardet

Guida Rapida

Addestramento

Il ruleset predefinito incluso in questo repository è stato creato addestrandosi su un sottoinsieme di 1 milione di password del dataset RockYou. Prestazioni migliori possono essere ottenute addestrandosi sull'intero set di 32 milioni di password per RockYou, ma ciò è stato escluso per mantenere piccola la dimensione del download. Puoi usare il ruleset predefinito per iniziare a generare password senza doverti addestrare su una nuova lista, ma si consiglia di addestrarsi su un insieme target di password che potrebbero essere più vicine a ciò che stai cercando di colpire. Se crei il tuo ruleset, ecco una guida rapida:

  1. Identifica un insieme di password in chiaro su cui addestrarti.
  • Questo insieme di password dovrebbe includere password duplicate. In questo modo l'addestratore può identificare che password comuni come 123456 sono comuni.
  • Le password devono essere in chiaro, con gli hash e le informazioni associate come i nomi utente rimossi. Non cercare di usare file .pot grezzi come insieme di addestramento poiché gli hash verranno considerati parte della password dal programma di addestramento.
  • Le password devono essere codificate nello stesso modo in cui vuoi generare i tentativi di password. Quindi, se vuoi creare tentativi di password UTF-8, anche l'insieme di addestramento deve essere codificato come UTF-8. A lungo termine, la possibilità di modificare questo aspetto durante la generazione dei tentativi è nel piano di sviluppo, ma al momento questa funzionalità non è supportata.
  • La lista di password di addestramento dovrebbe essere tra 100k e 50 milioni. I test sono ancora in corso su come la dimensione della lista di password di addestramento influenzi la generazione dei tentativi, e si è avuto buon successo anche con liste di password piccole come 10k, ma una dimensione ideale è probabilmente intorno a 1 milione, con rendimenti decrescenti oltre.
  • Ai fini di questo tutorial, la lista di password di input verrà chiamata INPUT_PASSWORD_LIST
  1. Scegli un nome per il ruleset generato. Ai fini di questo tutorial sarà NEW_RULESET
  2. Esegui l'addestratore sulla lista di password di input
  • python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET
  • Flag opzionali comuni: a. coverage: Quanto ti fidi dell'insieme di addestramento per corrispondere alle password target. Una copertura più alta significa utilizzare una generazione brute force meno intelligente utilizzando la modellazione Markov (attualmente usando l'algoritmo OMEN). Se imposti la copertura a 1, non verrà eseguita alcuna brute force. Se imposti la copertura a 0, genererà tentativi solo utilizzando attacchi Markov. Questo valore è un float, con il valore predefinito di 0.6 che significa che ci si aspetta una probabilità del 60% che le parole base della password target possano essere trovate nell'insieme di addestramento. Esempio: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6 b. --save_sensitive: Se specificato, i dati sensibili come indirizzi e-mail e siti web completi scoperti durante l'addestramento verranno salvati nel ruleset. Sebbene il generatore di tentativi PCFG attualmente non utilizzi questi dati, sono molto preziosi durante un vero attacco di cracking delle password. Questa opzione è disattivata per impostazione predefinita per rendere questo strumento più facile da usare in un contesto accademico. Nota: anche quando è disattivata, ci sarà quasi certamente comunque qualche dato PII salvato all'interno di un ruleset, quindi proteggi i ruleset generati di conseguenza. Esempio: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive c. --comments: Aggiunge un commento al file di configurazione del ruleset. Questo è utile per sapere perché e come hai generato il ruleset quando lo rivedi in seguito. Includi il commento che vuoi aggiungere tra virgolette.

Generazione dei Tentativi

Questo genera tentativi su stdout utilizzando un ruleset PCFG precedentemente addestrato. Questi tentativi possono quindi essere reindirizzati tramite pipe a qualsiasi programma che desideri utilizzarli. Se non viene specificato alcun ruleset, verrà utilizzato il ruleset predefinito DEFAULT. Ai fini di questa guida si presuppone che il ruleset utilizzato sia NEW_RULESET.

  1. Nota: il programma di generazione dei tentativi distingue tra maiuscole e minuscole quando specifica il nome del ruleset.
  • Un nome di sessione non è richiesto (per impostazione predefinita creerà una sessione chiamata default_run), ma è utile per facilitare il riavvio di una sessione messa in pausa/fermata. Questi esempi useranno il nome di sessione SESSION_NAME. Nota: non esiste un controllo di integrità integrato se esegui più sessioni con lo stesso nome contemporaneamente, ma si consiglia di evitarlo.
  1. Per avviare una nuova sessione di tentativi esegui:
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME
  1. Per riavviare una sessione di tentativi precedente esegui (Nota: devi comunque specificare lo stesso ruleset quando ripristini una sessione):
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --load

Valutazione della Robustezza delle Password

Ci sono molti casi in cui potresti voler stimare la probabilità che una password venga generata da un ruleset precedentemente addestrato. Ad esempio, questo potrebbe far parte di una metrica di robustezza della password, o essere utilizzato per altri scopi di ricerca. Un programma di esempio è incluso per eseguire questa operazione.

  • INPUT_LIST rappresenta la lista di password da valutare. Queste password devono essere in chiaro, separate da nuove righe, con una password per riga.
  1. Per eseguire una sessione di valutazione: python3 password_scorer -r NEW_RULESET -i INPUT_LIST
  2. Per impostazione predefinita, i risultati verranno inviati a stdout, con ogni password valutata per riga
  • Il primo valore è la password grezza
  • Il secondo valore rappresenterà se il valore di input è stato valutato come 'password', 'sito web', 'indirizzo e-mail' o 'altro'. Questa determinazione di password o altro dipende dai limiti impostati sia per il limite di tentativi OMEN, sia per la probabilità associata al PCFG.
  • Il terzo valore è la probabilità della password secondo il Ruleset. Se viene assegnato un valore di 0.0, significa che la password non verrà generata dal ruleset, sebbene possa essere generata da un attacco basato su Markov.
  • Il quarto valore è il livello OMEN che genererà la password. Un valore di -1 significa che la password non verrà generata da OMEN.

Generatore di Wordlist Prince-Ling

Nome: PRINCE Language Indexed N-Grams (Prince-Ling)

Panoramica: Costruisce wordlist personalizzate basate su un ruleset/grammatica PCFG già addestrato per l'uso in attacchi combinatori stile PRINCE. L'idea alla base di questo è che poiché l'addestratore PCFG sta già suddividendo un insieme di addestramento di password in parsing individuali, queste informazioni potrebbero essere sfruttate per creare wordlist mirate per altri attacchi.

Meccanismi di Base: Sotto il cofano, lo strumento Prince-Ling è fondamentalmente un mini-generatore di tentativi PCFG. Rimuove la generazione di tentativi Markov e sostituisce le strutture base utilizzate negli attacchi PCFG normali con una struttura base significativamente ridotta, su misura per generare wordlist PRINCE. Ciò consente di generare parole del dizionario in ordine di probabilità con un occhio a quanto utili ci si aspetta che siano quelle parole in un attacco PRINCE.

Usare Prince-Ling

  1. Addestra un ruleset PCFG usando trainer.py. Nota: devi creare il ruleset usando la versione 4.1 o successiva del set di strumenti PCFG, poiché le versioni precedenti non apprendevano tutte le strutture dati che Prince-Ling utilizza.
  2. Esegui Prince-Ling python3 prince-ling.py -r NOME_RULESET -s DIMENSIONE_WORDLIST_DA_CREARE -o NOME_FILE_OUTPUT
  • --rule: Nome del ruleset PCFG da cui creare la wordlist PRINCE
  • --size: Numero di parole da creare per la wordlist PRINCE. Nota: se non specificato, Prince-Ling genererà tutte le parole possibili, il che può essere piuttosto grande a seconda che sia abilitato il case_mangling. (Il case mangling aumenta enormemente lo spazio delle chiavi)
  • --output: Nome del file di output su cui scrivere le voci. Nota: se non specificato, Prince-Ling invierà le parole a stdout, il che potrebbe causare problemi a seconda della shell utilizzata quando si stampano caratteri non ASCII.
  • --all_lower: Genera solo parole in minuscolo per il dizionario PRINCE. Questo è utile quando si attaccano hash che non distinguono tra maiuscole e minuscole, o se si prevede di applicare il case mangling mirato in modo diverso.

Esempio di Cracking delle Password Usando John the Ripper

python3 pcfg_guesser -r NEW_RULESET -s SESSION_NAME | ./john --stdin --format=bcrypt PASSWORDS_TO_CRACK.txt

Contribuire

Se noti bug o se hai una funzionalità che vorresti vedere aggiunta, per favore apri un problema su questa pagina github. Accetto anche pull request, anche se idealmente collega una pull request a un problema in modo che io possa esaminarla più facilmente, fare domande e comprendere meglio le modifiche che stai apportando.

Ci sono molti miglioramenti che possono essere apportati alla modellazione delle strategie di creazione delle password usando PCFG. Sono molto aperto a nuove idee, modifiche e suggerimenti. Solo perché il codice attualmente fa qualcosa in un certo modo non significa che sia l'opzione migliore. Ad esempio, la struttura base fondamentale dell'approccio attuale in cui vengono generate maschere per stringhe alfa, cifre, altro, ecc., è stata scelta perché era l'opzione "più semplice" da implementare. Il mio team ha discusso molto sul fatto che un'opzione migliore potrebbe essere quella di iniziare con una parola base e quindi modellare regole di mangling più tradizionali applicate ad essa come transizioni nel PCFG. Quindi sentiti libero di scatenarti con questo codice!

Scarica lo strumento