v2.11.0
Playground
General
- Parse bookmarklets:
javascript:(function()%7Balert('hello%20world')%3B%7D)()%3B
Deobfuscate
- Control flow proxy with spread parameter:
var _0xa7728a = {
'UcfbR': function (_0x5a9ca0, ..._0x56527a) {
return _0x5a9ca0(..._0x56527a);
}
};
_0xa7728a[_0x5e8644(0x2)](a, ...b, ...c);
->
a(...b, ...c);
- Partial control flow proxy property assignments:
const _0x4421b9 = {
["pOUyw"]: function (_0x48317b, _0x3eb9bf) {
return _0x48317b < _0x3eb9bf;
}
};
_0x4421b9.RLGat = "Hello World!";
const _0x2d22bf = _0x4421b9;
if (_0x2d22bf.pOUyw(a, b)) {
console.log(_0x2d22bf.RLGat);
}
->
if (a < b) {
console.log("Hello World!");
}
var a = function() {}
->function a() {}
(#27)
Unminify
- Extract sequence from for loop:
for(; i < 10; a(), b(), i++);
->for (; i < 10; i++) { a(); b(); }
- Extract sequence from assignment:
t = (o = null, o);
->o = null; t = o;
1 / 0
->Infinity
- Simplify divisions:
10 / 2
->5
, but1 / 3
stays1 / 3
(more readable than0.3333333333333333
) - Convert concat to template literal:
"'".concat(foo, "' \"").concat(bar, "\"")
->'${foo}' "${bar}"
; void foo();
->foo();
,typeof foo();
->foo();
,!foo();
->foo();
,return void foo();
->foo(); return;
- Fix: don't transform
{ ["__proto__"]: 1 }
JSX
- Self-closing tags:
React.createElement("div", null)
-><div />
- Spread props:
React.createElement("div", {...props})
-><div {...props} />
- Detect more pragmas:
jsx
,jsxs
,_jsx
,_jsxs
,jsxDEV
,jsxsDEV
- Fix string escaping, comments
Unpack Bundle
- Detect
globalThis.webpackJsonp