JavaScript奇淫技巧:清理无效的垃圾代码

JavaScript奇淫技巧:清理无效的垃圾代码O15致力于为用户收集丰富的生活经验知识

在编程过程中,难免会产生一些无效的、冗长的长码。O15致力于为用户收集丰富的生活经验知识

很常见的是:定义了某些变量,但未使用,或者是曾使用过,但在修改代码后不再使用。那么,它就成了无用的垃圾代码,而它占用着代码空间,使代码庞大、影响代码阅读。O15致力于为用户收集丰富的生活经验知识

在较大的工程中,往往有不少这种代码。O15致力于为用户收集丰富的生活经验知识

本文,演示一种方法,自动化地去除无效的变量。O15致力于为用户收集丰富的生活经验知识

例程:O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

添加图片注释,不超过 140 字(可选)O15致力于为用户收集丰富的生活经验知识

以上代码中,变量b是无用的。O15致力于为用户收集丰富的生活经验知识

通过编程,实现去除,完整代码如下:O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

添加图片注释,不超过 140 字(可选)O15致力于为用户收集丰富的生活经验知识

其原理是:将代码转化为AST(抽象语法树),从语法树中遍历变量定义,然后检测变量是否被引用或修改,如果变量既未引用、也未被修改过。则删除该变量。最后,再把AST重新生成为JS代码。O15致力于为用户收集丰富的生活经验知识

这段代码在NodeJS环境中使用,运行效果:O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

添加图片注释,不超过 140 字(可选)O15致力于为用户收集丰富的生活经验知识

从运行效果可以看到,删除了未使用的变量b,并重新生成了代码。O15致力于为用户收集丰富的生活经验知识

这个操作,可以精简、优化JS代码。O15致力于为用户收集丰富的生活经验知识

与这波操作相反的,有时,为了保护JS代码,防止代码被分析、复制、盗用;防止他人理解代码;或因小游戏过审等需要,而对JS代码进行混淆加密。O15致力于为用户收集丰富的生活经验知识

在JS代码混淆加密时,经常会有“僵尸代码植入操作”,会插入一些无用的变量和函数等,比如JShaman就具有这项功能。下面,再测试一下,用JShaman插入的JS代码,是否能用这种方式去除。O15致力于为用户收集丰富的生活经验知识

例程如下:O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

添加图片注释,不超过 140 字(可选)O15致力于为用户收集丰富的生活经验知识

在配置中,只选择“僵尸代码植入”。JShaman有很多JS加密选项,本文只测试是否能去除插入的JS代码,所以,只启用这一项:O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

添加图片注释,不超过 140 字(可选)O15致力于为用户收集丰富的生活经验知识

用JShaman混淆加密后,得到代码:O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

添加图片注释,不超过 140 字(可选)O15致力于为用户收集丰富的生活经验知识

代码中的红色标识处,都是随机插入的僵尸代码。O15致力于为用户收集丰富的生活经验知识

把这段代码,放到刚刚的程序中,并运行:O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

添加图片注释,不超过 140 字(可选)O15致力于为用户收集丰富的生活经验知识

从运行结果看,并未能去除被JShaman插入的僵尸代码,原因是因为僵尸变量也有引用和修改。O15致力于为用户收集丰富的生活经验知识

本文仅演示了无效变量的去除,同理,还可以用类似的方法去除无效的函数。O15致力于为用户收集丰富的生活经验知识

最后,附上本文使用的代码:O15致力于为用户收集丰富的生活经验知识

O15致力于为用户收集丰富的生活经验知识

//自动去除无效变量
//Auther: JShaman.com w2sft
var parser = require("@babel/parser");
var traverse = require("@babel/traverse").default;
var generator = require("@babel/generator").default;
var jscode = `
function get_copyright() {
var _0x4d = 1 + 5;
var domain = "jshaman.com";
_0x4d = "apib";
var _0x05f;
var from_year = 2017;
_0x05f = 9;
var _0x;
var copyright = "(c)" + from_year + "-" + new Date().getFullYear() + "," + domain;
_0x = 8 + 2;
return copyright;
}
console.log(get_copyright());
`;
var ast = parser.parse(jscode);
var visitor = {
VariableDeclarator(path){
var binding = path.scope.getBinding(path.node.id.name);
//变量被修改过
if (!binding || binding.constantViolations.length > 0) {
return;
}
//变量没有被使用过
if (binding.referencePaths.length == 0) {
console.log(" 已删除变量:",path.node.id.name);
console.log();
path.remove();
}
},
}
traverse(ast, visitor);
console.log(generator(ast).code);
console.log();

O15致力于为用户收集丰富的生活经验知识

也许你还喜欢

速来围观!国家安全公益宣传片新鲜出

2019年“4.15”全民国家安全教育日 主题公益宣传片 震感来袭 来源:擎剑云岭 (转载请注明

动物动态图片巨制,笑抽你,我不负责啊

死之前的任性,我行,我行,我不行! 食物链之间的尔你我诈,胜者为王 哈哈滑水,变成溜冰了…

天呐!厦门男子散步,竟捡到宝贝,价值70

难以置信! 厦门男子在海边散步 拾得一块拳头大小 味道腥臭的东西 万万没想到 经专家鉴

​文明面对面丨剥树皮、偷倒建筑垃

昨天下午2时左右,兰溪市综合行政执法局的执法人员正进行日常巡查,经过兰江街道下金村拆

健康 | 官方声明:近视根本不能治愈!

亚洲近视人群分布,黄色为高度近视高发国家和地区 图片来源:The epidemics of myopia: Ae

北京为3000名快递小哥免费体检

亿欧物流4月14日讯,今日早上,位于北京市西五环外的首都医科大学附属北京康复医院劳模健

争当文明使者!好,宜宾市说了算

一.宜宾是四川省辖地级市,地处贵州、云南、四川三省结合部,金沙江、岷江、长江三江交

周周有堂国学经典诵读课 社区党建

4月13日,天心区赤岭路街道新丰社区一周一次的“赤岭故事汇· 新言说”,从一堂国学经典诵

青少年绘画原创艺术展开展 白血病

4月14日下午,在流光溢彩—2019年成都武侯区青少年绘画原创艺术作品展上,一场特殊的活动

怀柔3.0级地震 系北京近20多年来首

中国地震台网正式测定:4月14日12时47分在北京怀柔区(北纬40.34度,东经116.39度)发生3.0级