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.
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
skillsusado 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:
| Exemplo | Antes | Depois | Custo humano |
|---|---|---|---|
mini-idor | ID de pedido adjacente dá a flag | ID de pedido estrangeiro deve ser observado em tempo de execução | +1 requisição |
mini-traversal | caminho de exportação estático é imediatamente reutilizável | nome do arquivo de exportação muda a cada execução e é exposto por atividade normal | +1 requisição |
mini-sqli | identidade privilegiada é entregue ao jogador | identidade 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
| Antes | Depois | |
|---|---|---|
| Vulnerabilidade | IDOR | IDOR |
| Atalho barato | Tentar o ID de pedido adjacente | Tentativa adjacente falha |
| Observação necessária | Nenhuma | Uma requisição de atividade em tempo de execução |
| Dificuldade humana | Fácil | Ainda fácil |
| Isca | Nenhuma | Uma isca de download rasa e segura |
mini-traversal
| Antes | Depois | |
|---|---|---|
| Vulnerabilidade | Path traversal | Path traversal |
| Atalho barato | Caminho ../exports/latest.txt estático | Caminho estático falha |
| Observação necessária | Nenhuma | Uma requisição de atividade em tempo de execução |
| Dificuldade humana | Fácil | Ainda fácil |
| Isca | Nenhuma | Nenhuma |
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
| Antes | Depois | |
|---|---|---|
| Vulnerabilidade | SQL injection | SQL injection |
| Atalho barato | Identidade de admin mostrada diretamente | Identidade antiga falha |
| Observação necessária | Nenhuma | Conectar handle + formato de e-mail da equipe |
| Padrão primário | Nenhum | Divisão de contexto |
| Dificuldade humana | Fácil | Ainda fácil |
| Randomização em tempo de execução | Nenhuma | Nenhuma |
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.