Pārlūkot izejas kodu

DomainLockNodeTemplate spec

sanex3339 8 gadi atpakaļ
vecāks
revīzija
19bfbd4514

+ 1 - 1
dist/index.js

@@ -3538,7 +3538,7 @@ exports.DebugProtectionFunctionTemplate = DebugProtectionFunctionTemplate;
 "use strict";
 
 function DomainLockNodeTemplate() {
-    return "\n        (function () {\n            var regExp = new RegExp(\"[{diff}]\", \"g\");\n            var domains = \"{domains}\".replace(regExp, \"\").split(\";\");\n            var eval = [][\"forEach\"][\"constructor\"];\n            var window = eval(\"return this\")();\n            \n            for (var d in window) {\n                if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n                    break;\n                }\n            }\n                \n            for (var d1 in window[d]) {\n                if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n                    break;\n                }\n            }\n        \n            var currentDomain = window[d][d1];\n            \n            if (!currentDomain) {\n                return;\n            }\n            \n            var ok = false;\n                        \n            for (var i = 0; i < domains.length; i++) {\n                var domain = domains[i];\n                var position = currentDomain.length - domain.length;\n                var lastIndex = currentDomain.indexOf(domain, position);\n                var endsWith = lastIndex !== -1 && lastIndex === position;\n                \n                if (endsWith) {\n                    if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n                        ok = true;\n                    }\n                    \n                    break;\n                }\n            }\n                \n            if (!ok) {\n                eval('throw new Error()')();\n            }\n        })();\n    ";
+    return "\n        (function () {\n            var regExp = new RegExp(\"[{diff}]\", \"g\");\n            var domains = \"{domains}\".replace(regExp, \"\").split(\";\");\n            var eval = [][\"forEach\"][\"constructor\"];\n            var window = eval(\"return this\")();\n            \n            for (var d in window) {\n                if (d.length == 8 && d.charCodeAt(7) == 116 && d.charCodeAt(5) == 101 && d.charCodeAt(3) == 117 && d.charCodeAt(0) == 100) {\n                    break;\n                }\n            }\n\n            for (var d1 in window[d]) {\n                if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {\n                    break;\n                }\n            }\n\n            var currentDomain = window[d][d1];\n            \n            if (!currentDomain) {\n                return;\n            }\n            \n            var ok = false;\n                        \n            for (var i = 0; i < domains.length; i++) {\n                var domain = domains[i];\n                var position = currentDomain.length - domain.length;\n                var lastIndex = currentDomain.indexOf(domain, position);\n                var endsWith = lastIndex !== -1 && lastIndex === position;\n                \n                if (endsWith) {\n                    if (currentDomain.length == domain.length || domain.indexOf(\".\") === 0) {\n                        ok = true;\n                    }\n                    \n                    break;\n                }\n            }\n                \n            if (!ok) {\n                eval('throw new Error()')();\n            }\n        })();\n    ";
 }
 exports.DomainLockNodeTemplate = DomainLockNodeTemplate;
 

+ 2 - 2
src/custom-nodes/domain-lock-nodes/DomainLockNode.ts

@@ -29,8 +29,8 @@ export class DomainLockNode extends AbstractCustomNode {
      * @returns {ESTree.Node}
      */
     protected getNodeStructure (): ESTree.Node {
-        let domainsString = this.options.domainLock.join(';'),
-            [hiddenDomainsString, diff] = Utils.hideString(domainsString, domainsString.length * 3);
+        let domainsString: string = this.options.domainLock.join(';'),
+            [hiddenDomainsString, diff]: string[] = Utils.hideString(domainsString, domainsString.length * 3);
 
         return NodeUtils.convertCodeToStructure(
             DomainLockNodeTemplate().formatUnicorn({

+ 2 - 2
src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate.ts

@@ -14,13 +14,13 @@ export function DomainLockNodeTemplate (): string {
                     break;
                 }
             }
-                
+
             for (var d1 in window[d]) {
                 if (d1.length == 6 && d1.charCodeAt(5) == 110 && d1.charCodeAt(0) == 100) {
                     break;
                 }
             }
-        
+
             var currentDomain = window[d][d1];
             
             if (!currentDomain) {

+ 74 - 0
test/functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNode.spec.ts

@@ -0,0 +1,74 @@
+import 'format-unicorn';
+
+import { DomainLockNodeTemplate } from "../../../../../src/templates/custom-nodes/domain-lock-nodes/domain-lock-node/DomainLockNodeTemplate";
+
+import { Utils } from "../../../../../src/Utils";
+
+
+const assert: Chai.AssertStatic = require('chai').assert;
+
+/**
+ * @param templateData
+ * @param currentDomain
+ * @returns {Function}
+ */
+function getFunctionFromTemplate (templateData: any, currentDomain: string) {
+    let domainLockTemplate: string = DomainLockNodeTemplate().formatUnicorn(templateData);
+
+    return Function(`
+        document = {
+            domain: '${currentDomain}'
+        };
+        
+        ${domainLockTemplate}
+    `)();
+}
+
+describe('DomainLockNodeTemplate (): string', () => {
+    let domainsString: string,
+        currentDomain: string,
+        hiddenDomainsString: string,
+        diff: string;
+
+    it('should correctly runs code inside template if current domain matches with `domainsString`', () => {
+        domainsString = ['www.example.com'].join(';');
+        currentDomain = 'www.example.com';
+        [
+            hiddenDomainsString,
+            diff
+        ] = Utils.hideString(domainsString, domainsString.length * 3);
+
+        assert.doesNotThrow(() => getFunctionFromTemplate({
+            diff: diff,
+            domains: hiddenDomainsString
+        }, currentDomain));
+    });
+
+    it('should correctly runs code inside template if current domain matches with base domain of `domainsString` item', () => {
+        domainsString = ['www.test.com', '.example.com'].join(';');
+        currentDomain = 'subdomain.example.com';
+        [
+            hiddenDomainsString,
+            diff
+        ] = Utils.hideString(domainsString, domainsString.length * 3);
+
+        assert.doesNotThrow(() => getFunctionFromTemplate({
+            diff: diff,
+            domains: hiddenDomainsString
+        }, currentDomain));
+    });
+
+    it('should throw an error if current domain doesn\'t match with `domainsString`', () => {
+        domainsString = ['www.example.com'].join(';');
+        currentDomain = 'www.test.com';
+        [
+            hiddenDomainsString,
+            diff
+        ] = Utils.hideString(domainsString, domainsString.length * 3);
+
+        assert.throws(() => getFunctionFromTemplate({
+            diff: diff,
+            domains: hiddenDomainsString
+        }, currentDomain));
+    });
+});

+ 1 - 0
test/index.spec.ts

@@ -34,3 +34,4 @@ import './functional-tests/node-obfuscators/MemberExpressionObfuscator.spec';
 import './functional-tests/node-obfuscators/MethodDefinitionObfuscator.spec';
 import './functional-tests/node-obfuscators/ObjectExpressionObfuscator.spec';
 import './functional-tests/node-obfuscators/VariableDeclarationObfuscator.spec';
+import './functional-tests/templates/custom-nodes/domain-lock-nodes/DomainLockNode.spec';