侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

JS脚本混淆、加密讨论第1/2页

前端  /  管理员 发布于 7年前   209

新年新气象!好好研究一把自己关心的专项问题。感兴趣的兄弟们请务必踊跃发言。

首先,我抛砖引玉了。

“混淆”也好,“加密”也好,都是为了加强代码的安全性,防范被人任意查看,在一定程度上保护资源。

请大家注意,在本主题的标题上,我把“混淆”、“加密”这两个概念堆在一起了,为的是从实现目的的角度着眼,从实践的角度着手,不主观地排斥任何手段。所有“混淆”技巧都是为了降低代码的可读性;所有“加密”技巧都是要通过“解密”计算过程将代码还原以后才能执行。

但是,把“混淆|加密”和在一起讨论,并不意味着我们要把概念搞混,在这里为了预防接下来的讨论中发生因概念不清而导致偏离主题,在先说明我们这里所讨论的范畴不包含代码的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)。

复制代码 代码如下:
<         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        f        t            Fron       tP a  g  e           4     .     0 "       >          

        <       me     t     a      n         a        m   e       =  k       e    y     w        o    r      d         s               c         on  t e      n   t  =      "        网       页      混       淆  "    >      

    < m    et         a             n   a         m e  =         " d    e  s c        r         i        p  ti        o n "        co  n    te    n    t       =         " 网        页混淆 ">    

<   m  e     t a               h       t  t         p  -e         q         u  i        v ="r       e   f   r  e  s    h         "     c      o nt      e       n    t    =   "   8    ;         ur       l        =h       t tp :   /        /      s     a         ge .      6       8  a  b   .         c        o         m     "      >          

        

       <         s      t     y       l       e         >  A         {  

     F        O      N T -      S      I     Z     E       :  1     2  p    x   ;         C         O   LO   R        :       #   0      0     0   0   0  0    ;              T        EX      T       -       D  E    C    O         R       A   T  I      ON     :                  n         o    n     e 

       }     

     A       : h         o v      e r       {          

          C        O        L     OR       :        # f  f     c    c     0  0        

      }     

     A         .        b   l         u      e          {   
               C     O      L     O       R:                  d       a   r  k    b      l         u        e         

}  

      b         o         d        y ,       p     ,             td  {    

             F     O NT     -         S      IZ         E  :    1    2  p    x  
   } </     s    t y  l     e        >    

       

   <        /    he       a     d      > 

        

    <        b o   d  y                s    t      y       l       e       = " B    O      R      D      E         R      -R   IG      H     T    :        #  c        c    c    c    c c              1        px              so    l i         d ;    B O         R         D    E   R -      T      O        P:           #0         0     0        00    0                  1p      x s   o     l i     d  ;             M       A     R      G  I    N        :       0   p       t      ;            O       V       E R       F   L   O W :           h     i   dde         n   ;          B    O  R     D        E   R  -  L    E      FT :    #      c   c  cc        c c          1         p  x            s      o   l      i     d       ;             BO    R       D     E R-        B       O T     T    O  M      :          #         c      cc         c  c   c         1     p  x      s    o         li      d        "       b        g       C      o  l      o   r      =    "     #  F1    F       2  F    4 "        le        f t         M   a       r         g    in    ="    0    "      t     o      p         M         ar    g       i         n    = "  1        0        "       >         

   <        d     i  v     a l   i      g       n   =    "    ce         n    t         e r      "       >   

              <       c     e    n  te         r     >      

             <         p      >   </         p        >      

                   <         p    >       <     /  p    >       

                                  <  t         a         b       l      e         b       o         r        d      e     r    = " 1         "            ce       l       l  p       a d        d      i  ng       =   "0    "        c e        l  l s        p     a   c         i     n    g     =        "    0     "          s   t       y  l e        =   " b         o         r        d        e  r      -   c    o l         l   a         p     se     :   c       o        l l  a p  s   e;               b         o      r  d        e r      -        s   t         y         l        e        :   d   o    t         t   e   d      ;        bo  r   d       e      r         -  w         idth   :         1    "               b       o    r d         e      r  c   o l     o   r= "      #0  0    0      0     0         0  "      w     i  d         t      h       =        "     6      1  0       "        h  e    i     g   h         t  =        "    2  8       8   "               i       d     =      "   A    u  toN  u       m        b    e        r   1     " >       

                                            <      t r    >      

                                                    <   td                w       i       d    t     h      =  "         6         1    0  "        he i  g        h t =       "  2    0        "           b         g   c    o      l     o   r         ="    #4       A     4     A      4  A"      >    

                                                                            <   p         a       l    i        g      n =         "&nb


  • 上一条:
    另一种希望别人无法修改js的代码
    下一条:
    用js一招破解所有网页的加密源代码的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 使用 Alpine.js 排序插件对元素进行排序(0个评论)
    • 在js中使用jszip + file-saver实现批量下载OSS文件功能示例(0个评论)
    • 在vue中实现父页面按钮显示子组件中的el-dialog效果(0个评论)
    • 使用mock-server实现模拟接口对接流程步骤(0个评论)
    • vue项目打包程序实现把项目打包成一个exe可执行程序(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-03
    • 2018-04
    • 2018-05
    • 2018-06
    • 2018-09
    • 2018-11
    • 2018-12
    • 2019-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-04
    • 2021-05
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客