文档章节

js反混淆

明月惊鹊
 明月惊鹊
发布于 2016/11/16 12:03
字数 167
阅读 31
收藏 1
var esprima = require('esprima');
var estraverse = require('estraverse');
var escodegen = require('escodegen');
 
function shouldSwitchScope(node) {
  return node.type.match(/^Function(Express|Declarat)ion$/);
}
 
function main(fileName) {
  var code = require('fs').readFileSync(fileName).toString();
  var ast = esprima.parse(code);
  var strings = {};
  var scopeDepth = 0; // initial: global
 
  // pass 1: extract all strings
  estraverse.traverse(ast, {
    enter: function(node) {
      if (shouldSwitchScope(node)) {
    scopeDepth++;
      }
       
      if (scopeDepth == 0 &&
    node.type === esprima.Syntax.VariableDeclarator &&
        node.init &&
        node.init.type === esprima.Syntax.ArrayExpression &&
    node.init.elements.every(function(e) {return e.type === esprima.Syntax.Literal})) {
        strings[node.id.name] = node.init.elements.map(function(e) {
          return e.value;
        });
        this.skip();
      }
    },
    leave: function(node) {
      if (shouldSwitchScope(node)) {
        scopeDepth--;
      }
    }
  });
 
  // pass 2: restore code
  ast = estraverse.replace(ast, {
    enter: function(node) {},
    leave: function(node) {
      // restore strings
      if (node.type === esprima.Syntax.MemberExpression &&
        node.computed &&
        strings.hasOwnProperty(node.object.name) &&
        node.property.type === esprima.Syntax.Literal
      ) {
        var val = strings[node.object.name][node.property.value];
        return {
          type: esprima.Syntax.Literal,
          value: val,
          raw: val
        }
      }
       
      if (node.type === esprima.Syntax.MemberExpression &&
        node.property.type === esprima.Syntax.Literal &&
        typeof node.property.value === 'string'
      ) {
        return {
          type: esprima.Syntax.MemberExpression,
          computed: false,
          object: node.object,
          property: {
            type: esprima.Syntax.Identifier,
            name: node.property.value
          }
        }
      }
    }
  });
 
  console.log(escodegen.generate(ast));
}
 
main(process.argv[2]);

代码转自:http://cnodejs.org/topic/55b3116c692e0e7706b36754

测试了一下,效果不错。

本文转载自:http://cnodejs.org/topic/55b3116c692e0e7706b36754

共有 人打赏支持
明月惊鹊
粉丝 28
博文 68
码字总数 14850
作品 0
广州
高级程序员
私信 提问
3 款实用的在线JS代码工具推荐

本文为大家带来3款非常实用的在线JS代码工具,可以帮助你方便地处理JavaScript或jQuery代码。 1. 压缩工具 用于在线压缩你的JS代码,它有一个选项“Include latest jquery.min.js”,这对于提...

红薯
2011/12/05
1K
8
可信前端之路-代码保护

0x00 前言 在信息安全领域,可信系统(Trusted system)是一个让人心动的目标,它指的是一个通过实施特定的安全策略而达到一定可信程度的系统。 在计算机中,可信平台模块(Trusted Platfor...

阿里聚安全
2016/09/08
363
2
请教js高手, 如何反混淆以下脚本!

请教各位大神 以下 js 怎么反混淆呢 ? 看着头晕晕 试过当前网上各种反混淆工具都无效,比如 jsbeautifier.org \.jsnice.org/ 不多说了,上代码 请各位大神各显神通 不胜感激!...

懵懂一时
2018/09/14
171
1
js经验分享 JavaScript反调试技巧

在此之前,我一直都在研究JavaScript相关的反调试技巧。但是当我在网上搜索相关资料时,我发现网上并没有多少关于这方面的文章,而且就算有也是非常不完整的那种。所以在这篇文章中,我打算跟...

前端小攻略
2018/12/18
0
0
保护 JavaScript 客户端 APP 的最有效方法

客户端技术,如 JavaScript,有很多有用的特性,正因为如此,它成为了世界上最流行的语言之一。它有很多优点,即时解析就是其一。即时解析有不少优点,比如可以在浏览器下载代码并立即执行。...

oschina
2016/11/08
237
0

没有更多内容

加载失败,请刷新页面

加载更多

我所遇到的GitLab 502问题的解决

我所遇到的GitLab 502问题的解决 2015年02月11日 20:17:07 wangxicoding 阅读数:51095 标签: gitlab 502 解决 端口冲突 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://bl...

rootliu
19分钟前
2
0
OSChina 周五乱弹 —— 对不起,把你看成绿灯了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 梁博《男孩 (Live)》居然只有现场版,也是好听cry。 《男孩 (Live)》- 梁博 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
29分钟前
126
3
移植Modbus到STM32F103(2):移植FreeModbus到usart3并运行示例代码

FreeModbus是Modbus的一个被广泛移植的实现。其源码在github,最新版是1.6。 FreeModbus支持Modbus功能码里的0x01~0x06,0x0F~0x11和0x17,对一些功能比如异常诊断和读事件计数等功能码并没有...

Konstantine
今天
3
0
浅谈神经网络(神经网络篇)

背景 之前写过浅谈神经网络基础篇,简单介绍下机器学习这块内容,用于扫盲。本文正式将神经网络,这部分是深度学习的基础。了解完可以掌握强大的机器学习的方法,也可以更好的了解深度学习。...

Uknowzheng
今天
5
0
移动硬盘变为RAW格式后的修复

在Mac上使用自己的移动硬盘结果文件系统格式变为RAW; 在自己windows笔记本上使用chkdsk H: /F进行修复,修复日志如下: C:\Users\mengzhang6>chkdsk H: /F文件系统的类型是 NTFS。卷标是 do...

晨猫
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部