numbersToExpressions produces invalid syntax for numeric class member keys

Aperta Adatta ai principianti
#1,476 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
78/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
javascript, node.js, typescript
Ambito
backend, devtools

Direzione di ricerca

Trova NumberToNumericalExpressionTransformer e confronta come gestisce le chiavi Property non calcolate con le chiavi MethodDefinition e PropertyDefinition. Inizia aggiungendo un caso di regressione per la classe di riproduzione e verifica che l’output offuscato venga analizzato con new Function. Il lavoro è completato quando le chiavi numeriche dei membri della classe rimangono JavaScript valido con numbersToExpressions abilitato.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Expected Behavior

Obfuscating a class with non-computed numeric literal method, accessor, or field keys when numbersToExpressions: true is enabled should produce syntactically valid JavaScript (either keeping the numeric literal keys as-is or converting them into computed property names [...]).

Current Behavior

Enabling numbersToExpressions: true rewrites non-computed numeric literal keys on class methods (MethodDefinition), accessors (MethodDefinition), and fields (PropertyDefinition) into arithmetic expressions in place without wrapping them in brackets ([...]), producing invalid JavaScript that fails to parse with SyntaxError: Unexpected token '+'.

NumberToNumericalExpressionTransformer skips non-computed Property keys (NodeGuards.isPropertyNode(parentNode) && !parentNode.computed), but does not check for non-computed MethodDefinition or PropertyDefinition keys.

Steps to Reproduce

  1. Obfuscate a class containing non-computed numeric member keys (e.g., get 2() {}, 3() {}, 4 = 3;) with numbersToExpressions: true.
  2. Parse or execute the obfuscated output (e.g., with new Function(obfuscated)).

JavaScript Obfuscator Edition

  • JavaScript Obfuscator Open Source

Your Environment

  • Obfuscator version used: 5.10.0
  • Node version used: 24.14.1

Stack trace

SyntaxError: Unexpected token '+'
    at new Function (<anonymous>)

Minimal working example that will help to reproduce issue

const JavaScriptObfuscator = require('javascript-obfuscator');

const code = `
class C {
    get 2() { return 1; }
    3() { return 2; }
    4 = 3;
}
`;

const obfuscated = JavaScriptObfuscator.obfuscate(code, {
    numbersToExpressions: true,
    stringArray: false,
    seed: 1
}).getObfuscatedCode();

console.log(obfuscated);
// class C{get 0xce8+-0xe*-0x118+-0x1c36(){return-0x2c0+0x2170+-0x1eaf;}-0x828+-0x3e*-0x4d+-0xa7b*0x1(){return 0x7*0x1a1+-0x1ad8+0x317*0x5;}-0xc1*-0x6+-0xb6*-0x6+-0x8c6=-0xadb*0x2+-0x35e*0x9+-0x3407*-0x1;}

new Function(obfuscated);

Credit: https://ucsbplse.github.io/

Lingua principale
TypeScript
Stelle
16.3k
Fork
1.7k
Merge medio
1g 23h
PR unite (30g)
3

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di javascript-obfuscator/javascript-obfuscator

Tutte le issue di javascript-obfuscator/javascript-obfuscator

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.