首先是我最近遇到一個(gè)網(wǎng)馬,加密結(jié)果如下:
是不是看的很頭疼啊?亂七八糟的,無從下手了,不是簡單的解密工具就行了吧?我們一起來動(dòng)手解決掉它吧!首先我們來一起了解兩個(gè)關(guān)鍵詞“document.write”和“eval”。
“document.write”在JAVASCRIPT是一條打印語句,而“eval”指的是eval()函數(shù),這個(gè)函數(shù)可以把一個(gè)字符串當(dāng)作一個(gè)JavaScript表達(dá)式一樣去執(zhí)行它。如果在JS的加密代碼中碰上document.write,我們一般把它改成“alert”,如果遇到“eval”一般改成“document.write”。我們首先吧eval改為document.write然后運(yùn)行看看結(jié)果:
這段代碼,最快的防翻譯辦法就是加入上面地址中http://www.baidu.com/s?wd=document,返回的結(jié)果是:
下面我們一起看看天網(wǎng)被掛過的一個(gè)網(wǎng)馬:
一堆亂七八糟的,都不知道是什么。如何解讀?其實(shí)在最快最簡單的辦法就是瀏覽這個(gè)頁面,保存時(shí)候選擇中歐(ISO)編碼就可以了。
得到結(jié)果:
保存時(shí)候依然選擇中歐(ISO)編碼即可得到如下結(jié)果:
接下來就來看一個(gè)有貌似點(diǎn)難度的了。最近黑客防線出的《黑暗網(wǎng)馬》使用了火狐里一個(gè)人出的加密工具。解密過程需要提供密碼,難道是為了防止修改?看起來有點(diǎn)類似md5加密,難道真的不可逆?1K的網(wǎng)馬可以加密到15K甚至更大,太可怕了吧?讓我們一起來把他解密出來吧!
意思就是調(diào)用pass驗(yàn)證函數(shù),如果為真,就繼續(xù)執(zhí)行里面的內(nèi)容。XOR是運(yùn)算符,對兩個(gè)表達(dá)式進(jìn)行邏輯“異或”運(yùn)算。這里就不詳細(xì)了解了。關(guān)鍵是最后的Document.write(cuteqq3)了解網(wǎng)頁代碼的人就知道這段具體的意思就是,如果密碼驗(yàn)證正確。就輸出cuteqq3這個(gè)函數(shù)里的內(nèi)容。當(dāng)我們遇到document.write的時(shí)候我們一般把它改成“alert”得到初步解密:
這里我們就遇到一個(gè)問題。Alert根據(jù)里顯示器的大小顯示內(nèi)容。無法完整顯示出內(nèi)容。怎么辦?我們引入一段javascript代碼:document.getElementById('textfield').value=cuteqq3;替換掉原來的document.write(cuteqq3);然后在頁面的</head>
<body>和<script></script>之間添加一段,效果如下:
<html>
<;head>
<title>網(wǎng)馬</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<label>
<textarea name="textfield" cols="100" rows="50"></textarea>
</label>
</form>
<script>
….這里省略解密部分
</script>
這里的意思是建立一個(gè)文本框,然后吧剛才的cuteqq3的內(nèi)容賦值給文本框,Textfield是文本框的名稱?梢宰约盒薷摹5潜仨毿薷膁ocument.getElementById('textfield').value里對應(yīng)的名稱,再次運(yùn)行剛才的網(wǎng)馬得到結(jié)果:
剛才加密過代碼大小是:
解密后是:
至于里面的\x72\x65\x73\x70\x6F\x6E\x73\x65\x42\x6F\x64\x79這樣的代碼,我們就可以用簡單的辦法突破了。
十六進(jìn)制轉(zhuǎn)義字符串如下:
<SCRIPT LANGUAGE="JavaScript">
alert("\x72\x65\x73\x70\x6F\x6E\x73\x65\x42\x6F\x64\x79")
</SCRIPT>
就可以顯示出來了,順便說下。剛才的加密頁面里用到了防止查看源代碼的技術(shù)。就是適用下面的代碼
<noscript>
<iframe src=*>
</iframe>
</noscript>
這個(gè)是申通快遞被掛馬的時(shí)候抓到的,后來無意中得知這個(gè)加密方式用到的是JS混淆,http://www.cha88.cn/safe/JSencode.php這個(gè)網(wǎng)站有這個(gè)加密方式,但是沒有解密方式。怎么辦?簡單!
大家一起看看最后這段代碼:
t=utf8to16(xxtea_decrypt(base64decode(t), '\x64\x63\x75\x6d\x65\x6e\x74'));//對t數(shù)組進(jìn)行提取、重組、解密處理
window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x77\x72\x69\x74\x65"] (t);//輸出加密后的t的內(nèi)容
是不是有什么感覺?覺得像什么?
我們把\x64\x6f\x63\x75\x6d\x65\x6e\x74和\x77\x72\x69\x74\x65分別用我們剛才的alert的辦法解密出來,他們分別對應(yīng)的是document和write,也就是說最后這2行的意思就是對t數(shù)組進(jìn)行提取、重組、解密處理并輸出最后正確的結(jié)果。知道這個(gè)我們就很容易理解了,所有網(wǎng)馬到最后為了輸出讓瀏覽器識別,都要進(jìn)行最后的解密輸出。通常就是document.write和eval里的內(nèi)容了。那么我們用剛才的document.getElementById('textfield').value=t;替換掉window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x77\x72\x69\x74\x65"] (t);并再頁面頂端的<body>下面加入如下代碼:
<form id="form1" name="form1" method="post" action="">
<label>
<textarea name="textfield" cols="100" rows="50"></textarea>
</label>
</form>
再次運(yùn)行網(wǎng)馬。即可得到第一層解密的結(jié)果:
這還不是我們要的最終結(jié)果。還記得上面講過的?遇到eval就替換為alert:
順便提下最近比較流行的溢出型網(wǎng)馬的解密方式:var shellcode = unescape("邐"+"邐"+
這樣的代碼其實(shí)是可以翻譯成明文的,這里使用的加密方式是將ASCII轉(zhuǎn)換為unescape,對應(yīng)解密方式就是反過來啦,借助工具
就可以輕易解密了,這樣你就可以再?zèng)]有生成器的時(shí)候?qū)e人的網(wǎng)馬改為自己的了!
無意中獵取到一個(gè)Oday的話,就happy了O(∩_∩)o…
最后終結(jié):
我們適用到的幾個(gè)關(guān)鍵詞和辦法:
關(guān)鍵詞:
1. document.write
2. eval
3. alert
4. <noscript>
<iframe src=*>
</iframe>
</noscript>
5.document.getElementById('textfield').value=t;
<form id="form1" name="form1" method="post" action="">
<label>
<textarea name="textfield" cols="100" rows="50"></textarea>
</label>
</form>
用法:
碰上document.write,我們一般把它改成“alert”,如果遇到“eval”一般改成“document.write”,遇到alert無法顯示完整代碼時(shí)適用document.getElementById('textfield').value=t;將他賦值給一個(gè)文本框,然后再<form id="form1" name="form1" method="post" action="">
<label>
<textarea name="textfield" cols="100" rows="50"></textarea>
</label>
</form>
表單中顯示出來,如果遇到使用了
<noscript>
<iframe src=*>
</iframe>
</noscript>
而無法顯示網(wǎng)頁代碼的。就到IE緩存中尋找被保存到本地的網(wǎng)馬文件,用我提供的辦法應(yīng)該可以解開絕大部分的網(wǎng)馬了,
希望大家看完知道不是盲目的套用,而是可以舉一反三!這樣才能不斷進(jìn)步。沒有你做不到的,只有你想不到的!