DomainLockNodeTemplate spec

This commit is contained in:
sanex3339
2016-09-19 23:52:54 +03:00
parent 5069ec213b
commit 19bfbd4514
5 changed files with 80 additions and 5 deletions
+1 -1
View File
@@ -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;
@@ -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({
@@ -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) {
@@ -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
View File
@@ -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';