mirror of
https://github.com/javascript-obfuscator/javascript-obfuscator
synced 2026-08-09 12:42:29 +00:00
DomainLockNodeTemplate spec
This commit is contained in:
Vendored
+1
-1
@@ -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({
|
||||
|
||||
+2
-2
@@ -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));
|
||||
});
|
||||
});
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user