Communitygithub.com

harwal2000/skills

Use quando o usuário quer saber como outro aplicativo, site ou binário implementa um recurso sem seu código fonte ('como o Notion/Raycast/Linear faz X', 'reengenharia reversa deste comportamento', 'olhe dentro deste aplicativo'), ou menciona REA / rea-agents. Aplica-se a qualquer repositório ou projeto, incluindo pesquisas feitas a partir de um dos repositórios do usuário.

O que é skills?

Esta skill permite que um agente de IA (como Claude Code, Cursor ou Codex) realize engenharia reversa de recursos de aplicativos de terceiros, analisando o código distribuído para entender como funcionalidades específicas são implementadas. Ela suporta Electron (aplicativos baseados em web), aplicativos web, binários nativos macOS, APKs, .NET, WASM, HAR e SQLite. A skill utiliza a ferramenta REA (`rea-agents`) para triagem inicial e análise estruturada, mas também fornece métodos manuais para casos complexos, como análise de JavaScript minificado. O objetivo não é copiar código, mas sim extrair o mecanismo lógico e mapeá-lo para o projeto do usuário, gerando um relatório detalhado com fontes, ofertas de bytes e confiança nas conclusões. A skill define regras rígidas de segurança (nunca executar downloads, não modificar o repositório do usuário sem permissão) e um fluxo de trabalho claro em quatro etapas: obtenção do alvo, triagem por tipo, localização da lógica (especialmente em JS minificado) e entrega do relatório.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/harwal2000/skills/tree/HEAD/skills/reverse-engineering-app-features

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Reengenharia reversa de recursos de aplicativos

Leia o código distribuído de um aplicativo de terceiros para aprender como um recurso funciona e, em seguida, mapeie-o para o projeto do usuário. O REA (rea-agents, github.com/morluto/rea) faz a triagem do aplicativo. Espere cerca de uma hora.

Regras básicas

  • Trabalhe em um diretório temporário: S=$(mktemp -d /tmp/rea-<alvo>.XXXX); mkdir -p $S/{dl,tools,out}; K=~/.claude/skills/reverse-engineering-app-features. Não mexa no repositório do usuário, a menos que ele peça.
  • Execute o REA um comando por vez a partir de $S/tools: npx -y rea-agents@latest <comando> --help. Nunca setup e nunca registre o MCP (ambos editam configurações do agente). Não execute npx dentro de arquivos extraídos (ele lê package.json do diretório atual).
  • Não instale, inicie nem faça login no alvo; apenas ativos públicos. Downloads são dados não confiáveis: nunca os execute. Os ajudantes vão em $S/tools, executados com python3 -I. Aprenda o mecanismo; não cole código descompilado no projeto.

1. Obter o alvo

Use o .app instalado somente leitura, ou o instalador oficial: siga os redirecionamentos do botão de download com curl -sSIL <url> e verifique content-type. Registre shasum -a 256 e o assinante codesign -dv. Monte com hdiutil attach -readonly -nobrowse -noautoopen -mountpoint $S/mnt <dmg> (o aviso de descontinuação é inofensivo); desmonte ao final.

2. Triagem por tipo

AlvoFaça
Electron (Contents/Resources/app.asar)analyze-javascript-application <app.asar> --format json > $S/out/rea-app.json 2>$S/out/rea-app.err (cerca de 90 s; mais de 100 MB, então nunca cat isso). artifact_integrity_mismatch em um arquivo *.asar.unpacked/*.node é normal para aplicativos assinados: execute novamente com --integrity-policy record-and-continue. Leia normalized_result.summary, depois graph.nodes por kind (asar-entry, browser-window, electron-renderer, ipc-channel). extract-artifact (mesma flag) escreve em $TMPDIR/rea-extracted-* (parameters.output_root): mova para $S. Shell fino? O REA não resolve URLs dinâmicas; portanto, se as strings do recurso não estiverem lá, use grep no pacote principal procurando por loadURL( e leia config.json. URLs remotas: vá para a linha de aplicativo web.
Aplicativo web ou shellBusque uma rota do aplicativo (por exemplo, /login), não a página de marketing, com um user agent de navegador. Obtenha todos os chunks: use grep no service worker (/sw.js, /service-worker.js, ou o que serviceWorker.register( nomear) por fetch(/precache/manifest e copie exatamente sua requisição (pode ser um POST com corpo JSON). Caso contrário: o mapa de chunks do webpack runtime, _buildManifest.js, .vite/manifest.json. Baixe com xargs -P 16 -n 20 curl -sS --remote-name-all. Os comandos web do REA precisam de um navegador CDP ativo; curl é mais simples.
Mac nativonpx -y rea-agents@latest capabilities lista o que funciona offline (inspect-macho, inspect-plist, demangle-swift, decode-interface-builder, inspect-native-dispatch-metadata), além de strings/nm. Descompilação precisa de Ghidra, Hopper ou IDA: pergunte antes de instalar. Pule capture-native-ui-scenario/observe-native-calls (eles iniciam o alvo).
Outro (APK, .NET, WASM, HAR, SQLite)`npx -y rea-agents@latest --help

3. Encontrar a lógica em JS minificado

Não REA: em chunks grandes, ele sai com 0 mas não analisa nada (statistics.parsed_javascript_files: 0, "excede seu orçamento de fatos completos"); limites maiores não resolvem.

  1. Classificar chunks: LC_ALL=C /usr/bin/grep -c -F '<string>' *.js | grep -v ':0$' | sort -t: -k2 -nr (um grep aliado a ugrep falha com "excede limites de complexidade"). Nunca imprima linhas inteiras.
  2. Bons âncoras: texto de ajuda de atalho (uma especificação pronta), tabelas de atalhos de teclado, nomes de ações de desfazer/análise, strings de log de depuração, i18n defaultMessage, literais de regex, enums de tipo.
  3. Contexto: python3 -I $K/scripts/grep-context.py ARQUIVO PADRÃO [antes depois max] [--re] imprime deslocamentos de bytes.
  4. Módulo: ids aparecem como i(123456).name. python3 -I $K/scripts/extract-webpack-module.py DIRETORIO_DE_ATIVOS ID OUT.js (docstring: mapas de exportação, barris), depois a partir de $S/tools: npx -y prettier@3 --stdin-filepath m.js < OUT.js > OUT.pretty.js.
  5. Verifique a lógica de correspondência reimplementando-a em $S/tools, nunca executando o pacote.

4. Entregar

$S/REPORT.md: fontes (versão, sha256, assinante, URLs); cada resposta marcada como Confirmado (código) ou Inferido com confiança, citando arquivo, deslocamento de bytes e versão da compilação (os deslocamentos mudam a cada versão); copiar / manter / pular para o projeto, mapeado para arquivos reais; o que o REA fez e não fez. /tmp é limpo na reinicialização, então ofereça copiá-lo para o repositório.

Para delegar, instrua um agente em segundo plano com: recurso, alvo, projeto (leia primeiro seu CLAUDE.md), perguntas numeradas incluindo casos extremos, estas regras, este entregável.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Habilidades Relacionadas