From c5a12732b84744545c4582de74ef0019d5f90d97 Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Mon, 31 Oct 2016 23:57:44 +0300 Subject: [PATCH] SelfDefendingTemplate rewrite without evals --- dist/index.js | 2 +- .../SelfDefendingTemplate.ts | 40 +++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index 320cca66..a207699c 100644 --- a/dist/index.js +++ b/dist/index.js @@ -3968,7 +3968,7 @@ exports.DomainLockNodeTemplate = DomainLockNodeTemplate; var Utils_1 = __webpack_require__(0); function SelfDefendingTemplate() { - return '\n (function () { \n var func = function(){return \'dev\';},\n func2 = function () {\n return \'window\';\n };\n \n !Function(' + Utils_1.Utils.stringToUnicode('return/\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}/') + ')().test(func.toString()) ? Function(' + Utils_1.Utils.stringToUnicode('return/(\\\\[x|u](\\w){2,4})+/') + ')().test(func2.toString()) ? [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(true){}\')() : [][\'filter\'][\'constructor\'](' + Utils_1.Utils.stringToJSFuck('while') + ' + \'(false){}\')();\n })();\n '; + return "\n (function () { \n var func1 = function(){return 'dev';},\n func2 = function () {\n return 'window';\n };\n \n var test1 = function () {\n var regExp = new RegExp(" + Utils_1.Utils.stringToUnicode("return/\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}/") + ");\n \n return !regExp.test(func1.toString());\n };\n \n var test2 = function () {\n var regExp = new RegExp(" + Utils_1.Utils.stringToUnicode("return/(\\\\[x|u](\\w){2,4})+/") + ");\n \n return regExp.test(func2.toString());\n };\n \n var recursiveFunc1 = function (string) {\n var i = ~1 >> 1 + 255 % 0;\n \n if (string.indexOf(([false]+undefined)[10]) === i) {\n recursiveFunc2(string)\n }\n };\n \n var recursiveFunc2 = function (string) {\n var i = ~-4 >> 1 + 255 % 0;\n \n if (string.indexOf((true+\"\")[3]) !== i) {\n recursiveFunc1(string)\n }\n };\n \n !test1() ? test2() ? (function () { recursiveFunc1('indexOf') })() : (function () { recursiveFunc1('ind\u0435xOf') })() : (function () { recursiveFunc1('indexOf') })();\n })();\n "; } exports.SelfDefendingTemplate = SelfDefendingTemplate; diff --git a/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts b/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts index 0fd22449..d2e5d300 100644 --- a/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts +++ b/src/templates/custom-nodes/self-defending-nodes/self-defending-unicode-node/SelfDefendingTemplate.ts @@ -1,14 +1,48 @@ import { Utils } from '../../../../Utils'; +/** + * SelfDefendingTemplate. Enter code in infinity loop. + * Notice, that second call to recursiveFunc1('indexOf') has cyrillic `е` character instead latin + * + * @returns {string} + */ export function SelfDefendingTemplate (): string { return ` (function () { - var func = function(){return 'dev';}, + var func1 = function(){return 'dev';}, func2 = function () { return 'window'; }; - - !Function(${Utils.stringToUnicode(`return/\\w+ *\\(\\) *{\\w+ *['|"].+['|"];? *}/`)})().test(func.toString()) ? Function(${Utils.stringToUnicode(`return/(\\\\[x|u](\\w){2,4})+/`)})().test(func2.toString()) ? []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(false){}')() : []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(true){}')() : []['filter']['constructor'](${Utils.stringToJSFuck('while')} + '(false){}')(); + + var test1 = function () { + var regExp = new RegExp(${Utils.stringToUnicode(`return/\\w+ *\\(\\) *{\\w+ *['|"].+['|"];? *}/`)}); + + return !regExp.test(func1.toString()); + }; + + var test2 = function () { + var regExp = new RegExp(${Utils.stringToUnicode(`return/(\\\\[x|u](\\w){2,4})+/`)}); + + return regExp.test(func2.toString()); + }; + + var recursiveFunc1 = function (string) { + var i = ~1 >> 1 + 255 % 0; + + if (string.indexOf(([false]+undefined)[10]) === i) { + recursiveFunc2(string) + } + }; + + var recursiveFunc2 = function (string) { + var i = ~-4 >> 1 + 255 % 0; + + if (string.indexOf((true+"")[3]) !== i) { + recursiveFunc1(string) + } + }; + + !test1() ? test2() ? (function () { recursiveFunc1('indexOf') })() : (function () { recursiveFunc1('indеxOf') })() : (function () { recursiveFunc1('indexOf') })(); })(); `; }