hasegawa

This tag recreates the EPIC non-alpha JavaScript that Yosuke Hasegawa discovered on the slackers forum.

Created by: hackvertor
Installed 1 times

Category: XSS

Created on: Thursday, October 17, 2024 at 11:47:48 AM

Updated on: Thursday, October 17, 2024 at 5:30:04 PM

This is a built in tag
Tag arguments
[
   {
      "type": "string",
      "help": "This provides symbols to use for the non-alpha code.",
      "defaultValue": "ªÀÁÂÃÄÆÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþ$_"
   }
]
Code
class hasegawa {
  encode(code, symbolsStr) {
    var symbols = (symbolsStr + "").split("");
    var func = "";
    var symbol = "$";
    var symbol1 = "$";
    var symbol2 = "$$";
    var symbol3 = "$$$";
    var symbol4 = "$$$$";
    var symbol5 = "$$$$$";
    var symbol6 = "$$$$$$";

    for (var i = 0; i < 6; i++) {
      if (symbols.length > 0) {
        var pos = Math.floor(Math.random() * symbols.length - 1);
        var symbol = symbols[pos];
        symbols.splice(pos, 1);
      } else {
        symbol += symbol;
      }
      switch (i) {
        case 0:
          symbol1 = symbol;
          break;
        case 1:
          symbol2 = symbol;
          break;
        case 2:
          symbol3 = symbol;
          break;
        case 3:
          symbol4 = symbol;
          break;
        case 4:
          symbol5 = symbol;
          break;
        case 5:
          symbol6 = symbol;
          break;
      }
    }

    var nums = [
      symbol1 + "-" + symbol1,
      symbol1 + "-" + symbol2,
      symbol2,
      symbol1,
      symbol2 + "+" + symbol2,
      symbol2 + "+" + symbol1,
      symbol1 + "+" + symbol1,
      symbol3,
      symbol4,
      symbol1 + "*" + symbol1,
    ];
    func +=
      symbol2 +
      "=-~-~[]," +
      symbol1 +
      "=-~" +
      symbol2 +
      "," +
      symbol4 +
      "=" +
      symbol2 +
      "<<" +
      symbol2 +
      "," +
      symbol3 +
      "=" +
      symbol4 +
      "+~[];";
    func +=
      symbol5 +
      "=(" +
      nums[0] +
      ")[" +
      symbol6 +
      "=(''+{})[" +
      nums[5] +
      "]+(''+{})[" +
      nums[1] +
      "]+([]." +
      symbol1 +
      "+'')[" +
      nums[1] +
      "]+(!!''+'')[" +
      nums[3] +
      "]+({}+'')[" +
      nums[6] +
      "]+(!''+'')[" +
      nums[1] +
      "]+(!''+'')[" +
      nums[2] +
      "]+(''+{})[" +
      nums[5] +
      "]+({}+'')[" +
      nums[6] +
      "]+(''+{})[" +
      nums[1] +
      "]+(!''+'')[" +
      nums[1] +
      "]][" +
      symbol6 +
      "]";

    code = code.replace(/.+/, function (c) {
      var output = [];
      c = c + "";
      for (var j = 0; j < c.length; j++) {
        var cc = c.charCodeAt(j).toString(8).split("");
        for (var i = 0; i < cc.length; i++) {
          cc[i] = "(" + nums[cc[i]] + ")";
        }
        output.push("'\\\\'+" + cc.join("+"));
      }
      return (
        "+" +
        symbol5 +
        "((!''+'')[" +
        nums[1] +
        "]+(!''+'')[" +
        nums[3] +
        "]+(!''+'')[" +
        nums[0] +
        "]+(!''+'')[" +
        nums[2] +
        "]+((!''+''))[" +
        nums[1] +
        "]+([].$+'')[" +
        nums[1] +
        "]" +
        "+'\\''" +
        "+" +
        "''+" +
        output.join("+") +
        "+'\\'')()"
      );
    });
    return func + ";" + "" + symbol5 + "(" + code.replace(/^\+/, "") + ")()";
  }
}