Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔍 Sherlock-Go

Uma ferramenta de inteligência de fontes abertas (OSINT) desenvolvida em Go para buscar contas ativas de forma extremamente rápida em centenas de redes sociais e websites simultaneamente.

Inspirado no clássico Sherlock em Python, o Sherlock-Go aproveita todo o poder do modelo de concorrência nativo do Go para realizar buscas centenas de vezes mais rápidas.


⚡ Sobre o Projeto e Vantagens do Go

O Sherlock-Go foi projetado para analistas de segurança, pesquisadores e curiosos que precisam verificar a presença digital de um nome de usuário.

Por que Go?

  • Concorrência Nativa (Goroutines): Em vez de usar threads pesadas ou bibliotecas assíncronas complexas, o Go utiliza goroutines leves. Isso permite disparar mais de 400 consultas de rede simultâneas gastando o mínimo de memória.
  • Binário Único Compilado: Diferente do Python, que exige a instalação de dependências como pip e interpretadores no sistema, o Sherlock-Go é compilado em um único executável sem dependências externas.
  • Velocidade de Execução: Menor tempo de CPU e inicialização imediata.

⚙️ Como Funciona?

O funcionamento interno do Sherlock-Go é estruturado em fases de validação inteligente para garantir precisão e velocidade.

graph TD
    A[Início: Username] --> B[Carregar Banco de Dados JSON]
    B --> C[Pré-Validação de Regex por Site]
    C -- Inválido --> D[Descartar/Marcar Inexistente]
    C -- Válido --> E[Adicionar ao Pool de Concorrência]
    E --> F[Disparar Goroutine]
    F --> G{Executar Requisição HTTP}
    G -- Sucesso --> H{Analisar Tipo de Erro/Validação}
    G -- Falha de Rede --> I[Registrar Erro / Ignorar]
    H -- Status Code 2xx --> J[Confirmar Existência]
    H -- Mensagem no Body --> K[Confirmar Existência/Inexistência]
    H -- URL de Resposta/Redirect --> L[Confirmar Existência/Inexistência]
    J & K & L -- Encontrado --> M[Acumular Resultados]
    M --> N[Ordenar Alfabeticamente A-Z]
    N --> O[Imprimir no Terminal e Salvar Relatórios]
Loading

1. Pool de Concorrência e Semáforos

Para evitar sobrecarga de rede e banimento de IPs pelos servidores das redes sociais, a concorrência é limitada usando um semáforo de canais:

sem := make(chan struct{}, 100) // Limite de 100 requisições simultâneas

2. Filtro Local por Regex (Evita Requisições Desnecessárias)

Antes de fazer qualquer requisição à internet, o programa valida o formato do nome do usuário de acordo com as regras de cada site (se cadastrado no banco de dados):

  • Se o site exige caracteres específicos (ex: apenas letras e números) ou um limite de tamanho (ex: de 4 a 12 caracteres), e o username fornecido descumprir essas regras, o site é ignorado localmente de imediato.

3. Técnicas de Detecção de Perfil (ErrorType)

Como cada site se comporta de forma diferente quando um perfil não existe, o Sherlock-Go suporta três técnicas de validação:

  • status_code: Verifica se a resposta HTTP é de sucesso (família 2xx). Se retornar 404 Not Found, o perfil é classificado como inexistente.
  • message: A busca lê o conteúdo HTML retornado pelo site e procura por mensagens de erro cadastradas (ex: "Esta conta não existe", "Usuário não encontrado"). Se a mensagem for encontrada no corpo, a conta é classificada como inexistente.
  • response_url: Alguns sites redirecionam requisições de contas inexistentes para uma página genérica (ex: página inicial ou login). O programa analisa a URL final após os redirecionamentos. Se ela coincidir com a URL de erro padrão do site, a conta não existe.

🚀 Guia de Uso e Comandos

Execução Básica

Para compilar e rodar o programa localmente informando um username:

go run main.go <username>

Flag de Opções Disponíveis

Flag Atalho Tipo Descrição Padrão
--database -d string Caminho do arquivo de banco de dados JSON. date.json
--proxy -p string URL do proxy único (Ex: http://127.0.0.1:8080). ""
--proxy-list -pl string Arquivo com lista de proxies (um por linha) para rotação. ""
--tor -t bool Usa o proxy local da rede Tor (socks5://127.0.0.1:9050). false
--json -j string Caminho para salvar os resultados encontrados em formato JSON. ""
--verbose -v bool Habilita logs detalhados (exibe erros de conexão nos testes). false

💡 Exemplos de Comandos Recomendados

1. Busca Simples

Busca o usuário samuel em todas as redes configuradas no banco padrão:

go run main.go samuel

2. Exportando os resultados para JSON

Ideal para automatizações e integrações com outros sistemas. Salva a lista de perfis encontrados em resultados.json:

go run main.go -j resultados.json samuel

3. Utilizando Rotação de Proxies

Para evitar bloqueios por limites de requisição (Rate Limiting), você pode passar um arquivo contendo vários proxies. O Sherlock-Go alternará automaticamente entre eles em sistema Round-Robin:

go run main.go --proxy-list proxies.txt samuel

4. Busca Anônima com a Rede Tor

Se você tiver o serviço do Tor rodando localmente (na porta padrão 9050), pode encapsular todo o tráfego do Sherlock-Go através da rede Tor:

go run main.go --tor samuel

5. Execução em Modo Verboso (Para Debug)

Útil se quiser ver o motivo de cada site falhar (como erros de timeout ou bloqueios SSL/Cloudflare):

go run main.go -v samuel

📝 Relatórios de Resultados

Ao final de cada execução, o Sherlock-Go:

  1. Imprime os sites encontrados ordenados alfabeticamente (A-Z) no terminal.
  2. Salva um arquivo de relatório em Markdown nomeado com o próprio nome do usuário (ex: samuel.md) contendo a lista completa de links ativos. Isso preserva a documentação principal do projeto (README.md).

📂 Como Personalizar e Adicionar Sites (date.json)

Você pode expandir a lista de sites adicionando novas regras ao arquivo date.json. Cada entrada segue a seguinte estrutura:

  "Nome_Da_Rede_Social": {
    "url": "https://nomedaurl.com/{}",
    "urlProbe": "https://url_de_teste.com/{}",
    "errorType": "status_code",
    "regexCheck": "^[a-zA-Z0-9_-]{3,15}$"
  }
  • {}: Representa onde o nome do usuário será injetado.
  • urlProbe (opcional): URL usada para testes de requisição (caso o site exiba o perfil sob uma URL diferente da de visualização).
  • regexCheck (opcional): Expressão regular para validar o formato do nome de usuário antes de enviar a requisição de rede.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages