如何取消混淆 JavaScript 从 const 和一堆变量开始
How to un-obfuscate JavaScript starting with const and a bunch of vars
您好,我找到了这个扩展,想查看脚本本身的内容以检查实际执行的操作。我尝试通过各种 javascript de/un-obfuscators 和 none 来编写脚本。
请告诉我一个可行的方法或将去混淆后的 JS 发给我。
混淆某些东西的意义在于它不能被逆转。它已删除所有名称并有意缩小以使其尽可能难。
您可以部分反转它,但它的可读性不高。
例如,如果你混淆了这个
function hi(first, second) {
const third = first + second
return third
}
hi(1, 2);
你会得到这样的东西。
function hi(_0x850806,_0x3f2655){const _0x2231a6=_0x850806+_0x3f2655;return _0x2231a6;}hi(0x1,0x2);
由于这仅使用原始功能,因此很容易将其反转为
function hi(_0x850806, _0x3f2655) {
const _0x2231a6 = _0x850806 + _0x3f2655;
return _0x2231a6;
}
hi(0x1, 0x2);
但是,如果你使用一些更复杂的函数(例如Array.includes)。像这样
function hi(first, arr) {
if (arr.includes(first)) {
console.log('true')
} else {
console.log('false')
}
}
const res = hi(1, [1, 2, 3]);
这可以混淆为
const _0x41ab=['includes','log','true'];(function(_0x4972c4,_0x6d8a76){const _0x4e2cf3=function(_0x383eb3){while(--_0x383eb3){_0x4972c4['push'](_0x4972c4['shift']());}};_0x4e2cf3(++_0x6d8a76);}(_0x41ab,0x1d7));const _0x4ad9=function(_0x4972c4,_0x6d8a76){_0x4972c4=_0x4972c4-0x0;let _0x4e2cf3=_0x41ab[_0x4972c4];return _0x4e2cf3;};function hi(_0x5b3f5d,_0x577a76){if(_0x577a76[_0x4ad9('0x0')](_0x5b3f5d)){console['log'](_0x4ad9('0x2'));}else{console[_0x4ad9('0x1')]('false');}}const res=hi(0x1,[0x1,0x2,0x3]);
整理后得到这个。
const _0x41ab = ['includes', 'log', 'true'];
(function(_0x4972c4, _0x6d8a76) {
const _0x4e2cf3 = function(_0x383eb3) {
while (--_0x383eb3) {
_0x4972c4['push'](_0x4972c4['shift']());
}
};
_0x4e2cf3(++_0x6d8a76);
}(_0x41ab, 0x1d7));
const _0x4ad9 = function(_0x4972c4, _0x6d8a76) {
_0x4972c4 = _0x4972c4 - 0x0;
let _0x4e2cf3 = _0x41ab[_0x4972c4];
return _0x4e2cf3;
};
function hi(_0x5b3f5d, _0x577a76) {
if (_0x577a76[_0x4ad9('0x0')](_0x5b3f5d)) {
console['log'](_0x4ad9('0x2'));
} else {
console[_0x4ad9('0x1')]('false');
}
}
const res = hi(0x1, [0x1, 0x2, 0x3]);
如您所见,此代码段将提供与未混淆代码相同的输出,但是更难阅读。
现在想象一下将其应用到一个大项目中,您就会明白为什么这几乎是不可能的。
您好,我找到了这个扩展,想查看脚本本身的内容以检查实际执行的操作。我尝试通过各种 javascript de/un-obfuscators 和 none 来编写脚本。
请告诉我一个可行的方法或将去混淆后的 JS 发给我。
混淆某些东西的意义在于它不能被逆转。它已删除所有名称并有意缩小以使其尽可能难。
您可以部分反转它,但它的可读性不高。
例如,如果你混淆了这个
function hi(first, second) {
const third = first + second
return third
}
hi(1, 2);
你会得到这样的东西。
function hi(_0x850806,_0x3f2655){const _0x2231a6=_0x850806+_0x3f2655;return _0x2231a6;}hi(0x1,0x2);
由于这仅使用原始功能,因此很容易将其反转为
function hi(_0x850806, _0x3f2655) {
const _0x2231a6 = _0x850806 + _0x3f2655;
return _0x2231a6;
}
hi(0x1, 0x2);
但是,如果你使用一些更复杂的函数(例如Array.includes)。像这样
function hi(first, arr) {
if (arr.includes(first)) {
console.log('true')
} else {
console.log('false')
}
}
const res = hi(1, [1, 2, 3]);
这可以混淆为
const _0x41ab=['includes','log','true'];(function(_0x4972c4,_0x6d8a76){const _0x4e2cf3=function(_0x383eb3){while(--_0x383eb3){_0x4972c4['push'](_0x4972c4['shift']());}};_0x4e2cf3(++_0x6d8a76);}(_0x41ab,0x1d7));const _0x4ad9=function(_0x4972c4,_0x6d8a76){_0x4972c4=_0x4972c4-0x0;let _0x4e2cf3=_0x41ab[_0x4972c4];return _0x4e2cf3;};function hi(_0x5b3f5d,_0x577a76){if(_0x577a76[_0x4ad9('0x0')](_0x5b3f5d)){console['log'](_0x4ad9('0x2'));}else{console[_0x4ad9('0x1')]('false');}}const res=hi(0x1,[0x1,0x2,0x3]);
整理后得到这个。
const _0x41ab = ['includes', 'log', 'true'];
(function(_0x4972c4, _0x6d8a76) {
const _0x4e2cf3 = function(_0x383eb3) {
while (--_0x383eb3) {
_0x4972c4['push'](_0x4972c4['shift']());
}
};
_0x4e2cf3(++_0x6d8a76);
}(_0x41ab, 0x1d7));
const _0x4ad9 = function(_0x4972c4, _0x6d8a76) {
_0x4972c4 = _0x4972c4 - 0x0;
let _0x4e2cf3 = _0x41ab[_0x4972c4];
return _0x4e2cf3;
};
function hi(_0x5b3f5d, _0x577a76) {
if (_0x577a76[_0x4ad9('0x0')](_0x5b3f5d)) {
console['log'](_0x4ad9('0x2'));
} else {
console[_0x4ad9('0x1')]('false');
}
}
const res = hi(0x1, [0x1, 0x2, 0x3]);
如您所见,此代码段将提供与未混淆代码相同的输出,但是更难阅读。
现在想象一下将其应用到一个大项目中,您就会明白为什么这几乎是不可能的。