Webpack和JShaman相比有什么不同?

Webpack和JShaman相比有什么不同?

Webpack的功能是打包,可以将多个JS文件打包成一个JS文件。

JShaman专门用于对JS代码混淆加密,目的是让JavaScript代码变的不可读、混淆功能逻辑、加密代码中的隐秘数据或字符,是用于代码保护的。

两者是完全不同的。但是,因为Webpack打包生成的JS文件,看起来似乎也有一些混淆特征,因此常被一些人误以为它也是混淆工具,事实上,它当然不是。

下面用实例演示两者差别:

本例中,使用两个文件,example.js和mod.js。

Example.js文件代码

var mod = require("./mod.js");
mod.fun();
console.log("done.");

Mod.js文件代码

exports.fun = function (){
var name = "Tom"
var age = 100;
console.log(name + " is " + age + " years old.");
}

代码逻辑非常简单,example.js调用mod.js中的函数,运行时会输出两行信息,如下图所示。

接下来,演示Webpack打包效果和JShaman混淆效果。

Webpack打包

用于webpack打包的配置文件,webpack.config.js文件内容如下。

const path = require('path');
module.exports = {
entry: './example.js',
output: {
path: path.resolve(__dirname, ''),
filename: 'bundle.js',
},
};

入口文件是example.js,打包目标文件是bundle.js。在命令行中完成打包操作,如下图所示。

此时生成了bundle.js文件,用node执行也与之前运行输出相同,bundle.js文件内容如下图所示。

可以看出bundle.js中包含了之前example.js和mod.js中的代码,webpack是将这两文件合并成了一个bundle.js文件。

bundle.js文件代码中能明显的看到console.log("Tom is 100 years old.")和console.log("done.")语句,功能逻辑清晰。

JShaman混淆

如果使用JShaman对example.js和mod.js文件代进行JavaScript代码混淆。

Mod.js文件代码会变成如下形式。

exports'\\x66\\x75\\x6e'=function(){var _0xc2938d="2|3|4|0|1|5|6".split("|"),_0x6c3a8e=0;while(!!\[\]){switch(+_0xc2938d_0x6c3a8e++){case 0:var _0xd5b0a;continue;case 1:var _0xadb4fb=function(s,h){return s^h;}(591416,591452);continue;case 2:var _0x74a25f=function(s,h){return s+h;}(135763^135765,747847^747855);continue;case 3:var _0x="moT"'\\x73\\x70\\x6c\\x69\\x74'("")'\\x72\\x65\\x76\\x65\\x72\\x73\\x65'()'\\x6a\\x6f\\x69\\x6e'("");continue;case 4:_0x74a25f=function(){return"_0xc3f35e912";}();continue;case 5:_0xd5b0a=function(){return"_0x28dbg8912";}();continue;case 6:console'\\x6c\\x6f\\x67'(_0x+" si "'\\x73\\x70\\x6c\\x69\\x74'("")'\\x72\\x65\\x76\\x65\\x72\\x73\\x65'()'\\x6a\\x6f\\x69\\x6e'("")+_0xadb4fb+".dlo sraey "'\\x73\\x70\\x6c\\x69\\x74'("")'\\x72\\x65\\x76\\x65\\x72\\x73\\x65'()'\\x6a\\x6f\\x69\\x6e'(""));continue;}break;}};

Example.js代码会变成如下形式。

var _0xeb79bb;var mod=require("sj.dom/."'\\x73\\x70\\x6c\\x69\\x74'("")'\\x72\\x65\\x76\\x65\\x72\\x73\\x65'()'\\x6a\\x6f\\x69\\x6e'(""));_0xeb79bb=function(){return"_0x4f92c9912";}();mod'\\x66\\x75\\x6e'();console'\\x6c\\x6f\\x67'(".enod"'\\x73\\x70\\x6c\\x69\\x74'("")'\\x72\\x65\\x76\\x65\\x72\\x73\\x65'()'\\x6a\\x6f\\x69\\x6e'(""));

webpack打包后能看到的console.log("Tom is 100 years old.")和console.log("done.")语句,JShaman混淆后不会出现的。

总结

Webpack用于打包文件,将多个JS文件变成一个。

JShaman用于混淆JavaScript代码,使代码不可读。

相关推荐
爱勇宝1 小时前
《道德经》第 10 章:真正成熟的人,能成事但不控制一切
前端·后端·程序员
看谷秀1 小时前
arkts- 8 三方库介绍
前端·arkts
六边形6661 小时前
独立开发不知道做什么?使用 TRAE Work 抓取差评痛点,快速跑通产品立项流
前端·后端·面试
亿元程序员1 小时前
小伙伴发我一个 1G 的 Cocos 项目,assets 只有几十兆
前端
paopaokaka_luck1 小时前
基于springboot3+vue3的文山民族文化资源展示与推广平台(协同过滤算法、Echarts 图形化分析)
java·前端·spring boot·学习·echarts
临江仙4551 小时前
同一个 AI Agent 如何同时服务 Web、微信和 QQ:PureChat 的渠道架构实践
前端·人工智能·后端
程序员鱼皮1 小时前
16 个超火的 DeepSeek Harness 插件,大肥鱼已经落后 N 个版本了。。。
前端·后端·ai编程
马可家的菠萝1 小时前
AI Agent Demo 10 分钟就能跑,真正难的是让它 200 个场景都别乱来
前端·后端·aigc
Vuji2 小时前
Pi 插件解剖|summarize.ts:199 行,给 Agent 的对话做一份 Markdown 总结
前端·人工智能·agent
逻辑帧2 小时前
给 AI 时代找工作的同学一些实用建议
前端·后端