Pular para o conteúdo
Favoritos

Descodificador de JavaScript Eval

Atualizado:

Cole um JavaScript que começa com eval(function(...)) para ver a string devolvida pela sua função interna, formatada como código legível. Não utilize scripts não confiáveis: a descodificação pode executar JavaScript no seu navegador.

Ferramenta de Descodificação de Eval em JavaScript

Campos de entrada
Se ativado, o resultado é atualizado automaticamente quando você altera qualquer valor.

Fórmula do Descodificador de JavaScript Eval

Fórmula
\[ D = B_4\!\left(L\!\left(E\!\left(S_{4:}\right)\right)\right) \]

Em que:

  • \(S\) — o texto introduzido em Código JavaScript Ofuscado.
  • \(S_{4:}\) — esse texto após os seus primeiros quatro caracteres, removendo normalmente eval.
  • \(E\) — avaliação JavaScript da expressão restante.
  • \(L\) — remoção dos espaços em branco iniciais da string devolvida.
  • \(B_4\) — formatação com uma indentação de 4; \(D\) é o resultado apresentado.

Isto descreve os passos de processamento da ferramenta, não uma função especial de descodificação de JavaScript. A avaliação tem de devolver uma string para que os passos seguintes de remoção de espaços em branco e de formatação funcionem.

Descodificador de JavaScript Eval – Exemplo de Cálculo

Exemplo: introduza eval(function(p){return p.replace("0", "42");}("const answer = 0;")) em Código JavaScript Ofuscado. Remover eval deixa uma chamada de função que devolve uma string.

\[ \operatorname{replace}(\text{"const answer = 0;"},\text{"0"},\text{"42"})=\text{"const answer = 42;"} \]

Resultado: Código JavaScript Descodificado apresenta const answer = 42;. Este exemplo demonstra os passos de processamento; os scripts compactados usam normalmente uma função de substituição mais elaborada.

Como utilizar a calculadora

  1. Cole a expressão completa em Código JavaScript Ofuscado. A entrada pretendida começa com eval(function(...)); mantenha a chamada de função e os seus argumentos intactos.
  2. Execute a calculadora e consulte o Código JavaScript Descodificado. A ferramenta remove os primeiros quatro caracteres, avalia o que resta, corta os espaços em branco iniciais da string devolvida e formata-a.
  3. Utilize a opção de cópia do resultado se quiser inspecionar o texto num editor. Analise o que ele faz antes de o executar noutro local.

Não existem valores de código predefinidos a submeter. Um campo vazio produz a mensagem “Introduza o código”. Se a entrada estiver malformada ou não devolver uma string, o cálculo pode falhar e não produzir um resultado descodificado.

O que significa a descodificação de eval em JavaScript

Alguns compactadores de JavaScript produzem uma expressão exterior com o formato eval(function(...){...}(...)). A função interna constrói uma string de código-fonte substituindo tokens curtos por identificadores mais longos ou outro texto. Na expressão original, o eval exterior executaria depois esse código gerado. Esta calculadora remove o prefixo literal eval para poder apresentar a string devolvida pela expressão interna.

Essa distinção é importante ao ler o resultado. O texto apresentado é o código-fonte gerado, não necessariamente um registo de tudo o que aconteceu durante a descodificação. A expressão interna ainda é avaliada para o obter, e uma função interna pode executar ações antes de devolver uma string. A formatação torna o resultado mais fácil de analisar, mas não explica o comportamento do código nem garante que é seguro.

Utilize o resultado para analisar mais de perto variáveis, chamadas de função, URLs e a lógica de construção de strings. Se o código-fonte estiver apenas minificado em vez de encapsulado numa expressão eval compatível, um resultado do Compressor de JavaScript ilustra outro tipo de transformação: encurtar código não implica, por si só, um passo de descodificação baseado em eval. Para comparar como este estilo de encapsulamento é criado, consulte o Ofuscador de JavaScript (eval).

Pressupostos, limitações e segurança

Não trate isto como uma sandbox segura para malware. A ferramenta chama o eval de JavaScript sobre a entrada depois de remover os seus primeiros quatro caracteres. Embora isso possa evitar a execução do código-fonte gerado, como o eval exterior original faria, a expressão restante pode, ela própria, executar JavaScript. Uma entrada não confiável pode ter efeitos secundários no seu navegador. Inspecione scripts suspeitos num ambiente isolado adequado, em vez de os colar numa página em que confia.

A ferramenta remove exatamente quatro caracteres; não analisa o JavaScript para localizar um eval exterior. Um comentário inicial, espaços antes de eval ou um encapsulamento diferente podem alterar o que é avaliado. Assume também que a expressão avaliada devolve uma string: um número, um objeto ou um valor indefinido não podem ser processados pela operação de string seguinte. A lógica fornecida executa uma avaliação e uma passagem de formatação; não descompacta repetidamente camadas aninhadas nem fornece realce de sintaxe.

A formatação pode acrescentar quebras de linha e indentação, pelo que o resultado apresentado não deve ser tratado como idêntico, byte a byte, à string devolvida. Se a inspeção revelar um valor codificado separadamente em Base64, um Descodificador Base64 pode ajudar a examinar esse valor; ele não faz parte do processo de descodificação desta calculadora.

Perguntas frequentes

Como posso descompactar um script encapsulado em eval sem o executar?

Pode descompactar um script simples seguindo manualmente as suas substituições de strings. Identifique o texto codificado, a lista de tokens e o ciclo que substitui os tokens e, em seguida, aplique essas substituições a uma cópia do texto. Para scripts mais complexos, utilize uma ferramenta de análise estática ou um ambiente isolado. Não assuma que remover o eval exterior torna a expressão restante segura de executar.

Porque é que o descodificador apresenta um erro ou nenhuma saída útil?

A entrada pode não corresponder ao encapsulamento esperado ou a sua expressão interna pode devolver algo que não uma string. Verifique se existem caracteres antes de eval, parênteses em falta e texto copiado que contenha uma chamada de função incompleta. Restrições do navegador ou uma exceção dentro da expressão também podem interromper a descodificação. Um resultado aparentemente vazio pode significar apenas que a string devolvida contém apenas espaços em branco.

Esta ferramenta consegue descodificar várias camadas de ofuscação?

Não, apresenta a string produzida por um encapsulamento compatível. Se essa string contiver outra expressão encapsulada, esta permanece como uma camada separada que exige inspeção. Não reintroduza automaticamente cada camada na calculadora: cada avaliação pode executar código, incluindo código que altera dados da página ou faz pedidos de rede. Utilize um ambiente de análise isolado para scripts em que não confia.

O JavaScript descodificado é o mesmo que o código executado na página original?

Não necessariamente. A string apresentada é o texto-fonte gerado pelo encapsulamento; o eval exterior original tentaria executar esse texto a seguir. O próprio encapsulamento também pode ter executado ações ao construir a string. Para compreender o comportamento da página original, examine tanto o encapsulamento como o código gerado, além de quaisquer outros scripts e APIs do navegador de que dependem.

Porque continuo a ver strings ilegíveis depois da descodificação?

O encapsulamento com eval pode ser apenas uma camada de ofuscação. O código gerado ainda pode conter sequências de escape hexadecimais, conversões de códigos de caracteres, dados codificados, nomes abreviados ou strings montadas em tempo de execução. A formatação pode revelar a estrutura, mas não consegue transformar todos os valores codificados em linguagem simples. Analise como cada string é construída e utilizada antes de tratar um URL ou identificador visível como o quadro completo.

A formatação altera o funcionamento do JavaScript descodificado?

A formatação destina-se a tornar o código-fonte mais fácil de ler, não a verificar o seu comportamento. Normalmente, a indentação e as quebras de linha acrescentadas preservam a sintaxe do JavaScript, mas alterações de disposição podem ser relevantes em casos-limite, como a inserção automática de ponto e vírgula ou strings e comentários. Guarde o resultado original para comparação e não assuma que uma cópia formatada é segura ou funcionalmente idêntica sem a verificar.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *