Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 69 additions & 75 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -172,85 +172,79 @@ <h1>Wanna decode <span style=
</footer>
<script src="lib/jsfuck@0.5.0.js"></script>
<script type="text/javascript">
(() => {
const select = document.getElementById('versions');

const handleChange = (event) => {
const script = document.querySelector('script[src]');
const version = event.target.value;
const link = `lib/jsfuck@${version}.js`;

const jsFuckScript = document.createElement('script');
jsFuckScript.src = link;
script.remove();
document.body.appendChild(jsFuckScript);
};

select.addEventListener('change', handleChange);
})();

const patternCreator = (prefix, postfix) => {
const replacedPrefix = prefix.replace(/[\[\]\(\)\+\!]/g, '\\$&');
const replacedPostfix = postfix.replace(/[\[\]\(\)\+\!]/g, '\\$&');

return `${replacedPrefix}(.*)${replacedPostfix}`;
};

const isMatching = (string, pattern) => {
const result = string.match(new RegExp(pattern));
return result ? result[1] : null;
};

const setDecoded = (decodedCode) => {
const code = document.getElementById('code');
code.value = eval(decodedCode);
};

const decode = () => {
const code = document.getElementById('code');
const withEval = document.getElementById('withEval');

if (withEval.checked) {
const functionNames = ['flat', 'fill', 'filter'];
let prefix = '';
let postfix = '';
let result = null;

for (const functionName of functionNames) {
if (functionName !== 'filter') {
prefix = `[][${JSFuck.encode(functionName)}]` +
`[${JSFuck.encode('constructor')}]` +
`(${JSFuck.encode('return eval')})()(`;
postfix = ')';
result = isMatching(code.value, patternCreator(prefix, postfix));

if (result) {
setDecoded(result);
break;
}
}

(function(){
var select = document.getElementById('versions');
function handleChange(event) {
var script = document.querySelector('script[src]');

var version = event.target.value;
var link = 'lib/jsfuck@' + version + '.js';

var jsFuckScript = document.createElement('script');
jsFuckScript.src = link;
script.remove();
document.body.appendChild(jsFuckScript);
};

select.addEventListener('change', handleChange);
})();

function patternCreator(prefix, postfix) {
var replacedPrefix = prefix.replace(/[\[\]\(\)\+\!]/g, '\\$&');
var replacedPostfix = postfix.replace(/[\[\]\(\)\+\!]/g, '\\$&');

return replacedPrefix + '(.*)' + replacedPostfix;
}

function isMatching(string, pattern) {
var result = string.match(new RegExp(pattern));
if (result) return result[1];

return null;
}

function setDecoded(decodedCode) {
var code = document.getElementById('code');
code.value = eval(decodedCode);
}

function decode() {
var code = document.getElementById('code');
var withEval = document.getElementById('withEval');

if (withEval.checked) {
var functionNames = ['flat', 'fill', 'filter'];
var prefix = '';
var postfix = '';
var result = null;

for (let i = 0; i < functionNames.length; i++) {
var functionName = functionNames[i];

if (functionName !== 'filter') {
prefix = '[][' + JSFuck.encode(functionName) + ']' +
'[' + JSFuck.encode('constructor') + ']' +
'(' + JSFuck.encode('return eval') + ')()(';
postfix = ')';
result = isMatching(code.value, patternCreator(prefix, postfix));

if (result) {
setDecoded(result);

break;
}
}

prefix = '[][' + JSFuck.encode(functionName) + ']' +
'[' + JSFuck.encode('constructor') + '](';
postfix = ')()';
result = isMatching(code.value, patternCreator(prefix, postfix));

if (result) {
setDecoded(result);
prefix = `[][${JSFuck.encode(functionName)}]` +
`[${JSFuck.encode('constructor')}](`;
postfix = ')()';
result = isMatching(code.value, patternCreator(prefix, postfix));

break;
}
}
} else {
setDecoded(code.value);
if (result) {
setDecoded(result);
break;
}
}
} else {
setDecoded(code.value);
}
};

</script>
</body>
</html>