2015-03-25 70 views
1

我是一个JavaScript的新人,我正在努力去理解它。什么是这样的魔术JavaScript代码用于和如何创建?

以下片段javascript代码来自项目Vish的文件vishEditor.js,整个文件包含3万多行,因此我将魔术部分剪成小文件magic-javascript.js

eval(function(p, a, c, k, e, r) { 
e = function(c) { 
    return (c < a ? "" : e(parseInt(c/a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) 
}; 
....... 
} 
return p 
}("(D($){8($.1s.1v){H}$.1s.6i=$.1s.1v=D(u,w){8(1l.S==0){18(J,'6j 55 6k 1j \"'+1l.4o+'\".');H 1l}8(1l.S>1){H 1l.1W(D(){$(1l).1v(u,w)})}F y=1l,$12=1l[0],56=L;8(y.1q('57')){56=y.1P('3o','4p');y.T('3o',['4q',J])}F z={};z.59=D(o,a,b ...... 

我有两个问题:

(1)当我运行该项目vish,功能eval(function(p, a, c,k,e,r){}();被调用,但我不知道该功能的具体目标,进行测试,我删除这个功能并重新启动它,它似乎工作正常。我很困惑,这个神奇功能用于什么?

(2)在here中有一个非常大的魔法代码,以("(D($){8($.1s.1v){H}$.1s.6i=$.开头,它是什么意思以及如何创建这样一个魔法代码?

欢迎任何消息!

+0

首先,你必须了解eval()函数做 – degr 2015-03-25 09:55:50

回答

3

这是缩小和混淆的文件。你不能(或者这样调试非常困难)。在这里阅读更多关于它:

http://www.programmerinterview.com/index.php/javascript/minification-vs-obfuscation/

+0

斯拉文,感谢,对于未混淆工具 – abelard2008 2015-03-25 10:06:26

+1

@ abelard20008你可以使用一个JS美化(HTTP。? //jsbeautifier.org/)以更可读的方式对代码进行格式化,但是没有体面的方法来混淆变量名称以及发生了什么。 – 2015-03-25 10:10:06

1

尝试http://jsnice.org/
说明从网站
“欢迎JSNice -
我们赚模糊JavaScript代码可读性 我们将变量和参数重命名为名称,我们从数千个开源项目的学习。 而且,往往我们也能猜测或推断类型标注。 尝试在你的JavaScript代码JSNice,看看它是如何工作! 覆盖由JSNice建议的名称(通过启用“INTE ractive重新命名“在设置中)。 点击了解更多关于JSNice“

相关问题