Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何消除模糊的Javascript?_Javascript_Jquery - Fatal编程技术网

如何消除模糊的Javascript?

如何消除模糊的Javascript?,javascript,jquery,Javascript,Jquery,我用这个混淆了我的javascript代码,但似乎我找不到恢复原始代码的方法。。有什么办法吗?您可以取回一些代码,但几乎所有函数名都将丢失,局部变量往往会被替换 以以下位置的默认代码为例: 原创的 模糊的 步骤1-解码变量数组 首先,我们需要解码变量数组,即开始var _0x5601=并在第一个函数之前结束的部分。我发现最简单的方法是将阵列复制并粘贴到Chromes developer控制台中。只需粘贴整行并按enter键,然后在控制台中键入变量名,您将得到如下结果: ["SayHello",

我用这个混淆了我的javascript代码,但似乎我找不到恢复原始代码的方法。。有什么办法吗?

您可以取回一些代码,但几乎所有函数名都将丢失,局部变量往往会被替换

以以下位置的默认代码为例:

原创的

模糊的

步骤1-解码变量数组

首先,我们需要解码变量数组,即开始var _0x5601=并在第一个函数之前结束的部分。我发现最简单的方法是将阵列复制并粘贴到Chromes developer控制台中。只需粘贴整行并按enter键,然后在控制台中键入变量名,您将得到如下结果:

["SayHello", "GetCount", "Message : ", "You are welcome."]
步骤2-变量数组项的字符串替换代码

接下来,我们将使用任何一种编程语言帮助您将这个新数组解析回js。本质上,使用新解码的数组,并执行字符串替换其余代码。我手边有PHP,所以我做了这个:

<?php
// decoded array
$_0x5601 = array("SayHello", "GetCount", "Message : ", "You are welcome.");
// rest of the obfuscated code
$code = "function NewObject(_0xa158x2){var _0xa158x3=0;this[_0x5601[0]]=function (_0xa158x4){_0xa158x3++;alert(_0xa158x2+_0xa158x4);} ;this[_0x5601[1]]=function (){return _0xa158x3;} ;} ;var obj= new NewObject(_0x5601[2]);obj.SayHello(_0x5601[3]);";
// loop over array
for($x = 0; $x < count($_0x5601); $x++){
  // string replace on the code
  $code = str_replace('_0x5601['.$x.']', '"'.$_0x5601[$x].'"', $code);
}
// output result
echo $code;
?>
步骤4-正则表达式用对象表示法替换数组项

最后一步是执行最后一次替换,但这次我们需要使用regex的帮助。我使用一个名为Sublime Text 2的IDE,它能够查找和替换正则表达式,我相信大多数IDE也有这个功能

我使用的正则表达式模式看起来像这样\[\[a-zA-Z0-9\-\\\-\\\+\]来解释:

\[\"                    // code must start with ["
(                       // open capturing group
    [a-zA-Z0-9]+        // match all characters a-zA-Z0-9  you may need to adjust this to include -, _ etc as needed
)                       // capture everything in this group
\"\]                    // code must end with "]
您想用.$1替换与此模式匹配的任何内容。导致:

function NewObject(_0xa158x2) {
    var _0xa158x3 = 0;
    this.SayHello = function(_0xa158x4) {
        _0xa158x3++;
        alert(_0xa158x2 + _0xa158x4);
    };
    this.GetCount = function() {
        return _0xa158x3;
    };
};
var obj = new NewObject("Message : ");
obj.SayHello("You are welcome.");

它不太漂亮,正如我提到的,局部变量已经被替换了。但是如果你知道你的代码,理解他们在做什么应该不会太难

大多数人在混淆之前先存储副本。祝你好运如果有,原始的模糊处理程序就不是很好。将代码包装在一个命名函数中,运行闭包,然后运行美化,然后修剪添加的包装函数。如果你问我的话,我觉得很可读。您可以更改部分代码重写以保留更具逻辑性的流。通过闭包运行最后一部分,然后重新美化生成更好的代码,例如:alertb+cis alertb+c比alert_0xa158x2+_0xa158x4更好?它们仍然是无意义的变量名:p每个都有自己的变量名,我想我认为它更可读_玻璃上的0xa158x2和_0xa158x4看起来像同一个变量。这不是更好的代码,而是更好的人为因素…@dandavis很好的一点,我个人的小变量在书海中迷失了方向,我最终训练我的眼睛寻找_0xa158前缀,而只阅读post x后缀。。但就像我对每个人说的:
function NewObject(_0xa158x2) {
    var _0xa158x3 = 0;
    this["SayHello"] = function(_0xa158x4) {
        _0xa158x3++;
        alert(_0xa158x2 + _0xa158x4);
    };
    this["GetCount"] = function() {
        return _0xa158x3;
    };
};
var obj = new NewObject("Message : ");
obj.SayHello("You are welcome.");
\[\"                    // code must start with ["
(                       // open capturing group
    [a-zA-Z0-9]+        // match all characters a-zA-Z0-9  you may need to adjust this to include -, _ etc as needed
)                       // capture everything in this group
\"\]                    // code must end with "]
function NewObject(_0xa158x2) {
    var _0xa158x3 = 0;
    this.SayHello = function(_0xa158x4) {
        _0xa158x3++;
        alert(_0xa158x2 + _0xa158x4);
    };
    this.GetCount = function() {
        return _0xa158x3;
    };
};
var obj = new NewObject("Message : ");
obj.SayHello("You are welcome.");