美文网首页程序员
[js反混淆]用压缩的方式优化混淆代码

[js反混淆]用压缩的方式优化混淆代码

作者: Wayne维基 | 来源:发表于2019-10-09 19:22 被阅读0次

压缩

提高网络传输性能的方法之一是把js文件减小,减少传输量(其实现在带宽已经比10年前好很多,1M代码压缩到400KB,用户感觉没有那么明显)

压缩怎么反混淆,听起来有点不可思议,诚然,压缩去掉空格和注释,是混淆手段才对,实际上压缩在很多方面能帮助我们优化混淆后的代码(注意,不能直接反混淆代码,反混淆没有这么简单)

举例:比如压缩可以优化代码的if条件,让代码变得更精简,减少冗余的代码量。

压缩常用工具有

uglifyjs 安装和使用

  • 安装node.js,就不再介绍了, 百度一下一大把.

  • 安装uglifyjs

npm install uglify-js -g
  • 使用uglifyjs压缩input.js,压缩结果为input.min.js
uglifyjs input.js -o input.min.js

uglifyjs2压缩部分详解

官网原文

基于AST对代码大小进行优化的树型变换器。主要优化的方式有:

  • 连接连续的 var/const语句
  • 连续简单语句转逗号操作符连接的语句
  • 删除无用的代码和变量
  • 优化条件语句
  • 计算常量表达式
  • 去掉不可达的代码
  • 等等

调用方式

ast = UglifyJS.parse(code);
ast.figure_out_scope();
compressor = UglifyJS.Compressor({ ...compressor_options... });
ast = ast.transform(compressor);
code = ast.print_to_string(); // 获取压缩结果

默认参数在大多数情况下获得最好的压缩效果,推荐的参数如下:

sequences     : true,  // 逗号表达式连接短句 
properties    : true,  // 优化属性获取方式 a["foo"] → a.foo
dead_code     : true,  // 删除不可达代码
drop_debugger : true,  // 丢弃调试代码
unsafe        : false, // 部分不安全的优化 (see below)
conditionals  : true,  // 优化条件表达式
comparisons   : true,  // 优化比较
evaluate      : true,  // 计算常量表达式
booleans      : true,  // 优化二进制表达式
loops         : true,  // 优化循环
unused        : true,  // 丢弃无用的代码
hoist_funs    : true,  // hoist function declarations
hoist_vars    : false, // hoist variable declarations
if_return     : true,  // optimize if-s followed by return/continue
join_vars     : true,  // join var declarations
cascade       : true,  // try to cascade `right` into `left` in sequences
side_effects  : true,  // drop side-effect-free statements
warnings      : true,  // warn about potentially dangerous optimizations/code
global_defs   : {}     // 全局定义

全局声明
这个功能可以用于按条件丢弃代码,例如,如果你这样传入:

global_defs: {
    DEBUG: false
}

压缩器会认定这是一个常量,并且丢弃如下不可达的代码:

if (DEBUG) {
    ...
}

这个可以用于丢弃一些只有开发版本使用的代码,使之在发布环境中不可见。

在早期的UglifyJS版本中,你要做类似的定义需要传入一个AST树,但是在版本2中,不再需要如此,仅仅在全局定义中传入JS的常量。

举例在反混淆中的实战举例

压缩去掉一些冗余的符号.png 压缩可以做到一些进制的转化.png 括号的压缩.png

其他例子

image.png image.png image.png image.png image.png

补充资料

相关文章

  • [js反混淆]用压缩的方式优化混淆代码

    压缩 提高网络传输性能的方法之一是把js文件减小,减少传输量(其实现在带宽已经比10年前好很多,1M代码压缩到40...

  • APK加固方式

    一:代码混淆 Proguard是一个代码优化和混淆工具。能够提供对Java类文件的压缩、优化、混淆,和预校验。压缩...

  • Android安装包Apk瘦身方案

    代码混淆 proguard混淆压缩,Shrink,去除代码无用的类,字段,方法。优化,Optimize,优化字节码...

  • JS代码压缩混淆

    前端开发中,当工程正式上线时。不得不考虑到代码的压缩,特别是js的代码压缩。为此发现gulp-uglify插件。 ...

  • proguard代码混淆面试问题讲解

    一、混淆(proguard)到底是什么? ProGuard工具是用于压缩,优化,混淆我们的代码.主作用是可以移除代...

  • Android组件化架构 - 7. 混淆

    1. 混淆(proGuard) 有压缩Shrinking, 优化Optimization, 混淆Obfuscati...

  • js混淆

    js混淆工具--开源项目 Uglifyjs(开源) uglifyjs是一个开源的js 压缩工具,主要用于压缩,混淆...

  • js代码压缩混淆uglify

    D:\myuglify>npm install uglify-js -gC:\Users\lenovo\AppDa...

  • js代码压缩混淆uglify

    -c压缩,-m混淆命名,-b格式化输出js文件(否则为只有一行),-o目标输出文件。 压缩一个文件: uglify...

  • uglifyjs压缩混淆js代码

    一 、安装流程: 1:安装node 2:安装npm 3:安装– uglifyjs ,命令行cmd,在输入:npm ...

网友评论

    本文标题:[js反混淆]用压缩的方式优化混淆代码

    本文链接:https://www.haomeiwen.com/subject/rnzgpctx.html