javascript-obfuscator
Version:
JavaScript obfuscator
82 lines (64 loc) • 3.15 kB
text/typescript
import { IEscapeSequenceEncoder } from '../../../interfaces/utils/IEscapeSequenceEncoder';
/**
* SelfDefendingTemplate. Enter code in infinity loop.
*
* @param {IEscapeSequenceEncoder} escapeSequenceEncoder
* @returns {string}
*/
export function SelfDefendingTemplate (escapeSequenceEncoder: IEscapeSequenceEncoder): string {
return `
const selfDefendingFunc = function () {
const object = {
data: {
key: 'cookie',
value: 'timeout'
},
setCookie: function (options, name, value, document) {
document = document || {};
let updatedCookie = name + "=" + value;
let i = 0;
for (let i = 0, len = options.length; i < len; i++) {
const propName = options[i];
updatedCookie += "; " + propName;
const propValue = options[propName];
options.push(propValue);
len = options.length;
if (propValue !== true) {
updatedCookie += "=" + propValue;
}
}
document['cookie'] = updatedCookie;
},
removeCookie: function(){return 'dev';},
getCookie: function (document, name) {
document = document || function (value) { return value };
const matches = document(new RegExp(
"(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
const func = function (param1, param2) {
param1(++param2);
};
func({whileFunctionName}, {timesName});
return matches ? decodeURIComponent(matches[1]) : undefined;
}
};
const test1 = function () {
const regExp = new RegExp('${
escapeSequenceEncoder.encode('\\w+ *\\(\\) *{\\w+ *[\'|"].+[\'|"];? *}', true)
}');
return regExp.test(object.removeCookie.toString());
};
object['updateCookie'] = test1;
let cookie = '';
const result = object['updateCookie']();
if (!result) {
object['setCookie'](['*'], 'counter', 1);
} else if (result) {
cookie = object['getCookie'](null, 'counter');
} else {
object['removeCookie']();
}
};
selfDefendingFunc();
`;
}