numbersToExpressions produces invalid syntax for numeric class member keys
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
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
- Obfuscate a class containing non-computed numeric member keys (e.g.,
get 2() {},3() {},4 = 3;) withnumbersToExpressions: true. - 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
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di javascript-obfuscator/javascript-obfuscator
-
dependencies
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
javascript-obfuscator/javascript-obfuscator#1465 · 1 commento ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
javascript-obfuscator/javascript-obfuscator#1304 · 4 commenti · 1 reazione ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 56/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 75/100
Tutte le issue di javascript-obfuscator/javascript-obfuscator
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
binding:python bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
coollabsio/orbit#72 ·
I maintainer di solito rispondono entro 1 giorno
-
Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
I maintainer di solito rispondono entro 1 giorno
-
bug needs-triage potential-regression
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
aws/aws-sdk-js-v3#8408 ·
I maintainer di solito rispondono entro 1 giorno