NiceTryGPT

Torne CTFs mais difíceis de serem resolvidos por atalhos com LLMs - sem torná-los mais difíceis para humanos.

Documentação

NiceTryGPT ☕🤖

Menos correspondência de padrões. Mais hacking de verdade.

Um fluxo de trabalho de diff mínimo para reduzir atalhos baratos de LLM em desafios CTF existentes — sem torná-los piores para humanos.

Tests License: GPL-3.0 Version: v0.2.0 Website Cite DOI

Website · Método · Avaliação · Distribuição · Citação · Preservação · Roadmap · Feedback de autores de CTF

Seu CTF foi resolvido de uma vez por um LLM? Boa tentativa.

NiceTryGPT é uma Skill de Agente pequena que pega um desafio CTF existente e autorizado, resolve-o de ponta a ponta, identifica atalhos baratos de LLM e aplica a menor mudança útil para reduzi-los.

Sem tornar o desafio pior para humanos.

Aumente a incerteza, não a complexidade.

NiceTryGPT é intencionalmente pequeno: uma skill, três demonstrações minúsculas, uma suíte de testes E2E, sem framework.

Experimente em 30 segundos

Para uma skill do Claude Code local ao projeto, copie o diretório nice-try-gpt para o seu repositório CTF como:

.claude/skills/nice-try-gpt/
└── SKILL.md

Depois pergunte:

Use NiceTryGPT on this CTF. Solve it first, identify the cheapest LLM shortcut,
make the smallest useful change, and verify the result end-to-end.

O Claude Code descobre skills de projeto a partir de .claude/skills/<skill-name>/SKILL.md. Skills personalizadas também podem ser empacotadas e enviadas onde houver suporte. Veja a documentação oficial de Agent Skills.

Plugin do Claude Code

NiceTryGPT também é estruturado como um plugin nativo do Claude Code. A raiz do repositório contém .claude-plugin/plugin.json, e o Claude Code descobre automaticamente a skill espelhada em skills/nice-try-gpt/.

Para teste local do plugin:

claude --plugin-dir /path/to/NiceTryGPT

Um manifesto de marketplace independente também está preparado para que os usuários possam adicionar o repositório diretamente e instalar o plugin com:

/plugin marketplace add aleff-github/NiceTryGPT
/plugin install nice-try-gpt@nicetrygpt

O layout original da skill independente permanece disponível em nice-try-gpt/, então fluxos de instalação existentes via ZIP/projeto local continuam funcionando. Veja docs/claude-plugin.md para notas sobre estrutura do plugin, sincronização e distribuição.

Instalação entre agentes

NiceTryGPT também foi verificado com o instalador aberto skills. O instalador descobre exatamente uma skill nice-try-gpt deste repositório e pode instalá-la para Claude Code e outros agentes compatíveis:

npx -y skills add aleff-github/NiceTryGPT --skill nice-try-gpt

A verificação de compatibilidade foi executada com telemetria desabilitada; nenhuma contagem de instalação foi gerada pelo teste do projeto.

Distribuição e descoberta

NiceTryGPT mantém um repositório-fonte canônico, permitindo que diretórios e instaladores apontem de volta para ele.

Os sinais atuais de distribuição incluem:

  • uma submissão aberta upstream para anthropics/skills (#1798);
  • uma cópia indexada existente no marketplace do AI Skill Store;
  • compatibilidade com o CLI aberto skills usado por skills.sh e outras ferramentas de Agent Skills;
  • metadados amigáveis a crawlers por meio deste README, SKILL.md, llms.txt, CodeMeta e do site do projeto.

Para mantenedores de diretórios, links canônicos, uma descrição curta, categorias, palavras-chave, comandos de instalação e o limite de evidências estão reunidos em docs/distribution.md.

A inclusão em diretórios não é um endosso, e uma submissão pendente não é descrita como aceita até que seus mantenedores a publiquem ou mesclem.

Como funciona

UNDERSTAND
    ↓
SOLVE ORIGINAL
    ↓
FIND ONE CHEAP SHORTCUT
    ↓
MAKE 0–2 SMALL CHANGES
    ↓
SOLVE AGAIN
    ↓
REPORT

Se o desafio original não puder ser reproduzido, NiceTryGPT para. Se o desafio já estiver bom, NO CHANGE NEEDED é um resultado válido.

O que ele preserva

Uma transformação bem-sucedida mantém:

  • a mesma classe de vulnerabilidade;
  • o mesmo objetivo de aprendizado;
  • o mesmo conhecimento prévio necessário;
  • a mesma semântica de flag/sucesso;
  • aproximadamente a mesma faixa de dificuldade humana.

O padrão é uma mudança de resistência. Uma segunda mudança só se justifica quando a primeira é insuficiente e o limite de custo humano ainda passa.

Antes / depois

NiceTryGPT atualmente acompanha três exemplos deliberadamente minúsculos:

ExemploAntesDepoisCusto humano
mini-idorID de pedido adjacente dá a flagID de pedido estrangeiro deve ser observado em tempo de execução+1 requisição
mini-traversalcaminho de exportação estático é imediatamente reutilizávelnome do arquivo de exportação muda a cada execução e é exposto por atividade normal+1 requisição
mini-sqliidentidade privilegiada é entregue ao jogadoridentidade deve ser reconstruída a partir de duas superfícies normais do aplicativo+2 requisições

Todos mantêm a classe de vulnerabilidade original e o objetivo de aprendizado.

mini-idor

AntesDepois
VulnerabilidadeIDORIDOR
Atalho baratoTentar o ID de pedido adjacenteTentativa adjacente falha
Observação necessáriaNenhumaUma requisição de atividade em tempo de execução
Dificuldade humanaFácilAinda fácil
IscaNenhumaUma isca de download rasa e segura

mini-traversal

AntesDepois
VulnerabilidadePath traversalPath traversal
Atalho baratoCaminho ../exports/latest.txt estáticoCaminho estático falha
Observação necessáriaNenhumaUma requisição de atividade em tempo de execução
Dificuldade humanaFácilAinda fácil
IscaNenhumaNenhuma

O exemplo de traversal é intencionalmente útil como uma verificação de generalização: ele usa nenhum honeypot. A única mudança é mover um fato relevante para a solução do comportamento estático para o comportamento normal em tempo de execução.

mini-sqli

AntesDepois
VulnerabilidadeSQL injectionSQL injection
Atalho baratoIdentidade de admin mostrada diretamenteIdentidade antiga falha
Observação necessáriaNenhumaConectar handle + formato de e-mail da equipe
Padrão primárioNenhumDivisão de contexto
Dificuldade humanaFácilAinda fácil
Randomização em tempo de execuçãoNenhumaNenhuma

O exemplo de SQLi evita deliberadamente randomização em tempo de execução. A consulta vulnerável permanece inalterada; o jogador simplesmente precisa conectar duas pistas estáticas próximas do aplicativo antes de aplicar a mesma primitiva de injeção.

Execute as demonstrações

Nenhum pacote Python de terceiros é necessário.

python tests/test_demo.py
python tests/test_release.py

A suíte verifica que cada desafio original é solucionável, que o atalho barato identificado para de funcionar após a transformação, que a funcionalidade normal ainda funciona e que a vulnerabilidade pretendida ainda alcança a flag em tempo de execução.

Empacote a skill

Construa um ZIP determinístico contendo apenas a skill instalável:

python scripts/package_skill.py

Saída:

dist/nice-try-gpt-v0.2.0.zip

O ZIP mantém nice-try-gpt/ como diretório raiz, para que possa ser inspecionado ou copiado diretamente para um local compatível de Agent Skills.

Avaliações

NiceTryGPT agora inclui um protocolo de avaliação mínimo e reproduzível em evals/.

O primeiro piloto planejado é:

2 challenges
× 2 variants
× 3 model families
× 5 fresh-context runs
= 60 runs

O protocolo fixa isolamento, paridade de ferramentas, prompt, condições de parada e campos brutos de resultado. Nenhum resultado entre modelos é reivindicado até que essas execuções independentes sejam realmente coletadas.

Veja evals/protocol.md. Um registro público de candidatos a CTF separado agora rastreia desafios de código aberto e autoria independente que devem passar por portões locais de baseline e transformação antes de entrar na matriz de avaliação de modelos.

Roadmap

v0.2.0 — variedade sem inchaço está completo: o método agora abrange três classes de vulnerabilidade e inclui um padrão de resistência primário não baseado em tempo de execução.

O próximo marco de evidência é v0.3.0 — avaliação independente com múltiplos modelos.

Veja ROADMAP.md.

Padrões de resistência

NiceTryGPT atualmente usa um menu deliberadamente pequeno:

  • Quebra de padrão — remova uma pista que praticamente nomeia o exploit.
  • Descoberta em tempo de execução — torne um fato observável por meio de interação normal.
  • Divisão de contexto — conecte duas peças próximas do comportamento do aplicativo.
  • Dependência de estado — deixe uma pequena quantidade de estado comum importar.
  • Isca semântica — adicione um caminho plausível que seja barato de descartar.

Estas são opções, não uma lista de verificação. A maioria dos desafios deve precisar de zero ou uma.

Veja resistance-patterns.md.

Trabalho relacionado

NiceTryGPT não é um benchmark de resolução de CTF nem um sistema anti-trapaça. Seu foco estreito é a transformação mínima de um desafio existente e verificado, preservando seu objetivo de aprendizado e limitando o esforço humano adicional.

Veja docs/related-work.md para o posicionamento atual em relação a benchmarks de agentes CTF e trabalhos recentes de design de desafios cientes de LLM.

Citação

NiceTryGPT acompanha metadados legíveis por máquina CITATION.cff, para que o GitHub possa expor Cite este repositório com formatos APA e BibTeX gerados.

Para trabalho de pesquisa ou avaliação, cite o release ou commit que você realmente usou e registre a versão do modelo, acesso a ferramentas, contagem de execuções e protocolo de avaliação. O release atual v0.2.0 está arquivado no Zenodo com DOI 10.5281/zenodo.22858477. Veja CITING.md para a citação canônica legível por humanos e codemeta.json para metadados de software CodeMeta.

Preservação

NiceTryGPT separa distribuição, preservação e citação:

  • GitHub Releases fornece releases versionados do projeto;
  • Software Heritage preserva o repositório independentemente do GitHub; o primeiro snapshot concluído é swh:1:snp:6c77799e7623abf2653ab9363d3e2f57899174cf;
  • Zenodo preserva o arquivo-fonte v0.2.0 sob o DOI 10.5281/zenodo.22858477; releases futuros podem usar a integração conectada GitHub/Zenodo.

Veja docs/preservation.md para a estratégia de preservação e identificadores persistentes.

O que NiceTryGPT não fará

Não tornará intencionalmente um desafio irritante apenas para desacelerar uma IA.

Isso significa nada de:

  • CAPTCHA ou truques de verificação humana;
  • força bruta como requisito de design;
  • inundação de tokens/contexto;
  • camadas de codificação sem sentido;
  • trivia obscura;
  • flags falsas ou armadilhas destrutivas;
  • cadeias artificiais de exploits em cinco estágios;
  • pilhas de honeypots.

Se a resistência a LLM e a experiência humana entrarem em conflito, o jogador humano vence.

O que “resistente a LLM” significa aqui

NiceTryGPT não afirma provar que um desafio é à prova de IA.

Na v0.2.0, “resistência” significa reduzir um atalho barato identificado enquanto preserva o desafio pretendido. Uma auto-revisão com o mesmo modelo não é evidência de resistência; resolução em contexto novo ou entre modelos é relatada separadamente quando realmente executada.

Layout do repositório

NiceTryGPT/
├── README.md
├── CHANGELOG.md
├── VERSION
├── LICENSE
├── CITATION.cff
├── CITING.md
├── codemeta.json
├── SECURITY.md
├── CONTRIBUTING.md
├── .claude-plugin/
│   ├── plugin.json
│   └── marketplace.json
├── skills/
│   └── nice-try-gpt/
│       ├── SKILL.md
│       └── references/
├── nice-try-gpt/
│   ├── SKILL.md
│   └── references/
│       └── resistance-patterns.md
├── examples/
│   ├── mini-idor/
│   ├── mini-traversal/
│   └── mini-sqli/
├── evals/
│   ├── README.md
│   ├── protocol.md
│   ├── solver-prompt.txt
│   ├── results.csv
│   └── summarize.py
├── scripts/
│   ├── package_skill.py
│   └── sync_plugin_skill.py
└── tests/
    ├── test_demo.py
    └── test_release.py

Status do projeto

v0.2.0 — variedade sem inchaço.

O método é demonstrado em IDOR, path traversal e SQL injection. Relatórios de exemplo agora seguem um contrato de aceitação imposto por CI, e a divisão de contexto é demonstrada como um padrão de resistência primário não baseado em tempo de execução. A avaliação independente entre modelos permanece como o próximo marco de evidência.

Veja CHANGELOG.md.

Feedback de autores de CTF

Se você projeta, organiza ou ensina CTFs, feedback sobre a metodologia é especialmente útil.

As perguntas mais valiosas são:

  • o Limite de Custo Humano corresponde às restrições reais de design de desafios?
  • quais transformações parecem justas versus irritantes?
  • quais classes de vulnerabilidade são mais afetadas pela resolução de LLM em uma única tentativa?
  • quais evidências fariam você confiar em uma transformação antes/depois?

Use o formulário de feedback de autores de CTF. Nenhum resultado de avaliação de modelo é necessário para dar feedback de design.

Contribuindo

Contribuições pequenas e focadas são bem-vindas. Leia CONTRIBUTING.md primeiro.

Escopo e uso responsável

NiceTryGPT é destinado a desafios CTF, laboratórios de treinamento e sistemas que você possui ou está explicitamente autorizado a testar. Não é destinado a automatizar testes contra sistemas de terceiros sem autorização.

Mantenedor

Mantido por Alessandro Greco (@aleff-github).

Licença

GNU General Public License v3.0. Veja LICENSE.