MichaelXF / js-confuser

JS-Confuser is a JavaScript obfuscation tool to make your programs *impossible* to read.
https://js-confuser.com
MIT License
204 stars 32 forks source link

Dispatcher causes syntax error #77

Closed MichaelXF closed 1 year ago

MichaelXF commented 1 year ago

Describe the bug:

Dispatcher breaks code that calls toString() and causes a syntax error

Config and Small code sample

Config:

{
  target: "node",
  dispatcher: true
}

Code:

function myFunction(){

}

console.log(toString());

Output:

var ZBMWuM = Object.create(null);
var hSR25k = [];
console['log'](new Uf6LgH(function toString() { [native code] }, 'bVTWgeH', 'dq4mH64').P9dYcG);
function Uf6LgH(Uf6LgH, L2edNvN, LyXMkF) {
    var quyW4n5 = {
        'YjEq1X': function () {
        }
    };
    var pCawCBp;
    if (L2edNvN == 'bVTWgeH') {
        hSR25k = [];
    }
    if (L2edNvN == 'McemI0C') {
        pCawCBp = ZBMWuM[Uf6LgH] || (ZBMWuM[Uf6LgH] = function (...iUqjNIT) {
            hSR25k = iUqjNIT;
            return quyW4n5[Uf6LgH].call(this, 'bEANo3');
        });
    } else {
        pCawCBp = quyW4n5[Uf6LgH]('ga3lyI');
    }
    if (LyXMkF == 'dq4mH64') {
        return { P9dYcG: pCawCBp };
    } else {
        return pCawCBp;
    }
}

Notice the function toString() { [native code] } This is most likely due to Dispatcher using a normal object as a dictionary to map old function names to new function names, which causes generic names like toString and hasOwnProperty to get mapped incorrectly.