
Gera milhões de mutações de senhas baseadas em palavras-chave em segundos.
Agradecimentos especiais a DavidAngelos:
▶️ Adicionada uma barra de progresso em cada etapa para acompanhar a execução.
▶️ Opções adicionadas:
-i / --inorder): une palavras-chave apenas na ordem original (ex.: foo,bar,baz → foo, bar, baz, foobar, foobaz, barbaz, foobarbaz).-c / --combinations): gera todas as ordenações de cada subconjunto (ex.: foo,bar,baz → foo, bar, baz, foobar, foobaz, barfoo, …, bazbarfoo).--sep <string>): ao unir palavras, insere esta string entre os tokens (padrão: nenhum separador).--max-combine <N>): limita quantas palavras-chave brutas são unidas (padrão: 2).--minlen/--maxlen <N>): filtra a wordlist final apenas com palavras do comprimento desejado.Psudohash é um gerador de listas de senhas para orquestrar ataques de força bruta e quebrar hashes. Ele imita certos padrões de criação de senha comumente usados por humanos, como substituir letras de uma palavra por símbolos ou números (leet), usar variações de maiúsculas/minúsculas, adicionar um padding comum antes ou depois da frase principal e mais. É baseado em palavras-chave e altamente personalizável. 🎥 -> Apresentação em vídeo
Administradores de sistemas e outros funcionários frequentemente usam uma versão mutada do nome da empresa para definir senhas (ex.: Am@z0n_2022). Isso é comum para dispositivos de rede (pontos de acesso Wi-Fi, switches, roteadores, etc.), aplicativos ou até contas de domínio. Com as opções mais básicas, o psudohash pode gerar uma wordlist com todas as mutações possíveis de uma ou mais palavras-chave, baseadas em padrões comuns de substituição de caracteres (personalizáveis), variações de maiúsculas/minúsculas, strings comumente usadas como padding e mais. Veja o exemplo a seguir:

O script implementa o seguinte esquema de substituição de caracteres. Você pode adicionar/modificar mapeamentos de substituição de caracteres editando a lista transformations em psudohash.py e seguindo a estrutura de dados apresentada abaixo (padrão):
transformations = [
{'a' : ['@', '4']},
{'b' : '8'},
{'e' : '3'},
{'g' : ['9', '6']},
{'i' : ['1', '!']},
{'o' : '0'},
{'s' : ['$', '5']},
{'t' : '7'}
]
Ao definir senhas, acredito que seja bastante padrão adicionar uma sequência de caracteres antes e/ou depois da frase principal para torná-la "mais forte". Por exemplo, alguém pode definir uma senha "dragon" e adicionar um valor como "!!!" ou "!@#" no final, resultando em "dragon!!!", "dragon!@#", etc. O psudohash lê esses valores de common_padding_values.txt e os utiliza para mutar as palavras-chave fornecidas, anexando-os antes (-cpb) ou depois (-cpa) de cada variação de palavra-chave gerada. Você pode modificá-lo conforme desejar.
Ao anexar um valor de ano a uma palavra-chave mutada, o psudohash o fará utilizando vários separadores. Por padrão, ele usará os seguintes separadores, que você pode modificar editando a lista year_seperators:
year_seperators = ['', '_', '-', '@']
Por exemplo, se a palavra-chave fornecida for "amazon" e a opção -y 2023 for usada, a saída incluirá "amazon2023", "amazon_2023", "amazon-2023", "amazon@2023", "amazon23", "amazon_23", "amazon-23", "amazon@23".
Instale Python 3.x e tqdm primeiro:
pip3 install tqdm
Em seguida, clone o repositório e torne o script executável:
git clone https://github.com/t3l3machus/psudohash.git
cd ./psudohash
chmod +x psudohash.py
./psudohash.py [-h] -w WORDS [-i] [-c] [--sep SEP] [--max-combine N] [-an LEVEL] [-nl LIMIT] [-y YEARS] [-ap VALUES] [-cpb] [-cpa] [-cpo] [-o FILENAME] [-q]
O diálogo de ajuda [ -h, --help ] inclui detalhes de uso e exemplos.
-w, --words <kw1,kw2,…>
Palavras-chave brutas separadas por vírgula (obrigatório).
-i, --inorder
Une até --max-combine palavras-chave na ordem dada (ex.: foo,bar,baz → foo, bar, baz, foobar, foobaz, barbaz, foobarbaz).
-c, --combinations
Gera toda permutação de cada subconjunto (até --max-combine) (ex.: foo,bar,baz → foo, bar, baz, foobar, foobaz, barfoo, …).
--max-combine <N> (padrão: 2)
Número máximo de palavras-chave brutas para unir em uma única string base.
--sep <string>
Ao unir palavras (-i ou -c), coloca esta string entre os tokens. Padrão: string vazia.
--minlen <N>
Descarta qualquer senha final com menos de N caracteres.
--maxlen <N>
Descarta qualquer senha final com mais de N caracteres.
-an, --append-numbering <LEVEL>
Anexa sufixos numerados (preenchidos com zeros até <LEVEL> dígitos) a cada mutação de palavra.
-nl, --numbering-limit <LIMIT>
Número máximo a contar ao anexar números (padrão: 50).
-y, --years <years>
Anexa um ou mais anos a cada mutação (ex.: 1990-2000, ou 2022,2023).
-ap, --append-padding <vals>
Anexa valores de padding personalizados (separados por vírgula). Deve ser usado com -cpb ou -cpa.
-cpb, --common-paddings-before
Prefixa valores de common_padding_values.txt antes de cada mutação.
-cpa, --common-paddings-after
Anexa valores de common_padding_values.txt após cada mutação.
-cpo, --custom-paddings-only
Usa apenas paddings fornecidos pelo usuário (sem padrões). Deve ser usado com -ap.
-o, --output <file>
Escreve os resultados em <file> (padrão: output.txt).
-q, --quiet
Suprime o banner de arte ASCII na inicialização.
Sem múltiplas palavras (apenas singletons)
./psudohash.py -w foo,bar,baz -cpa
# → foo, bar, baz
Uniões em ordem (-i, até 2 palavras por padrão)
./psudohash.py -w foo,bar,baz -i
# → foo, bar, baz, foobar, foobaz, barbaz
Combinações em todas as ordens (-c, até 2 palavras por padrão)
./psudohash.py -w foo,bar,baz -c
# → foo, bar, baz, foobar, foobaz, barfoo, barbaz, bazfoo, bazbar
Alterar separador entre palavras unidas
./psudohash.py -w foo,bar,baz -i --sep "_"
# → foo, bar, baz, foo_bar, foo_baz, bar_baz
Filtro de comprimento (--minlen/--maxlen)
./psudohash.py -w apple,banana -i --minlen 10
# Aviso: o tamanho exato não pode ser determinado por causa dos filtros de comprimento.
# Exemplos de saídas finais podem incluir “applebanana” (11 caracteres), “bananaapple” (11 caracteres).
Combine até 3 palavras (em vez do padrão 2)