Documentación
/
Ofuscación VM
/

Comportamiento de eval directo

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.