為了防止盜版或者至少使盜版更加困難,JS開發(fā)者、前端開發(fā)者常會(huì)使用混淆工具對JS代碼進(jìn)行混淆。
常見的JS混淆工具有以下幾種:
1、YUI Compressor
2、google Closure Compiler
3、UglifyJS
4、JScrambler
5、JShaman
下面我們通過實(shí)例,對比一下這幾種JS混淆工具的性能,看誰的混淆效果最好。
測試源碼:
function displayNoteTitle(note) { alert(note['title']); } var flowerNote = {}; flowerNote['title'] = "Flowers"; displayNoteTitle(flowerNote);
1、YUI Compressor混淆結(jié)果:
function displayNoteTitle(a){alert(a.title)}var flowerNote={};flowerNote.title="Flowers";displayNoteTitle(flowerNote);
2、Google Closure Compiler混淆結(jié)果:
function displayNoteTitle(a){alert(a.title)}var flowerNote={title:"Flowers"};displayNoteTitle(flowerNote);
3、UglifyJS混淆結(jié)果:
function displayNoteTitle(e){alert(e.title)}var flowerNote={};flowerNote.title="Flowers",displayNoteTitle(flowerNote);
4、JScrambler混淆結(jié)果:
var g5b={'S':"A",'A':function(b){flowerNote['title']=b;},'X':"V",'o':(function(E){return (function(s,p){return (function(G){return {K:G};})(function(m){var c,R=0;for(var U=s;Ry;})(parseInt,Date,(function(n){return (''+n)["substring"](1,(n+'')["length"]-1);})('_getTime2'),function(n,a){return new n()[a]();}),function(m,R){var d=parseInt(m["charAt"](R),16)["toString"](2);return d["charAt"](d["length"]-1);});})('3lrno3f7c'),'e':'title','V':function(b){x=b;},'Q':"Flowers",};function displayNoteTitle(b){alert(b[g5b.e]);}var flowerNote=g5b.o.K("3d3")?{}:"Flowers";g5b[g5b.S](g5b.Q);displayNoteTitle(flowerNote);g5b[g5b.X](g5b.D);
5、JShaman混淆結(jié)果:
var _0xcb07=['title','Flowers'];(function(_0xecc7fb,_0xdfa845){var _0x3b37f1=function(_0x663ded){while(--_0x663ded){_0xecc7fb['\x70\x75\x73\x68'](_0xecc7fb['\x73\x68\x69\x66\x74']());}};_0x3b37f1(++_0xdfa845);}(_0xcb07,0x11c));var _0x7cb0=function(_0x108ec8,_0x507f5d){_0x108ec8=_0x108ec8-0x0;var _0x586c42=_0xcb07[_0x108ec8];return _0x586c42;};function displayNoteTitle(_0x23cbc1){alert(_0x23cbc1[_0x7cb0('0x0')]);}var flowerNote={};flowerNote[_0x7cb0('0x0')]=_0x7cb0('0x1');displayNoteTitle(flowerNote);
測試結(jié)論:
YUI Compressor、Google Closure Compiler、UglifyJS,這幾個(gè)JS工具為一類,他們主要是將JS源碼進(jìn)行了壓縮,使代碼更為小巧,如果目的是讓代碼體積變小,使用這幾個(gè)工具是可以的。但筆者認(rèn)為,混淆的目的是要讓JS代碼失去可讀性。防止被別人分析利用,顯然這幾個(gè)工具并沒有很好的實(shí)現(xiàn)這一點(diǎn)。
JScrambler、JShaman的混淆結(jié)果是相不錯(cuò)的,從上面的例子可以看到經(jīng)過混淆的JS代碼,變的混亂,無法閱讀,真正達(dá)到了混淆的目的,使JS代碼不可讀化了。JShaman是國內(nèi)的JS混淆平臺(tái),在線就可以使用。Jscramber是英文的、而且使用需要注冊,使用也比較復(fù)雜,對國人使用來說,有些不便。
好了,這就是對幾種當(dāng)下流行、常見的JS混淆工具的比較。希望對大家有用。。