Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
pcfg_cracker — Gerador de palpites de senhas baseado em Gramática Livre de Contexto Probabilística (PCFG) | Kitploit
Ferramentas/GitHubGitHub/lakiw/pcfg_cracker
Quebra de SenhasAtaques de SenhaCriptografiaAprendizado de Máquina
GitHublakiw/pcfg_cracker

pcfg_cracker

Gerador de palpites de senhas baseado em Gramática Livre de Contexto Probabilística (PCFG)

Ver Repositório
37087há 11 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

PCFG = Gramática Livre de Contexto Probabilística

PCFG = Guessador Difuso Muito Legal

Resumindo: Uma coleção de ferramentas para realizar pesquisas sobre como os humanos geram senhas. Elas podem ser usadas para quebrar hashes de senhas, mas também para criar senhas sintéticas (honeywords) ou ajudar a desenvolver melhores algoritmos de força de senha.

Versões das Ferramentas

Trainer: 4.4

Guesser: 4.6

PRINCE_LING: 4.3

Password_Scorer: 4.4

Documentação

Sphinx é usado para criar dinamicamente um Guia do Desenvolvedor baseado em docstrings no código. Para compilar o Guia do Desenvolvedor, consulte as instruções em /doc/INSTRUCTIONS.rst

Um PDF do Guia do Desenvolvedor pré-compilado também pode ser encontrado em /doc/build/latex/pcfgdevelopersguide.pdf. Nota: não vou reconstruir este guia entre versões principais para manter o histórico do git mais limpo. Ou seja, cometer PDFs fica muito bagunçado rapidamente. Isso significa que o guia pré-compilado pode estar um pouco desatualizado; portanto, se você estiver usando-o para ajudar a escrever/modificar código, é recomendável compilar o guia você mesmo em vez de usar o pré-compilado.

Visão Geral

Este projeto usa aprendizado de máquina para identificar hábitos de criação de senhas dos usuários. Um modelo PCFG é gerado treinando em uma lista de senhas em texto simples/reveladas. No contexto deste projeto, o modelo é chamado de ruleset e contém muitas partes diferentes das senhas identificadas durante o treinamento, juntamente com suas probabilidades associadas. Essa derivação pode ser útil para outras ferramentas de cracking, como PRINCE, e/ou partes do ruleset podem ser diretamente incorporadas em ataques de dicionário mais tradicionais. Este projeto também inclui um gerador de guesses PCFG que utiliza este ruleset para gerar palpites de senha em ordem de probabilidade. Isso é muito mais poderoso do que ataques de dicionário padrão e, em testes, provou ser capaz de quebrar senhas com significativamente menos palpites do que outros métodos publicamente disponíveis. A desvantagem é que gerar palpites em ordem de probabilidade é lento, criando em média 50-100k palpites por segundo, enquanto algoritmos baseados em GPU podem criar milhões a bilhões (e mais) de palpites por segundo contra algoritmos de hash rápidos. Portanto, o guesser PCFG é melhor usado contra grandes números de hashes com salt, ou outros algoritmos de hash lentos, onde o custo de desempenho do algoritmo é compensado pela precisão dos palpites.

Requisitos + Instalação

  • Python3 é o único requisito duro para estas ferramentas
  • É altamente recomendado que você instale a biblioteca chardet do Python3 para treinamento. Embora não seja obrigatório, ela realiza a detecção automática de codificação de caracteres das senhas de treinamento. Para instalá-la:
  • Baixe o código-fonte de https://pypi.python.org/pypi/chardet
  • Ou instale usando pip3 install chardet

Guia de Início Rápido

Treinamento

O ruleset padrão incluído neste repositório foi criado treinando em um subconjunto de 1 milhão de senhas do conjunto de dados RockYou. Melhor desempenho pode ser alcançado treinando no conjunto completo de 32 milhões de senhas do RockYou, mas isso foi excluído para manter o tamanho do download pequeno. Você pode usar o ruleset padrão para começar a gerar senhas sem precisar treinar em uma nova lista, mas é recomendado treinar em um conjunto alvo de senhas que possa estar mais próximo do que você está tentando atacar. Se você criar seu próprio ruleset, aqui está um guia rápido:

  1. Identifique um conjunto de senhas em texto simples para treinar.
  • Este conjunto de senhas deve incluir senhas duplicadas. Assim, o treinador pode identificar que senhas comuns como 123456 são comuns.
  • As senhas devem estar em texto simples, com hashes e informações associadas, como nomes de usuário, removidos. Não tente usar arquivos .pot brutos como conjunto de treinamento, pois os hashes serão considerados parte da senha pelo programa de treinamento.
  • As senhas devem estar codificadas da mesma forma que você deseja gerar palpites de senha. Ou seja, se você deseja criar palpites de senha em UTF-8, o conjunto de treinamento também deve estar codificado em UTF-8. A longo prazo, a capacidade de modificar isso ao gerar palpites está no plano de desenvolvimento, mas esse recurso atualmente não é suportado.
  • A lista de senhas de treinamento deve ter entre 100k e 50 milhões. Ainda estão sendo feitos testes sobre como o tamanho da lista de senhas de treinamento afeta a geração de palpites, e houve bons resultados mesmo com listas de senhas tão pequenas quanto 10k, mas um tamanho ideal é provavelmente cerca de 1 milhão, com retornos decrescentes após isso.
  • Para os fins deste tutorial, a lista de senhas de entrada será referida como INPUT_PASSWORD_LIST
  1. Escolha um nome para o seu ruleset gerado. Para os fins deste tutorial, será NEW_RULESET
  2. Execute o treinador na lista de senhas de entrada
  • python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET
  • Flags opcionais comuns: a. coverage: O quanto você confia que o conjunto de treinamento corresponde às senhas alvo. Uma cobertura maior significa usar menos geração de força bruta inteligente usando modelagem Markov (atualmente usando o algoritmo OMEN). Se você definir cobertura como 1, nenhuma força bruta será realizada. Se definir cobertura como 0, gerará apenas palpites usando ataques Markov. Este valor é um float, com o padrão sendo 0.6, o que significa que espera uma chance de 60% de que as palavras-base da senha alvo possam ser encontradas no conjunto de treinamento. Exemplo: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET -c 0.6 b. --save_sensitive: Se especificado, dados sensíveis como endereços de e-mail e sites completos descobertos durante o treinamento serão salvos no ruleset. Embora o gerador de guesses PCFG atualmente não utilize esses dados, eles são muito valiosos durante um ataque real de cracking de senhas. Isso está desligado por padrão para facilitar o uso desta ferramenta em um ambiente acadêmico. Observe que, mesmo quando desligado, quase certamente ainda haverá dados de PII salvos dentro de um ruleset, então proteja os rulesets gerados adequadamente. Exemplo: python3 trainer.py -t INPUT_PASSWORD_LIST -r NEW_RULESET --save_sensitive c. --comments: Adiciona um comentário ao arquivo de configuração do ruleset. Isso é útil para saber por que e como você gerou seu ruleset ao revisá-lo posteriormente. Inclua o comentário que deseja adicionar entre aspas.

Geração de Palpites

Isso gera palpites para stdout usando um ruleset PCFG previamente treinado. Esses palpites podem então ser canalizados para qualquer programa que você queira usar. Se nenhum ruleset for especificado, o ruleset padrão DEFAULT será usado. Para os fins deste guia, assumiremos que o ruleset usado é NEW_RULESET.

  1. Nota: o programa de geração de palpites é sensível a maiúsculas/minúsculas ao especificar o nome do ruleset.
  • Um nome de sessão não é obrigatório (por padrão, criará uma sessão chamada default_run), mas é útil para facilitar a reinicialização de uma sessão pausada/parada. Estes exemplos usarão o nome de sessão SESSION_NAME. Nota: não há verificação de sanidade embutida se você executar várias sessões com o mesmo nome ao mesmo tempo, mas é recomendável evitar isso.
  1. Para iniciar uma nova sessão de palpites, execute:
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME
  1. Para reiniciar uma sessão de palpites anterior, execute (Nota: você ainda precisa especificar o mesmo ruleset ao restaurar uma sessão):
  • python3 pcfg_guesser.py -r NEW_RULESET -s SESSION_NAME --load

Pontuação de Força de Senha

Existem muitos casos em que você pode querer estimar a probabilidade de uma senha ser gerada por um ruleset previamente treinado. Por exemplo, isso pode fazer parte de uma métrica de força de senha ou ser usado para outros fins de pesquisa. Um programa de exemplo foi incluído para realizar isso.

  • INPUT_LIST representa a lista de senhas a serem pontuadas. Essas senhas devem estar em texto simples e separadas por quebras de linha, com uma senha por linha.
  1. Para executar uma sessão de pontuação: python3 password_scorer -r NEW_RULESET -i INPUT_LIST
  2. Por padrão, a saída será para stdout, com cada senha pontuada por linha
  • O primeiro valor é a senha bruta
  • O segundo valor indicará se o valor de entrada foi pontuado como 'password', 'website', 'e-mail address' ou 'other'. Essa determinação de senha ou outro depende dos limites que você definir para o limite de guesses OMEN, bem como a probabilidade associada ao PCFG.
  • O terceiro valor é a probabilidade da senha de acordo com o Ruleset. Se for atribuído um valor 0.0, isso significa que a senha não será gerada pelo ruleset, embora possa ser gerada por um ataque baseado em Markov
  • O quarto valor é o nível OMEN que gerará a senha. Um valor de -1 significa que a senha não será gerada pelo OMEN.

Gerador de Lista de Palavras Prince-Ling

Nome: N-Gramas Indexados por Idioma PRINCE (Prince-Ling)

Visão Geral: Constrói listas de palavras personalizadas com base em um ruleset/gramática PCFG já treinado para uso em ataques de combinação estilo PRINCE. A ideia por trás disso é que, como o treinador PCFG já está dividindo um conjunto de treinamento de senhas em análises individuais, essas informações poderiam ser aproveitadas para fazer listas de palavras direcionadas para outros ataques.

Mecânica Básica: Nos bastidores, a ferramenta Prince-Ling é basicamente um mini-gerador de guesses PCFG. Ela remove a geração de guesses Markov e substitui as estruturas base usadas em ataques PCFG normais por uma estrutura base significativamente reduzida, adaptada para gerar listas de palavras PRINCE. Isso permite gerar palavras de dicionário em ordem de probabilidade com um olho em quão úteis essas palavras devem ser em um ataque PRINCE.

Usando Prince-Ling

  1. Treine um ruleset PCFG usando trainer.py. Nota: você precisa criar o ruleset usando a versão 4.1 ou posterior do conjunto de ferramentas PCFG, pois versões anteriores não aprenderam todas as estruturas de dados que Prince-Ling utiliza.
  2. Execute Prince-Ling python3 prince-ling.py -r NOME_DO_RULESET -t TAMANHO_DA_LISTA_DE_PALAVRAS_A_CRIAR -o NOME_DO_ARQUIVO_DE_SAIDA
  • --rule: Nome do ruleset PCFG para criar a lista de palavras PRINCE
  • --size: Número de palavras para criar na lista de palavras PRINCE. Nota: se não for especificado, Prince-Ling gerará todas as palavras possíveis, o que pode ser bastante grande dependendo se a manipulação de maiúsculas/minúsculas (case_mangling) estiver ativada. (A manipulação de maiúsculas/minúsculas aumenta enormemente o espaço de chaves)
  • --output: Nome do arquivo de saída para escrever as entradas. Nota: se não for especificado, Prince-Ling enviará palavras para stdout, o que pode causar problemas dependendo do shell que você está usando ao imprimir caracteres não ASCII.
  • --all_lower: Gera apenas palavras em minúsculas para o dicionário PRINCE. Isso é útil ao atacar hashes insensíveis a maiúsculas/minúsculas ou se você planeja aplicar manipulação direcionada de maiúsculas/minúsculas de outra forma.

Exemplo de Cracking de Senhas Usando John the Ripper

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

Contribuindo

Se você notar algum bug ou se tiver um recurso que gostaria de ver adicionado, por favor, abra uma issue nesta página do github. Também aceito pull requests, embora idealmente, por favor, vincule um pull request a uma issue para que eu possa revisá-lo mais facilmente, fazer perguntas e entender melhor as alterações que você está fazendo.

Há muitas melhorias que podem ser feitas na modelagem de estratégias de criação de senhas usando PCFGs. Estou muito aberto a novas ideias, alterações e sugestões. Só porque o código atualmente faz algo de uma certa maneira não significa que essa seja a melhor opção. Por exemplo, a estrutura base fundamental da abordagem atual em que as máscaras são geradas para strings alfanuméricas, dígitos, outros, etc., foi escolhida porque era a opção "mais fácil" de implementar. Minha equipe debateu muito que uma opção melhor poderia ser começar com uma palavra base e depois modelar regras de manipulação mais tradicionais aplicadas a ela como transições no PCFG. Então, fique à vontade para explorar este código!

Baixar ferramenta