Cria listas de senhas personalizadas baseadas em termos específicos do alvo.

Contexto

Senhas raramente são aleatórias. Usuários e empresas tendem a criar senhas baseadas em nomes próprios, anos de fundação, nomes de animais de estimação ou o nome da própria empresa seguido de um caractere especial.

O objetivo deste módulo é:

  • Customização Extrema: Gerar milhares de combinações possíveis a partir de palavras-chave fornecidas pelo Pentester após a fase de Reconhecimento (Lições 01 a 06).
  • Permutação: Aplicar padrões comuns de criação de senhas, como substituir "a" por "@", "s" por "$", ou adicionar o ano atual ao final da string.
  • Eficiência: Criar uma lista focada que tem muito mais chances de sucesso em um ataque de força bruta do que uma lista genérica de 10 GB.

Possibilidades de Implementação

  • Leet Speak: Transformar gabriel em g4br13l.
  • Concatenação de Datas: Combinar termos com anos (2024, 2025, 2026).
  • Iteração de Caracteres Especiais: Adicionar !, @, # ou 123 ao final de cada palavra.
  • Capitalização: Gerar variações com a primeira letra maiúscula, todas maiúsculas ou alternadas.

Código

Este módulo utiliza a biblioteca nativa itertools para realizar permutações eficientes e lógicas de substituição de caracteres.

import itertools

def wordlist_generator(base_words, years, chars):
    """
    Gera combinações de senhas baseadas em palavras-chave, anos e caracteres.
    """
    print(f"[*] Gerando wordlist baseada em {len(base_words)} termos...")

    # Dicionário simples de Leet Speak
    leet_map = {'a': '4', 'e': '3', 'i': '1', 'o': '0', 's': '5', 't': '7'}

    results = set()

    for word in base_words:
        # 1. Adiciona a palavra original, maiúscula e capitalizada
        variations = [word, word.upper(), word.capitalize()]

        # 2. Gera uma versão Leet Speak básica
        leet_word = "".join([leet_map.get(c.lower(), c) for c in word])
        variations.append(leet_word)

        for v in variations:
            results.add(v)
            # 3. Combina com anos
            for year in years:
                results.add(f"{v}{year}")
                results.add(f"{v}_{year}")

            # 4. Combina com caracteres especiais
            for char in chars:
                results.add(f"{v}{char}")
                results.add(f"{v}{year}{char}")

    return sorted(list(results))

def main():
    print("=" * 60)
    print("Módulo: Wordlist Generator | Projeto: 30 Lessons in Python")
    print("=" * 60)

    # Dados coletados na fase de Reconhecimento (OSINT)
    termos = ["Salvador", "Bahia", "Hunter", "Mystique"]
    anos = ["2025", "2026"]
    especiais = ["!", "@", "#", "$"]

    wordlist = wordlist_generator(termos, anos, especiais)

    # Salva em arquivo para uso em outras ferramentas (Hydra, Hashcat, etc)
    with open("custom_wordlist.txt", "w") as f:
        for password in wordlist:
            f.write(f"{password}\n")

    print(f"\n[+] Wordlist gerada com sucesso!")
    print(f"[+] Total de combinações: {len(wordlist)}")
    print(f"[+] Arquivo salvo como: custom_wordlist.txt")
    print(f"[*] Exemplos gerados: {wordlist[:5]} ... {wordlist[-5:]}")

if __name__ == "__main__":
    main()

Observações

  • Explosão Combinatória: Como Software Architect, você sabe que muitas variáveis podem gerar arquivos gigantescos. É importante filtrar a wordlist para não tornar o ataque de força bruta impossível de terminar.
  • Relevância Local: Em Salvador, por exemplo, incluir termos como feriados locais ou nomes de bairros pode aumentar drasticamente a eficácia da lista.
  • Integração: Esta wordlist pode ser usada diretamente nos módulos anteriores que criamos: SSH Brute Forcer e FTP Password Cracker.