Просмотр исходного кода

SelfDefendingTemplate rewrite without evals

sanex3339 8 лет назад
Родитель
Сommit
c5a12732b8

+ 1 - 1
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;
 

+ 37 - 3
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') })();
         })();
     `;
 }