VM Debug Protection
Assistir
Obfuscator.io Advanced Defenses: Self-Defending, Debug Protection, Domain Lock
A opção vmDebugProtection adiciona medidas antidepuração ao runtime da VM, tornando significativamente mais difícil fazer engenharia reversa do seu código protegido. A forma como cada detecção reage é definida pelas categorias debugger, automation e sandbox de vmDefenseReaction.
Com browserEnvironment.hosting definido como 'remote' (v7.14.1+), o Debug Protection também vincula o build a ser servido a partir de um host remoto: uma cópia servida a partir de um host de desenvolvimento local é tratada como divergência do ambiente de execução, e as defesas contra automação reagem.
Essas defesas também agem contra seus próprios agentes, automações e depuradores. Elas podem interromper a execução, lançar erros sem relação aparente ou produzir resultados incorretos. Use um build de testes separado para os testes funcionais; Testes e CI mostra as opções que esse build sobrescreve.
Detecção de inspetor
A partir do ofuscador 8.0.0, vmDebugProtection aceita um objeto, além de um booleano. Passar um objeto mantém o Debug Protection ativado enquanto relaxa um único detector:
inspectorDetection (ativado por padrão) detecta e reage a um inspetor do Chrome DevTools Protocol conectado ou a um depurador ativo. Abrir as ferramentas de desenvolvedor do navegador conecta uma sessão desse tipo, então um inspetor aberto é detectado e provoca uma reação. Mantenha-o ativado em produção; desative-o apenas se os seus usuários abrirem as ferramentas de desenvolvedor de forma legítima. No painel, esta é a subchave Inspector Detection em VM Debug Protection (v8.0.0+), que aparece quando o Debug Protection está ativado.
Depois de uma detecção, só recarregar a página recupera o código. Fechar as ferramentas de desenvolvedor não restaura o código protegido: até a página ser recarregada, cada chamada seguinte lança erros que não explicam nada, como Uncaught 0, ou, com a reação decoy, retorna resultados errados. Ao recarregar, perde-se tudo o que o usuário não salvou. Para salvar ou mostrar uma mensagem antes, execute sua própria resposta em vmDefenseHook, chamado antes de a defesa reagir. Para o código protegido, as ferramentas de desenvolvedor e outras ferramentas que se conectam pelo mesmo protocolo são indistinguíveis, então permitir que seus usuários abram as ferramentas de desenvolvedor também deixa essas ferramentas entrarem.
Frameworks de automação. Com inspectorDetection ativado (o padrão), controlar a página protegida com uma ferramenta baseada em CDP (Puppeteer, Playwright, Selenium/ChromeDriver) é detectado como um inspetor conectado. vmDebugProtection: { inspectorDetection: false } desativa apenas o detector de inspetor; o detector de automação do Debug Protection ainda pode reagir a um navegador controlado. Para builds de testes automatizados, siga Testes e CI, que desativa vmDebugProtection e vmSelfDefending.
Content Security Policy
Se a sua Content Security Policy proíbe a avaliação dinâmica (sem unsafe-eval), use o target browser-no-eval e valide a saída sob essa política. Esse target usa uma alternativa para as verificações que, de outra forma, dependeriam de avaliação dinâmica. O mesmo vale para extensões de navegador com uma CSP restritiva: use browser-no-eval para ter a melhor compatibilidade.
