1、首先新建一個(gè)html文件,命名為test.html。
成都創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、印臺網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為印臺等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
2、在test.html文件內(nèi),使用img標(biāo)簽創(chuàng)建一張圖片顯示,并設(shè)置其id屬性為pic。
3、在test.html文件內(nèi),使用button標(biāo)簽創(chuàng)建一個(gè)按鈕,按鈕名稱為“改變圖片樣式”。
4、在test.html文件內(nèi),給button綁定onclick點(diǎn)擊事件,當(dāng)按鈕被點(diǎn)擊時(shí),執(zhí)行cha()函數(shù)。
5、在test.html文件內(nèi),在js標(biāo)簽內(nèi),創(chuàng)建cha()函數(shù),在函數(shù)內(nèi),使用getElementById()方法獲得img元素對象,再使用setAttribute()方法設(shè)置img對象的class屬性為imagecss。
6、在test.html文件內(nèi),使用css定義imagecss的樣式,設(shè)置為紅色5px邊框,寬度為300px,就可以了。
1:利用IE開發(fā)人員工具(IE8開始已經(jīng)自帶,IE7以前需要下載安裝IE?Developer?Toolbar)進(jìn)行反混淆,
2:代碼實(shí)現(xiàn)
混淆后的測試代碼
eval(function(p,a,c,k,e,d){e=function(c){return(ca?"":e(parseInt(c/a)))+((c=c%a)35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('1("0-6");2 4(){1("0-5")}8 3=2(){1("0-7")};4();3()',9,9,'憂郁的匹格|alert|function|b|a|反混淆測試2|反混淆測試1|反混淆測試3|var'.split('|'),0,{}))
開始實(shí)施:
1.新建一個(gè)網(wǎng)頁xxx.html
2.加入一個(gè)div容器 id="divTest"
3.最關(guān)鍵的一步--賦值執(zhí)行:(在上面混淆的代碼中,將eval()中的內(nèi)容提取出來賦值(或直接打印)給document.getElementById('divTest').innerText?)
document.getElementById('divTest').innerText=function(p,a,c,k,e,d){e=function(c){return(ca?"":e(parseInt(c/a)))+((c=c%a)35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('1("0-6");2 4(){1("0-5")}8 3=2(){1("0-7")};4();3()',9,9,'憂郁的匹格|alert|function|b|a|反混淆測試2|反混淆測試1|反混淆測試3|var'.split('|'),0,{})
打開xxx.html 顯示結(jié)果:(反混淆后的代碼已經(jīng)被壓縮了,去掉了換行等字符)
alert("憂郁的匹格-反混淆測試1");
function a(){alert("憂郁的匹格-反混淆測試2")}
var b=function(){alert("憂郁的匹格-反混淆測試3")};
a();
b();
PS:使用packed這個(gè)混淆過的js都可以使用這個(gè)方法還原,找了幾個(gè)項(xiàng)目里面混淆過的js都可以還原,只是去掉了換行符,
script
window.onload=function(){
var a = ["a","b","c"];
var b = [1,"haha",function(a){alert(a);}];
var obj = Ary2Obj(a,b);
var func = Ary2Func(a,b);
//test
obj.c(obj.a+obj.b);
//test
var f = new func();
f.c(f.a+f.b);
}
function Ary2Obj(ary1,ary2){
var o = {};
for(var i=0;iary1.length;i++){
o[ary1[i]]=ary2[i];
}
return o;
}
function Ary2Func(ary1,ary2){
var f = function(){};
for(var i=0;iary1.length;i++){
f.prototype[ary1[i]]=ary2[i];
}
return f;
}
/script
Grunt里面的grunt-contrib-uglify可以進(jìn)行類似的壓縮和混淆,但是還有其他的工具也可以,例如Yahoo YUI Compressor,所以說不一定是那工具出來的。
早期的混淆是采用eval的機(jī)制來混淆的,把源代碼的結(jié)構(gòu)用 eval 改的面目全非,這個(gè)過程是可逆的。
而類似grunt-contrib-uglify這樣的工具可以用自定義的符號對代碼進(jìn)行混淆,如果不知道自定義的符號 key,過程是不可逆的。
而后一種方式有點(diǎn)像諜戰(zhàn)中的通過“代號”找人一樣,打個(gè)比方:
我黨的地下工作者有:xx(不告訴你名字) - 三爺 xx(不告訴你名字) - 四兒,這個(gè)名單中統(tǒng)并不知道,所以名字不能告訴你
中統(tǒng)獲得一件情報(bào):三爺打算5點(diǎn)去找人聯(lián)絡(luò),請你告訴我,三爺是誰?