
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 ), coloca esta string entre os tokens. Padrão: string vazia.
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).
--years e --append-numbering com um --numbering-limit ≥ os dois últimos dígitos de qualquer ano de entrada, provavelmente produzirá palavras duplicadas devido aos padrões de mutação implementados pela ferramenta.--minlen ou --maxlen, o script não pode pré-calcular a contagem exata de palavras; você verá um aviso de “tamanho exato não pode ser determinado” e o tamanho sem esse filtro será calculado, o tamanho final será menor.Quando se trata de pessoas, acho que todos nós (mais ou menos) já definimos senhas usando uma mutação de uma ou mais palavras que significam algo para nós, por exemplo, nosso nome ou nomes de esposa/filho/animal de estimação/banda, colocando o ano em que nascemos no final ou talvez um padding super seguro como "!@#". Bem, adivinhe?

Estou reunindo informações sobre padrões comuns de criação de senhas para aprimorar as capacidades da ferramenta.
-c--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.
Combine até 3 palavras (em vez do padrão 2)