jvascript字节流加密
我们先看如下加密函数:
function dehydrate(s) {<br /> var r = new Array();<br /> for (var i=0; i < s.length ; i++)<br /> {<br /> for (var j=6; j >= 0 ; j-- )<br /> {<br /> if (s.charCodeAt(i) & (Math.pow(2,j)) )<br /> {<br /> r.push(' ');<br /> } else {<br /> r.push('\t');<br /> }<br /> }<br /> }<br /> r.push('\n');<br /> return r.join('');<br />}
将一个包含任意字符的字符串转换为一个只包含空白字符的字符串,而这些空白字符实际上表示了原字符串中对应字符的字节流。一个空格表示1,一个制表符(Tab)表示0,而换行符则表示字节流的结束。例如:a = 空格 空格 制表 制表 制表 制表 空格开头 = 110001 = 97 .我们对一段网马进行加密后变成如下代码:
//startevil<br /> <br /> <br />//endevil
请注意,注释的中间关非空白,而是加密后的代码。我们将其代码放入网页中,然后使用解密函数进行解密:
function hydrate(s) {<br /> var r = new Array();<br /> var curr = 0;<br /> while(s.charAt(curr) != '\n') {<br /> var tmp = 0;<br /> for (var i=6; i>=0 ; i-- )<br /> {<br /> if (s.charAt(curr) == ' ')<br /> {<br /> tmp = tmp | (Math.pow(2,i));<br /> }<br /> curr++;<br /> }<br /> r.push(String.fromCharCode(tmp));<br /> }<br /> return r.jon('');<br />}
当我们把代码放入页面时,还要对其取出:
var html = document.body.innerHTML;<br />var start = html.indexOf("//startevil");<br />var end = html.indexOf("//endevil");<br />var code = html.substring(start,end);<br />document.write(hydrate(code));
这种使用空白字符串的加密方法,能够在光天化日之下非常有效的隐藏恶意的Javascript代码。
转载请注明:woyigui's blog [http://www.woyigui.cn/]
本文标题:jvascript字节流加密
本文地址:http://www.woyigui.cn/2009/08/05/hydrate/
绝!
[回复]