设计了一个JavaScript的源代码混淆器

简介:
 从目前对JavaScript的使用来看,要加密它基本是不太可能的,而最有效的保护办法和对付.NET Assembly的反编译一样——就是混淆。为什么脚本要混淆啊?公司的产品代码和平时我们做些试验呀,做些控件共享啊,是不同的,需要有一定的保护要求。看看Gmail的JS,那个混淆效果,真TMD爽!

    前段时间也在网上找了一些JavaScript的混淆器,不过都不太能满足目前项目的需求。于是就看看做一个JavaScript的代码格式化器和混淆器到底有多少障碍,在周末花了一个下午做了对表达式的识别器。下面看看对表达式的识别效果,再来说说是怎么设计的。

    处理前的代码:
 a > b; alert(); alert( typeof (alert        )    ); alert(    !    strue);
 a += f99(        a$$, asdf)/3;  new[Object](0);  new    Object();
  var abc = [{a  : 100 } . a, 1, [        ], abc]; alert({} +  {a:
 789.132-e1   ,c        .  b    ,    b : c,d:   e} +[';',100].  length+([
 0].length+[5 ].length));    foo            (            asf)    ;foo2(foo(
 ), asf, foo(3));    foo3(foo2(foo(asf*34/ 34)*foo2(34+foo()
 )-10)/foo());  var   a ,c   =   1  , b = 'a\'""'   +   1 , asdf = 
 ""a's'\'df"";  var c = b - 1    ; abc = 100   *100 /2+(a+1)+(
 (a+   1)+(      a                 +1)+1); a -1;asdf        ()  ;

    当然,这都是语法正确的JavaScript代码。

    处理后的代码:
   a> b;
   alert();
   alert( typeof( alert));
   alert(! strue);
   a+= f99( a$$, asdf)/3;
   new [ Object]; (0);
   new Object();
   var abc=[{ a:100}. a,1,[], abc];
   alert({}+{ a:789.132- e1, c. b, b: c, d: e}+[ ';',100]. length+([0]. length+[5]. length));
   foo( asf);
   foo2( foo(), asf, foo(3));
   foo3( foo2( foo( asf*34/34)* foo2(34+ foo())-10)/ foo());
   var a, c=1, b= 'a\'"'+1, asdf= "a's'\'df";
   var c= b-1;
   abc=100*100/2+( a+1)+(( a+1)+( a+1)+1);
   a-1;
   asdf();

     蓝色:关键字    绿色:函数名    深灰:变量名    红褐:字符串

    本来做这种工具最好的办法就是词法扫描,但是那样编程很繁琐,而且没有生成C#代码的 Lex?所以设计了一个简化版的扫描模型,因为我只需要判断出 变量 (包括函数名)关键字就行了。

    于是这样设计了一个ISentence接口,有两个方法:Parse()和Render(),以及两个属性,m_IsMatch和m_NextSentence。当一个Token被识被后,就转到下个识别中去,识别成功赋值给m_NextSentence,然后不断地深度递归,是否成功置于m_IsMatch,用于回退。ISentence定义如下:
Using directives

namespace JScriptConfusion.JScriptSyntax.Sentence
{
     public  class ISentence
    {
         protected  bool m_IsMatch =  false;
         protected ISentence m_NextSentence =  null;

         public  virtual  bool IsMatch {  get return  this.m_IsMatch; } }

         public ISentence() {}
        
         public  virtual  string Parse( string jscript)
        {
            jscript = jscript.TrimStart();
             return jscript;
        }

         public  virtual  string Render()
        {
             return  string.Empty;
        }
    }
}

    不过在处理JavaScript的换行"\r\n"作为语句分割时,比较的郁闷,因为我都直接使用String.TrimStart()作的字符串预处理。


本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
JavaScript 前端开发
JavaScript 源代码大放送
JavaScript 不仅是前端开发的首选语言,通过 NodeJS 还能用于开发高性能后端服务,甚至在硬件编程中也崭露头角,正逐步成为全能型语言。此段代码提供了一个自定义日期格式验证的实用函数 `isValidDate`,简化了日期有效性检查,无需依赖庞大的第三方库。此外,还提供了获取元素最大尺寸和高亮文本的函数,以及一个为文字添加动画效果的 jQuery 插件,适用于多种开发场景。
29 2
|
7月前
|
JavaScript 前端开发 程序员
《JavaScript权威指南第7版》中文PDF+英文PDF+源代码 +JavaScript权威指南(第6版)(附源码)PDF下载阅读分享推荐
JavaScript是Web标准语言,广泛应用于各类浏览器,造就了其最广泛部署的地位。Node.js的兴起扩展了JavaScript的使用场景,使其成为开发者首选语言。无论新手还是经验丰富的程序员,都能受益于学习JavaScript。[《JavaScript权威指南第7版》资源链接](https://zhangfeidezhu.com/?p=224)
469 5
《JavaScript权威指南第7版》中文PDF+英文PDF+源代码 +JavaScript权威指南(第6版)(附源码)PDF下载阅读分享推荐
|
6月前
|
JavaScript 前端开发
必备的 JavaScript 源代码大放送
必备的 JavaScript 源代码大放送
32 1
|
7月前
|
前端开发 JavaScript
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
|
9月前
|
JavaScript Java 测试技术
基于springboot+vue.js的附带文章和医院后台管理系统源代码设计说明文档ppt
基于springboot+vue.js的附带文章和医院后台管理系统源代码设计说明文档ppt
48 1
基于springboot+vue.js的附带文章和医院后台管理系统源代码设计说明文档ppt
|
9月前
|
JavaScript Java 测试技术
基于springboot+vue.js的附带文章和医疗挂号管理系统源代码设计说明文档ppt
基于springboot+vue.js的附带文章和医疗挂号管理系统源代码设计说明文档ppt
43 1
|
9月前
|
JavaScript Java 测试技术
基于springboot+vue.js的附带文章和装饰工程管理系统源代码设计说明文档ppt
基于springboot+vue.js的附带文章和装饰工程管理系统源代码设计说明文档ppt
43 0
|
9月前
|
JavaScript Java 测试技术
基于springboot+vue.js的附带文章和疫情隔离管理系统源代码设计说明文档ppt
基于springboot+vue.js的附带文章和疫情隔离管理系统源代码设计说明文档ppt
36 0
|
9月前
|
JavaScript Java 测试技术
基于springboot+vue.js的附带文章和欢迪迈手机商城源代码设计说明文档ppt
基于springboot+vue.js的附带文章和欢迪迈手机商城源代码设计说明文档ppt
37 0
|
9月前
|
JavaScript 前端开发 开发工具
Python之JavaScript逆向系列——3、浏览器的开发工具——源代码的使用
Python之JavaScript逆向系列——3、浏览器的开发工具——源代码的使用
69 0

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    Node.js 中实现多任务下载的并发控制策略
    32
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    25
  • 4
    【JavaScript】深入理解 let、var 和 const
    48
  • 5
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    44
  • 6
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    53
  • 7
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    55
  • 8
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    71
  • 9
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55
  • 10
    JavaWeb JavaScript ③ JS的流程控制和函数
    62