El eval() directo desactiva la ofuscación VM
Si una función contiene una llamada eval(code) directa en cualquier punto de su cuerpo (incluidas las funciones anidadas), la función completa y todas sus funciones anidadas quedan excluidas de la ofuscación VM. Esto se debe a que el eval directo tiene acceso a las variables locales de la función que lo contiene, que no están disponibles cuando la función se compila a bytecode de la VM.
// ❌ Entire IIFE is NOT VM-obfuscated because of direct eval inside
(function () {
function loadConfig() {
eval(decodedLoader); // direct eval - blocks VM for the whole IIFE
}
// ... all your code ...
})();
// ✅ Use indirect eval - runs in global scope, does not block VM
(function () {
function loadConfig() {
(0, eval)(decodedLoader); // indirect eval - VM obfuscates the IIFE
}
// ... all your code ...
})();
// ✅ Or unwrap the IIFE - each top-level function is checked independently
function loadConfig() {
eval(decodedLoader); // only this function is skipped
}
// ... other top-level functions are still VM-obfuscated ...
La detección captura el eval directo (eval(code) y eval?.(code)). Las formas indirectas como (0, eval)(code) y window.eval(code) se ejecutan en el ámbito global y no bloquean la ofuscación VM.
Vía de escape (v6.14.0+): establece vmForceCompileDynamicCode: true (o activa el interruptor Force Compile Dynamic Code dentro del grupo Overrides de la sección VM) para convertir de todos modos la función circundante a bytecode y suprimir VMDynamicCodeSkipped. Solo es seguro cuando el cuerpo construido en tiempo de ejecución no puede referenciar un identificador que el ofuscador renombra; de lo contrario, el código lanza ReferenceError en tiempo de ejecución. Consulta la página de la receta para ver todas las compensaciones.
