Como fazer · modelo aberto + harness local + REA

Quebre a restrição: seu agente sem travas, no seu computador

Um modelo aberto que não recusa engenharia reversa legítima, o harness dsh rodando local e o REA ligando o Ghidra. Você aponta um app e pede a sua versão.

Seu agente sem travas: modelo aberto + harness local + REA
Em resumo

Este é um guia em português para recriar um programa de computador do seu jeito usando três peças abertas: um harness de agente local (o dsh, agente de código da DeepSeek), um modelo aberto "sem trava" rodando no Ollama e o REA, que dá ao agente ferramentas de engenharia reversa como o Ghidra. Serve para quem programa ou estuda e quer entender como um app funciona e fazer a própria versão, sem depender de modelos de nuvem que às vezes recusam o pedido. Tudo roda na sua máquina: você precisa de Docker, Ollama, Node 22 e memória para um modelo de 14 a 24 GB. Espere chegar a uns 80% do app, não à última milha.

O que é

Três peças que se encaixam

O modelo é o cérebro, o harness é o corpo com as ferramentas, e o REA são os olhos que enxergam dentro do app compilado.

Harness local, modelo sem trava, REA + Ghidra, escolha o alvo, itere, uso responsável

🧰 Harness local (dsh)

A bancada onde o agente vive: lê e escreve arquivos, roda comandos e chama ferramentas MCP. Aqui ele roda em container, só no endereço local, e deixa trocar o modelo.

🧠 Modelo sem trava

Uma versão "abliterated" de um modelo aberto: tiraram dele o reflexo de recusar. Roda no Ollama da sua máquina, sem chave de API e sem mandar nada para fora.

🔍 REA + Ghidra

O REA (Reverse Engineer Anything) é um servidor MCP e uma linha de comando que entregam ao agente a análise do app: módulos, funções, ligações, com evidência e limites.

Como funciona

Do app fechado à sua versão

O agente não precisa ser genial: o REA já organiza as ferramentas, e o modelo só executa. Por isso um modelo aberto de porte médio dá conta de boa parte.

Você aponta o app→ dsh (harness)→ modelo no Ollama→ REA→ Ghidra ou análise JS→ evidência→ código novo, do zero→ você testa e itera

🎬 O exemplo do vídeo de referência

O player de vídeo do Mac (QuickTime) só oferece poucas velocidades fixas. O agente estudou o app e criou um novo, com outro nome ("Tempo") e outro ícone, com velocidade granular, ondas de áudio e ajuste de tom. Uns 80% saíram num pedido só; o resto foi fonte, visual e exportação.

📏 Os números do vídeo (não medidos aqui)

  • 1ª versão: 20 a 30 min e US$ 4 em modelo de nuvem.
  • Ajustes até a versão final: mais US$ 5 a 6.
  • Resultado: ~80% num pedido só.
  • Rodando local, o custo vira só a máquina e a energia.
Limites honestos. O que mora no servidor do fabricante não vem junto (exemplo: a biblioteca de diagramas SmartArt do PowerPoint fica na nuvem, então o clone faz formas e texto, mas não o SmartArt). O REA leva a ~80%, não à última milha. E os modelos de fronteira (Claude, Codex, Gemini) às vezes recusam partes desse trabalho e podem fechar ainda mais a porta: é por isso que o modelo local entra.
O cérebro

Modelos sem trava conferidos no Ollama

Só o que existe de verdade na página do Ollama em 12/10/2026 (aba "tags" de cada modelo). Nenhum foi baixado nem medido nesta máquina: o disco estava em 98%. Escolha pelo tamanho que cabe na sua memória.

Modelo (comando exato)TamanhoRecursos na páginaObservação
ollama pull huihui_ai/Qwen3.8-abliterated:27b18 GB (q4_K_M)tools · thinking · visionMesma base do qwen3.8:27b que já roda no dsh daqui. Primeira escolha. não medido
ollama pull huihui_ai/Qwen3.6-abliterated:35b-a3b24 GBtools · thinking · visionMoE (3B ativos por token): tende a ser rápido. não medido
ollama pull huihui_ai/glm-4.7-flash-abliterated19 GBtools · thinkingFamília GLM, a mesma do exemplo do vídeo (lá foi uma versão maior, na nuvem). não medido
ollama pull huihui_ai/gpt-oss-abliterated:20b14 GBtools · thinkingO menor da lista com ferramentas. Bom para máquina com 32 GB. não medido
ollama pull huihui_ai/qwen3-coder-abliterated:30b19 GBsem etiqueta "tools" na páginaFocado em código, mas confira a etiqueta tools: sem chamada de ferramenta o agente não usa o REA. não medido
Por que "tools" importa. O harness só consegue usar o REA se o modelo souber chamar ferramentas. Na página do Ollama de cada modelo aparecem as etiquetas tools, thinking, vision. Sem tools, o modelo conversa mas não age.

Não tem máquina para isso? Existem serviços de nuvem pré-pagos de terceiros (no estilo do OpenRouter, que o dsh já aceita no modo ./dsh remoto) que hospedam modelos sem trava, com crédito de US$ 5 a 10. Aí o código do app sai da sua máquina, e no modo remoto o dsh não monta ~/projetos de propósito.
Pré-requisitos

O que precisa estar pronto

Testado como referência numa máquina Linux ARM (DGX GB10, 128 GB de memória unificada). Em outra máquina, os comandos são os mesmos; mudam os tamanhos que cabem.

🐳 Docker + dsh-sandbox

O dsh (@deepseek-ai/dsh 0.1.1-rc.1) em container node:22-slim, teto de 3 GB, usuário não-root, só em 127.0.0.1:9080.

cd ~/projetos/dsh-sandbox
./dsh status   # modo, container, http, provedores

🦙 Ollama

Porta 11434, contexto de 32K e KV cache q8_0 no serviço. Confira o que já tem e o espaço em disco antes de puxar um modelo.

ollama list
df -h /        # o modelo pede 14 a 24 GB livres

🟢 Node.js 22.19+

O REA exige Node 22.19+, 24.11+ ou 26+. O container do dsh já traz o 22.23.

docker run --rm node:22-slim node -v   # v22.23.x

🐉 Ghidra 12.1.x + JDK 21 (só para binário nativo)

Para app compilado (C, C++, Swift, Rust). No Linux ARM64 o decompilador nativo pode precisar ser compilado à parte. Nesta máquina há só o JDK 8, então esse caminho está não medido. App Electron/JavaScript dispensa o Ghidra.

java -version   # precisa ser 21 ou mais novo
Passo a passo

Cinco passos, do harness à sua versão

Os prompts completos para copiar e colar estão na pasta prompts/ do repositório.

1

Suba o harness no modo local

O modo local monta ~/projetos em /projetos e deixa só o Ollama como provedor: nada sai da máquina. Abra o painel e escolha o workspace.

cd ~/projetos/dsh-sandbox
./dsh local     # ~20 s; depois abra http://127.0.0.1:9080
./dsh status    # deve mostrar: modo local, /projetos montado SIM, provedores: ollama
# de outra máquina: ssh -L 9080:127.0.0.1:9080 usuario@servidor
2

Puxe um modelo sem trava e aponte o dsh para ele

Baixe um da tabela acima. Depois acrescente o modelo em settings.local.yaml (não no work/.dsh/settings.yaml, que é sobrescrito a cada troca de modo), dentro de llm-pi-ai → providers → ollama → models. O id tem de bater letra por letra com o ollama list.

ollama pull huihui_ai/Qwen3.8-abliterated:27b
ollama list | grep abliterated
# settings.local.yaml — acrescente na lista models do provedor ollama
        - id: huihui_ai/Qwen3.8-abliterated:27b
          name: Qwen3.8 27B sem trava
          contextWindow: 32768
          maxTokens: 8192
          reasoningEfforts:
            off: none     # "none" explícito: vazio deixa o raciocínio LIGADO no Ollama
            low: low
            high: high
            max: high
./dsh local     # copia o settings.local.yaml para o container (sem rebuild)

No painel, o modelo novo aparece no seletor. O bloco compat do provedor (supportsDeveloperRole: false, maxTokensField: max_tokens) já está no arquivo e é obrigatório para o Ollama.

3

Instale o REA (e, para binário nativo, o Ghidra)

Caminho A — app Electron/JavaScript, sem Ghidra. O agente roda o REA pela linha de comando dentro do próprio container. Foi o caminho medido aqui: REA 6.3.0 analisou um app Node de 97 arquivos em 20 s; o REA 6.4.0 analisou um app Electron de 202 arquivos JS em 94,5 s (pico de 1,26 GB). Ponha o alvo numa pasta que o container enxerga (~/projetos/dsh-sandbox/work/alvos vira /work/alvos) e cole o prompt:

Instale isto e me ajude a fazer engenharia reversa de um app: https://github.com/morluto/rea
Use npx -y rea-agents@6.4.0, sempre com "timeout -k 10 600" na frente.
Analise /work/alvos/<app>.asar com analyze-javascript-application --json,
resuma módulos, telas e onde fica <a função que me interessa>, com a evidência.

Caminho B — REA como MCP dentro do dsh (não medido). O registro automático rea setup --client dsh ainda não saiu no pacote publicado (a doc do REA diz "só na main, depois da 6.4.0"). O jeito manual: instalar o REA numa pasta própria do work/ (sem mexer no node_modules congelado do dsh) e registrar o servidor no cordis.patch.yml da casa do dsh.

cd ~/projetos/dsh-sandbox
docker run --rm -u 1000:1000 -v "$PWD/work:/work" -w /work \
  -e HOME=/work -e NPM_CONFIG_CACHE=/work/.npm --memory=6g \
  node:22-slim npm install --prefix /work/rea rea-agents@6.4.0
# ~/projetos/dsh-sandbox/work/.dsh/cordis.patch.yml  (no container: /work/.dsh/cordis.patch.yml)
- insert:
    - id: rea-mcp
      name: "@deepseek-ai/dsh-mcp-client"
      config:
        serverName: rea
        transport: stdio
        command: /usr/local/bin/node
        args: ["/work/rea/node_modules/rea-agents/scripts/rea.mjs", mcp]
        toolCallTimeoutMs: 600000   # o padrão é 60 s; uma análise passa disso

Reinicie com ./dsh local; as ferramentas aparecem como mcp__rea__…. Para binário nativo, o REA precisa de Ghidra 12.1.x e JDK 21 visíveis de dentro do container (GHIDRA_INSTALL_DIR, JAVA_HOME) e de mais memória que os 3 GB do container. Isso não foi montado nem medido aqui.

4

Escolha o alvo e peça a sua versão

Comece por um app pequeno, que você usa e do qual sente falta de uma coisa só. Peça um app novo, com nome e ícone seus, escrito do zero, e que liste no fim o que ficou de fora.

Com base na análise, crie um app NOVO, com nome e ícone próprios (sem nome, ícone,
textos ou código do fabricante), que faça o que <app original> faz em <função principal>
e acrescente: velocidade de reprodução de 0,1x a 4x, em passos de 0,05.
Código do zero em /work/minha-versao. Primeiro a versão mínima que funciona;
no fim, liste o que ficou de fora e o que precisa de teste manual.
5

Itere, um ajuste por vez

A primeira versão costuma funcionar no essencial. O resto é ajuste: aparência, exportação, pequenos erros. Um pedido de cada vez, testando entre eles.

Abri a versão 1. O que não funcionou: <o que viu, com a mensagem de erro>.
Corrija só isso, rode de novo e me diga como confirmar que ficou certo.
Pare. Resuma em 5 linhas o que já tentou, o que deu erro e qual é a hipótese.
Não rode mais nada até eu responder.   # quando o agente empaca
Checklist

Antes de dizer que funcionou

Marque cada item. Se algum falhar, vá para "Problemas".

Ambiente

  • ./dsh status mostra modo local, http 200 e /projetos montado.
  • ollama list mostra o modelo sem trava com o mesmo nome do id no YAML.
  • O modelo responde no painel e consegue rodar ls /work (prova de que chama ferramentas).
  • npx -y rea-agents@6.4.0 --help roda de dentro do agente.

Resultado

  • A análise devolveu evidência (arquivo e trecho), não só opinião.
  • O app novo tem nome e ícone seus e nenhum arquivo copiado do original.
  • A função que faltava no original funciona de verdade (teste à mão).
  • O agente listou o que ficou de fora (servidor, partes não vistas).
Solução de problemas

Quando algo empaca

Os casos que já apareceram nesta máquina ou que a documentação do REA e do dsh descreve.

⏱️ REA travado

O REA 6.3.0 travou num app com um arquivo JS único gigante e ignorou o SIGTERM: foi preciso matar o órfão pelo PID. Na 6.4.0 o mesmo app terminou. Mesmo assim, rode sempre com teto:

# no host (systemd-run + timeout) ou no container (timeout):
scripts/rea-com-timeout.sh -t 600 -m 6G -- \
  npx -y rea-agents@6.4.0 analyze-javascript-application /abs/app.asar --json

🧠 Modelo pequeno demais

Sinais: inventa o nome de ferramentas, repete o mesmo comando, esquece o objetivo. Troque para um maior da tabela, divida o pedido em partes menores e mande o agente salvar o resumo da análise em arquivo para reler depois. O contexto de 32K enche rápido com JSON grande: peça resumo, não o JSON inteiro.

🐉 Ghidra / Java

O REA aceita Ghidra 12.1.x com JDK 21+ (64 bits, com javac). JDK 8 não serve. No Linux ARM64 confira a pasta Ghidra/Features/Decompiler/os/linux_arm_64. Diagnóstico:

npx -y rea-agents@6.4.0 doctor --provider ghidra --json

🔌 dsh não mostra as ferramentas do REA

Confira o caminho do rea.mjs dentro do container, o command do node (/usr/local/bin/node) e se o cordis.patch.yml não está vazio (arquivo só com comentários dá erro). Veja o log:

docker compose logs --tail=50

🧩 Modelo não aparece no seletor

O id não bate com o ollama list, ou você editou o work/.dsh/settings.yaml e o ./dsh local sobrescreveu. Edite o settings.local.yaml e rode ./dsh local de novo.

📂 O agente não acha o app

O container só enxerga /work e, no modo local, /projetos. Copie o app (ou o .asar) para ~/projetos/dsh-sandbox/work/alvos/ e use o caminho absoluto de dentro do container.

Custos

Nuvem paga por uso ou máquina própria

O REA, o Ghidra, o dsh e o Ollama são gratuitos. O que custa é o modelo.

CenárioCustoFonte
Modelo sem trava na nuvem (pré-pago)US$ 4 na 1ª versão + US$ 5 a 6 de ajustesvídeo de referência não medido aqui
Modelo local no OllamaR$ 0 por pedido; só máquina e energiasem chave de API
Tempo até a 1ª versão20 a 30 min (nuvem); local depende do modelo e da máquinavídeo de referência não medido aqui
Memória do modelo local14 a 24 GB (tabela de modelos); o dsh em si usa ~85 MBpágina do Ollama + medição do dsh-sandbox
Uso responsável

"Sem trava" não é "sem regra"

Sem trava quer dizer que o modelo não recusa tarefas legítimas de engenharia reversa. Não é para nada ilegal.

✅ Pode

  • Estudar um programa que você tem e usa, para entender como funciona.
  • Fazer a sua versão para uso próprio e para interoperabilidade (abrir seus arquivos, ligar com suas ferramentas).
  • Escrever o código do zero, com nome, ícone e visual seus.

⛔ Não

  • Redistribuir código, ícones, textos ou marcas do fabricante.
  • Vender cópia de um programa: esbarra em direito autoral e na licença.
  • Quebrar proteção contra cópia, licença ou DRM, ou mirar em programa que você não tem direito de usar.
  • Rodar binário desconhecido fora de máquina isolada: o REA não é sandbox.
Muitas licenças de software proíbem engenharia reversa; as leis variam por país. Na dúvida, fique no terreno seguro: programas seus, código aberto, desafios de segurança e o que você tem autorização para analisar.
Vídeo

Assista ao vídeo

O vídeo deste guia, com o passo a passo explicado.

▶ Assistir ao vídeo
Transparência

O que foi medido e o que não foi

Para você saber em que pisar com segurança.

ItemStatusDetalhe
dsh no modo local com OllamamedidoBoot ~18 s, ~85 MB ocioso, qwen3.8:27b ~18–20 GB (dsh-sandbox, 08/2026).
REA, análise JS sem Ghidramedido6.3.0: 97 arquivos em 20 s; 6.4.0: 202 arquivos JS em 94,5 s, pico 1,26 GB (Linux ARM, 10–12/10/2026).
REA travando em arquivo JS gigantemedido6.3.0 travou e ignorou SIGTERM; 6.4.0 terminou. Teto com scripts/rea-com-timeout.sh testado nos dois modos.
Modelos sem trava da tabelanão medidoConferidos na página do Ollama; nenhum baixado (disco em 98%).
REA como MCP dentro do dshnão medidoReceita manual pela doc do REA e do dsh-mcp-client 0.1.1-rc.1.
Ghidra nesta máquinanão medidoSó há JDK 8; Ghidra 12.1.x pede JDK 21 e, no ARM64, decompilador nativo próprio.
O clone do QuickTime, custos e temposnão medidoNúmeros do vídeo de referência (macOS, modelo na nuvem).
Próximos passos

O que falta medir

Itens abertos deste guia, na ordem em que fazem mais diferença.

Fase 1
Medir um modelo sem trava no dshBaixar o huihui_ai/Qwen3.8-abliterated:27b quando houver disco e rodar o caminho A num app Electron pequeno: tempo, memória, quantos pedidos até a 1ª versão.
Fase 2
REA como MCP no dshAplicar o cordis.patch.yml, confirmar as ferramentas mcp__rea__… no painel e o toolCallTimeoutMs.
Fase 3
Ghidra no Linux ARM64JDK 21 + Ghidra 12.1.x com o decompilador linux_arm_64, visíveis no container, para binários nativos.

Guia anterior, com a técnica, os casos e o reteste da 6.4.0: REA, engenharia reversa com IA. Repositório do REA: morluto/rea (MIT, ~147 mil estrelas em 12/10/2026).