fuzzing-dictionary
por trailofbitsA skill fuzzing-dictionary ajuda você a criar dicionários de fuzzing com tokens específicos de domínio, valores mágicos e strings de protocolo para parsers, protocolos e formatos de arquivo. Ela é útil quando a mutação cega trava e você precisa de mais cobertura com libFuzzer, AFL++ ou cargo-fuzz.
Esta skill recebe 78/100, o que a torna uma candidata sólida para a lista: quem navega no diretório entende rapidamente quando usá-la, e o conteúdo traz detalhes de fluxo suficientes para reduzir a incerteza em comparação com um prompt genérico de fuzzing. Ela é útil se você quer um guia reutilizável para fuzzing guiado por dicionário, embora seja mais voltada à técnica do que à operação da ferramenta.
- A orientação explícita sobre quando usar em fuzzing de parsers, protocolos e formatos de arquivo facilita para um agente identificar o momento certo de aplicar a skill.
- O conteúdo operacional é substancial, com conceitos concretos como entradas entre aspas, escapes hexadecimais, injeção de tokens e formatos compatíveis entre fuzzers (libFuzzer, AFL++, cargo-fuzz).
- O corpo do texto inclui headings estruturados e sinais de fluxo de trabalho, o que ajuda na divulgação progressiva e acelera a compreensão pelo agente.
- Não há comando de instalação, scripts nem arquivos complementares, então o usuário não deve esperar automação ou ferramentas prontas para اجرا.
- A skill é focada na técnica, e não em um fluxo completo de fuzzing de ponta a ponta, então os agentes ainda podem precisar de contexto externo para criar dicionários específicos para cada alvo.
Visão geral da skill fuzzing-dictionary
A skill fuzzing-dictionary ajuda você a criar e usar dicionários de fuzzing: tokens curados, valores mágicos e strings de protocolo que guiam um fuzzer para partes mais profundas do código de parser, protocolo ou formato de arquivo. Se você está fazendo fuzzing com libFuzzer, AFL++ ou cargo-fuzz e a mutação cega estagnou, a skill fuzzing-dictionary oferece uma forma prática de melhorar a cobertura sem reescrever o fuzz target.
Essa skill é ideal para quem já tem um target que executa, mas precisa alcançar melhor a lógica mais pesada de validação. Ela é especialmente útil quando os inputs contêm palavras-chave reservadas, cabeçalhos estruturados, verbos de comando ou constantes específicas de formato que o fuzzing aleatório costuma deixar passar.
O que a skill fuzzing-dictionary resolve
A principal função é transformar “meu fuzzer travou” em uma estratégia de entrada mais guiada. Um bom dicionário de fuzzing pode ajudar a contornar rejeições iniciais, destravar ramificações de parsing com estado e expor edge cases que só aparecem depois que alguns tokens com aparência válida já estão presentes.
Onde ela funciona melhor
Use fuzzing-dictionary quando você estiver fuzzando parsers, manipuladores de protocolo ou leitores de arquivo com tokens reconhecíveis. Ela é uma boa escolha quando a estrutura da entrada importa mais do que o caos bruto de bytes, e uma escolha mais fraca para código puramente aritmético, transformações de imagem ou lógica pesada sem vocabulário de tokens.
Por que essa skill é diferente
A skill fuzzing-dictionary não é só “adicionar mais strings”. Ela se concentra em escolher tokens que combinem com as regras de validação e parsing do target e depois formatá-los de um jeito que o seu fuzzer realmente consiga consumir. Isso a torna mais útil do que um prompt genérico quando você precisa de um dicionário acionável, e não apenas plausível.
Como usar a skill fuzzing-dictionary
Instale e localize a origem
Comece pelo fluxo de instalação do diretório: npx skills add trailofbits/skills --skill fuzzing-dictionary. Depois de instalar, comece por SKILL.md e então leia qualquer material vinculado na mesma pasta da skill. Neste repo, a skill é autossuficiente, então a principal fonte é o próprio arquivo da skill.
Transforme seu target em um prompt útil
O uso de fuzzing-dictionary funciona melhor quando você informa o domínio do target, o formato de entrada e o modo de falha. Por exemplo, em vez de pedir “um fuzzing dictionary para meu app”, peça:
- o nome do parser ou do protocolo
- exemplos de input ou pistas de gramática
- palavras-chave conhecidas, headers, magic bytes ou delimitadores
- qual fuzzer você usa e quais são as expectativas de formato do dicionário
- qual cobertura está faltando ou em que ponto a validação falha
Um prompt forte soa assim: “Crie um fuzzing-dictionary para um parser de protocolo tipo DNS. Inclua tipos de registro comuns, delimitadores e tokens de controle, e formate para AFL++.”
Leia a skill na ordem certa
Neste repositório, o caminho mais útil é:
SKILL.mdpara o fluxo de trabalho e as regras de aplicabilidade- Quaisquer exemplos inline de entradas do dicionário e categorias de tokens
- A orientação “When to Apply” para não usar a skill em um target que não vai se beneficiar
Dicas práticas de uso
Mantenha as entradas curtas, com aparência válida e específicas do domínio. Misture tokens óbvios com algumas variantes de limite ou malformadas quando o target já for conhecido por rejeitar entradas cedo. Se o primeiro dicionário ficar genérico demais, refine-o com base nos checkpoints exatos de parsing que o seu target alcança antes de falhar.
Perguntas frequentes sobre a skill fuzzing-dictionary
fuzzing-dictionary é só para especialistas em fuzzing?
Não. A skill fuzzing-dictionary pode ser usada por iniciantes que já sabem o que estão fuzzando e conseguem fornecer exemplos de input. Você não precisa dominar os detalhes internos do fuzzer, mas precisa de contexto suficiente para descrever o vocabulário de tokens do target.
Quando eu não devo usar essa skill?
Evite fuzzing-dictionary se o target não tiver tokens de entrada relevantes, se a cobertura já estiver boa sem orientação ou se o gargalo estiver no design do harness e não na qualidade da entrada. Um dicionário não corrige um fuzz target quebrado, um bug que só gera crash ou um problema causado por falta de seeds no corpus.
Como isso é diferente de um prompt normal?
Um prompt normal muitas vezes produz uma lista genérica de tokens. A skill fuzzing-dictionary é mais útil porque é orientada a um fluxo de trabalho instalável, à formatação compatível com o fuzzer e às condições específicas em que dicionários realmente melhoram a cobertura. Isso a torna melhor para decisões de fuzzing-dictionary install e para uso repetível.
Isso serve para todos os fuzzers?
Ela se encaixa nos principais ecossistemas compatíveis com dicionários, especialmente libFuzzer, AFL++ e cargo-fuzz. Se sua toolchain usa outro mecanismo de entrada, você ainda pode aproveitar a lógica de seleção de tokens, mas deve verificar a sintaxe de dicionário exigida antes de usar.
Como melhorar a skill fuzzing-dictionary
Traga evidências melhores do target
A melhor entrada para fuzzing-dictionary guide inclui tokens reais do target: verbos de protocolo, nomes de enums, rótulos de campos, números mágicos ou palavras-chave reservadas. Até um corpus pequeno ou alguns inputs que falharam já pode melhorar muito a seleção de tokens em comparação com uma descrição vaga do projeto.
Peça tokens por finalidade
Ao usar fuzzing-dictionary for Code Generation, separe os tokens por função: palavras-chave obrigatórias, modificadores opcionais, valores de limite e variantes malformadas. Isso ajuda o resultado a cobrir tanto caminhos válidos de parsing quanto edge cases quase válidos, em vez de gerar uma lista plana de strings.
Fique atento aos modos de falha mais comuns
Os erros mais frequentes são dicionários amplos demais, entradas que não batem com a gramática do target e tokens longos demais para ajudar a mutação. Se o primeiro resultado parecer genérico, restrinja o escopo a um parser, um conjunto de comandos de protocolo ou uma seção específica de formato de arquivo e gere novamente.
Itere depois da primeira rodada
Use a primeira passada de fuzzing para ver quais tokens realmente aumentam a cobertura ou alcançam novos estados. Depois, remova entradas mortas, adicione palavras-chave que faltaram a partir de traces ou logs e regenere um fuzzing-dictionary menor e mais preciso, em vez de expandi-lo sem limite.
