什么是JavaScript Packer混淆
有人将Packer称为JavaScript的加密工具(混淆工具),也有人将其称为压缩工具。不管怎么说,Packer实质上是一个编码工具,不过经过它编码后可以被浏览器直接识别。使用也非常简单,在“Encoding”选项中,有四个项目可以选择:None:简单压缩,移除空格和注释,编码特殊字符
Numeric:所有的字符都被编码成数字
Normal :所有的字符都被编码成字母与数字符号构成的值。这是推荐的方式。
High ASCII:这种方式的压缩率较高。不推荐,会有兼容性
Fast Decode(快速还原):该选项被选中的话,将插入一小段代码(120 bytes),以使代码能够更快的还原(decode)
Special Characters(特殊字符):为了让压缩能区分全局变量和局部变量,压缩工具会将变量转换成下面的格式,由于 Javascript 并不存在确切意义上的全局变量和局部变量,我们可以用下面的方式定义:
局部变量 Local ($)
变量只在当前范围内有效,参数和函数内部的变量就是一个典型例子,将局部变量用 $ 标识,压缩时会截取他们的第一个字符,附加的 $ 将使截取的字符加长,数字将会被保留。
// unpacked: function test($left, $top1, $top2, $$length) { // do something }; // packed: function test(l,t1,t2,le){};
全局变量 Private (_)
全局变量可以在整个代码中使用,用 “ _ ” (下划线)来标识,有下划线标识的全局变量将会被转换成下划线加上一个数字:
// unpacked: var _CONSTANT = 42; function _test($left, $top1, $top2, $$length) { return ($top1 / $top2) + _CONSTANT; }; // packed: var _0=42; function _1(l,t1,t2,le){ return(t1/t2)+_0; };