relative / synchrony

javascript-obfuscator cleaner & deobfuscator
https://deobfuscate.relative.im/
GNU General Public License v3.0
849 stars 109 forks source link

[request] Remove unnecessary things #28

Open KTibow opened 2 years ago

KTibow commented 2 years ago

A couple things:

  1. Remove unused parameters (or values in general):
    async function sendToForum(_0x87a2bc) {
    try {
    location.href = "forum";
    } catch (_0x3094304894) {
    console.log("aaa");
    }
    }

    into

    async function sendToForum() {
    try {
    location.href = "forum";
    } catch {
    console.log("aaa");
    }
    }
  2. Un-functionify stuff? Not sure how to say it, but turn
    (function () {
    var _0x5da15e;
    try {
    var _0x9b11dd = Function(
      'return (function() {}.constructor("return this")( ));'
    );
    _0x5da15e = _0x9b11dd();
    } catch (_0x4312ea) {
    _0x5da15e = window;
    }
    _0x5da15e.setInterval(_0x526f94, 4000);
    })();

    into

    var _0x5da15e;
    try {
    var _0x9b11dd = Function(
    'return (function() {}.constructor("return this")( ));'
    );
    _0x5da15e = _0x9b11dd();
    } catch (_0x4312ea) {
    _0x5da15e = window;
    }
    _0x5da15e.setInterval(_0x526f94, 4000);
4JX commented 2 years ago

Un-functionify stuff

Small issue this could introduce is that for example, if _0x9b11dd is already defined on the outer scope, it could modify the behaviour of the program at runtime.

I'd say its best to play it safe and only apply it to the currently handled case of

let f = (function () {
  return function actualFunction(foo) {/* Contents */}
})();

(Seems to not be on the website version but works with the git repo)

To add a few pet peeves of mine:

// All elements are known, this can be statically parsed to a string (Might even be possible with variables but let's not get ahead of ourselves)
let a = ['a', 'b', 'c'].join("")

let b = function () {}
// Any of the following can be simplified to a normal function call (with the possibility of args as well)
b.bind(this)()
b.call(this)
b.apply(this)

// Simplification for functions like
// add, sub, mul, div, xor, left/right shift...
function sum(a, b) {
  return a+b
}

let c = sum(2, 3) // Can be substituted with 2 + 3 or even directly 5