我使用这个http://www.javascriptobfuscator.com/Default.aspx对我的javascript代码进行了模糊处理,但似乎我可以'找到将其备份到原始代码的方法..有什么办法吗?
答案 0 :(得分:1)
你可以找回一些代码,但几乎所有的函数名都会丢失,局部变量会被替换掉。
以the link you provided上的默认代码为例:
<强> ORIGINAL 强>
function NewObject(prefix)
{
var count=0;
this.SayHello=function(msg)
{
count++;
alert(prefix+msg);
}
this.GetCount=function()
{
return count;
}
}
var obj=new NewObject("Message : ");
obj.SayHello("You are welcome.");
<强>混淆强>
var _0x5601=["\x53\x61\x79\x48\x65\x6C\x6C\x6F","\x47\x65\x74\x43\x6F\x75\x6E\x74","\x4D\x65\x73\x73\x61\x67\x65\x20\x3A\x20","\x59\x6F\x75\x20\x61\x72\x65\x20\x77\x65\x6C\x63\x6F\x6D\x65\x2E"];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]);
第1步 - 解码变量数组
首先,我们需要解码变量数组(开始var _0x5601=
的部分,并在第一个function
之前结束)。我发现最简单的方法是将数组复制并粘贴到Chromes开发人员控制台中。只需粘贴整行并按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;
?>
第3步 - 美丽
现在,让我们使用类似http://jsbeautifier.org/
的内容“美化”代码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.");
第4步 - 正则表达式用对象表示法替换数组项
最后一步是执行最后一次替换,但这次我们需要使用正则表达式的帮助。我使用一个名为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.");
它不是那么漂亮,正如我所提到的,局部变量已被替换。但是如果你知道你的代码,那么理解他们正在做什么并不是很难。