当前位置:编程学习 > JS >>

js脚本混淆&加密

混淆”也好,“加密”也好,都是为了加强代码的安全性,防范被人任意查看,在一定程度上保护资源。
 
请大家注意,在本主题的标题上,我把“混淆”、“加密”这两个概念堆在一起了,为的是从实现目的的角度着眼,从实践的角度着手,不主观地排斥任何手段。所有“混淆”技巧都是为了降低代码的可读性;所有“加密”技巧都是要通过“解密”计算过程将代码还原以后才能执行。
 
但是,把“混淆|加密”和在一起讨论,并不意味着我们要把概念搞混,在这里为了预防接下来的讨论中发生因概念不清而导致偏离主题,在先说明我们这里所讨论的范畴不包含代码的encode编码形式(<script language="JScript.Encode">)。这个既非“混淆”,也非“加密”,而是“编码”,相应的解码过程早为业界所熟悉,因而没有多大的保护意义,最多只是让人多费一道手续而已。当然我们可以把它当作“混淆|加密”的最后一步,目的为了唬住不了解它的人或者让了解的人多费一道手续。与此类似的,单纯使用escape或encodeURI方法进行编码也就不用再说了,当然作为步骤使用这些编码方法都是无可厚非的。
 
 
理想的“混淆|加密”应该具有以下特点:
 
 
1、没有确定的破解模式;
 
2、很难编制自动破解程序(只能手工破解);
 
3、破解过程繁琐、耗时;
 
4、“混淆|加密”后的代码,比原始代码长度增加少;
 
容易想象得出,如果没有第4条的限制,那么前三条是很容易实现的,只要疯狂地添加与代码执行部分无关的字符就可以了。
 
以上四条是最基本的要求。至于“使人眼从主观上感觉混乱”可以认为是第3条的一个实现方式,恢复代码可读性可能是破解过程的主要工作内容之一。
 
接下来,我希望大家一起来总结一下现有的“混淆|加密”技巧,以作为我们进一步研究的基础。任何个人的见识终归总是有限的,唯有请大家集思广益才能真正有所突破、建树经典。
 
见过这样一些“混淆|加密”技巧:
 
 
1、去除缩进、空行、换行、注释
 
这个是混淆的基本手段,太基本了,不想多说。可以缩短代码。一般根据“;”所在,恢复换行是最常规的破解技巧。
 
 
2、变量名替换
 
将JavaScript 文件中所有的变量名替换为一组合法的随机字符串,使其失去自我描述的能力,从而干扰阅读。
 
替换方式大概有“缩短”和“改乱”这两种。
 
举例:http://pub.idr.gov.cn/dujid/projects/jsdisturber/  这个是改乱的
 
有一个叫做Javascript Obfuscator的软件,充斥在大大小小的软件下载站上,各位或许用过也说不定。
 
这一类的混淆器都有不少的参数可以设定。对此我们不知是该哭还是该笑。
 
这种技巧对于长而复杂的代码比较有效,也就是可以让原本就难懂的代码变得更难懂。但是对于简短的代码来说就没有什么保护意义了。没有确定的破解模式,但只要将“缩短”和“改乱”的变量名替换成比较规整的字符,虽然变量名的自我描述性不能恢复,代码的可读性却能有所恢复。
 
 
3.通过自定义变量名引用JS关键字
 
例如;var d=document;
 
接下来的代码中所有的关键字document都用d来替换。
 
这种技巧可以缩短代码。反方向替换即可还原。
 
 
4、通过添加大段大段的空白,把代码前后间隔的很长,从而干扰阅读。
这里添加的空白一般是\x00,而不是通常所谓的“空格”(\x20)。
Code:
CODE:
<         h   t        m     l        >
    
 
      
<         h   e     a     d   >
   
         <   m   e    t      a      h     t        t      p      -       e         q  u     i      v   =        " C on         t       e n         t        -         L a      n    gu    ag    e       "            c   o  n      t      e    n     t         =  "  z h-      c         n"       >
 
        <   me      t a     h    t     t     p -      e q   ui    v         =     "      C       o   nt    e         n     t        -      Ty       p  e "    co    n    t   e      n        t=    "      t      ex  t   /      h    t m        l  ;          c  h a r         s e       t     =       g        b        2 3     1   2     "    >
 
     <         t        i     t       l       e    >  网      页混         淆       <       /   t   i t  l   e  >      
    <       met a            n     a         me       ="       g      e   n        e r  a   t o        r    "   co       nt     e   n      t     =        "         Mi   c    r      o      so      
补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,