WebPack插件实现:打包之后自动混淆加密JS文件

在WebPack中调用JShaman,实现对编译打包生成的JS文件混淆加密

一、插件实现

1、插件JShamanObfuscatorPlugin.js,代码:

class JShamanObfuscatorPlugin {
apply(compiler) {
compiler.hooks.emit.tapAsync('JShamanObfuscatorPlugin', (compilation, callback) => {
Object.keys(compilation.assets).forEach((fileName) => {
// 检查文件名是否以.js结尾
if (fileName.endsWith('.js')) {
const asset = compilation.assets[fileName];
const input = asset.source();

try {

var obfuscatedCode = input;

/**
* JShaman配置部分
*/
//JShaman.com VIP码,免费使用设为"free",如已购买VIP码,在此修改
const vip_code = "free";
//混淆加密参数配置,免费使用时无需配置
//参数详细说明请参见JShaman官网,设为"true"启用功能、设为"false"不启用
const config = {
//压缩代码
compact: "true",
//混淆全局变量名和函数名
renameGlobalFunctionVariable: "false",
//平展控制流
controlFlowFlattening: "true",
//僵尸代码植入
deadCodeInjection: "false",
//字符串阵列化
stringArray: "true",
//阵列字符串加密
stringArrayEncoding: "false",
//禁用命令行输出
disableConsoleOutput: "false",
//反浏览器调试
debugProtection: "false",
//时间限定
time_range: "false",
//时间限定起始时间、结束时间,时间限定启用时此2参数生效
time_start: "20240118",
time_end: "20240118",
//域名锁定
domainLock: [],
//保留关键字
reservedNames: [],
}
/**
* 以下代码实现向JShaman.com WebApi发送请求完成JavaScript混淆加密
*/
const request = require("sync-request");
//使用free为VIP码、免费调用JShaman WebAPI接口时,不能配置参数,仅可实现较低强度代码保护
//如果购买了JShaman的VIP码,则可启用配置,实现高强度JavaScript混淆加密
var json_options = {
json: {
//JavaScript代码
"js_code": input,
//JShaman VIP码
"vip_code": vip_code,
}
}
if(vip_code != "free"){
//混淆加密参数
json_options.json.config = config;
console.log(config);
}
console.log("正在向JShaman.com提交混淆加密请求...")
//发送请求到JShaman服务器,进行JavaScript混淆加密
var res = request("POST", "https://www.jshaman.com:4430/submit_js_code/", json_options);
var json_res = JSON.parse(res.getBody('utf8'));
//返回状态值为0是成功标识
if(json_res.status == 0){

//输出返回消息
console.log(json_res.message);

obfuscatedCode = json_res.content.toString();

} else {
console.error("向JShaman.com发送请求时出现错误:", json_res, "混淆加密失败...");
}
// 更新compilation.assets中的文件内容为混淆后的代码
compilation.assets[fileName] = {
source: () => obfuscatedCode,
size: () => obfuscatedCode.length,
};

} catch (error) {
console.error(error);
// 在这里可以决定如何处理错误,比如跳过当前文件或抛出异常
}
}
});

// 调用callback以通知Webpack插件处理完成
callback();
});
}
}
module.exports = JShamanObfuscatorPlugin;

2、webpack.config.js配置代码:

const path = require('path');
const JShamanObfuscatorPlugin = require('./JShamanObfuscatorPlugin');
module.exports = {
entry: './example.js',
plugins: [
new JShamanObfuscatorPlugin(),
],
output: {
path: path.resolve(__dirname, ''),
filename: 'bundle.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.");
}

Webpack编译:

生成的bundle.js,其中的js代码已被混淆加密:

而如果未使用此插件,生成的bundle.js代码如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/674190.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Python网络爬虫】详解python爬虫中正则表达式、BeautifulSoup和lxml数据解析

🔗 运行环境:PYTHON 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好🤗&#x1f91…

SpringMVC日期格式处理 分页条件查询

实现日期格式处理 实现分页条件查询: 分页条件查询 和 查询所有 是两个不同的方法,使用同一个mapper的查询功能,但是两个不同的业务方法 ​​​​​​​

2024年5月2日 Go生态洞察:Go 1.22中的安全随机性

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 专栏链接: 🔗 精选专栏:…

切勿大意!痉挛性斜颈治疗中的三个重要“禁忌”,后果堪忧!

今天,要给大家讲一个非常重要的话题——痉挛性斜颈的治疗。痉挛性斜颈是一种常见的神经肌肉疾病,患者在日常生活中可能会遇到许多困扰和不便。因此,及早治疗对患者来说至关重要。 然而,在治疗痉挛性斜颈的过程中,千万切…

计算机网络学习实践:模拟RIP动态路由

计算机网络学习实践:模拟RIP动态路由 模拟动态路由RIP协议 1.实验准备 实验环境:华为模拟器ENSP 实验设备: 3个路由器,3个二层交换机(不是三层的),3个PC机 5个网段 192.168.1.0 255.255.…

计算机网络学习实践:DHCP跨网段动态分配IP

计算机网络学习实践:DHCP跨网段动态分配IP 1.实验准备 实验环境:思科的模拟器 实验设备: 1个服务器,2个二层交换机(不是三层的),4个PC机,1个路由器 三个网段 192.168.1.0 255.…

【操作系统】详谈操作系统的发展历程

文章主题 导读一、手工操作阶段1.1 计算机的诞生1.2 计算机的使用 二、批处理阶段2.1 单道批处理系统2.2 多道批处理系统 三、分时操作系统3.1 分时技术3.2 分时操作系统3.1 分时系统的主要特征 四、实时操作系统五、网络操作系统和分布式计算机系统六、个人计算机操作系统结语…

【cdo专辑】2.1 文件信息(下)

目录 0.先cd进数据路径(进行操作前一定要进入数据文件夹奥) 1.输出文件格式( cdo showformat nc文件) 2.输出变量名( cdo showname nc文件) 3.输出变量标准名称( cdo showstdname nc文件&am…

从“百模”到“千体”:大模型智能体的竞争格局、商业模式和技术挑战

原本平静的5月,从14日凌晨OpenAI发布GPT-4o开始热闹起来。 一天之后,谷歌在一年一度的开发者大会上发布智能助理项目Astra和轻量化多模态模型Gemini 1.5 Flash。 同一天,字节升级了AI助手“豆包”和应用开发平台“扣子”,并发布…

Postgre数据库初探

一、PostgreSQL介绍 PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES, 版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。POSTGRES 领先的许多概念在很久以后才出现在一些商业数据库系统中。 PostgreSQL是最初的伯克利代码的开…

linux内核零拷贝技术详解

1.前言 Linux系统中一切皆文件,仔细想一下Linux系统的很多活动无外乎读操作和写操作,零拷贝就是为了提高读写性能而出现的。 2. 数据拷贝基础过程 在Linux系统内部缓存和内存容量都是有限的,更多的数据都是存储在磁盘中。对于Web服务器来说…

linux系统上shell脚本编写问题总结

需求背景:项目技术栈:Vue2Nuxt2TypeScript,是一个服务端渲染的项目,每次打测试包时需要在虚拟机上通过命令行打包项目,然后将打包生成的文件压缩为一个压缩包.tar.gz,然后将这个压缩包下载到本地&#xff0…

免费API HUB行业报告

1. 行业概述 1.1 API HUB定义 API HUB,即应用程序接口中心,是一个集中管理和提供API服务的平台。它允许开发者轻松地访问和集成来自不同来源的API,从而加速开发过程并促进技术创新。 1.2 免费API HUB的特点 免费API HUB通常具有以下特点&…

免费听歌软件b端(但需要下载)

我会觉得很好用所以分享出来供大家使用。 这个事打开后的页面包括可以选择分页,和搜索等 回车可以用上面的搜索图片也可以点机 从前往后呢分别是排序,歌曲id,歌曲名称,歌手,专辑,歌曲长度,操作 …

【算法每日一练】新月轩就餐

思路: 其实很容易想到是双指针或者双端队列。 我们设置一个type表示当前区间已经有了多少种厨师,同时还需要记录区间中每个元素出现的次数,然后比较棘手的是移动问题了,什么时候移动呢? 我们可以发现当区间当队头元…

脂热控制+规律喝水+适量运动,健康减调全攻略

一、控制脂热的摄取量 肥胖大多都是因为身体摄取了多余的脂热而逐渐形成长成的,因此,控制脂热的摄取量就等于是控制了肥胖的涨幅。不了解的,按公式和例举的来就行 油脂量摄取公式:正常人每人每天油脂量摄取每公斤体重数x0.45&am…

【漏洞复现】海康威视综合安防管理平台 orgManage/v1/orgs/download 任意文件读取漏洞

0x01 产品简介 海康威视综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备。海康威视集成化综合管理软件平台,可以对接入的视频监控点集中管理,实现统一部署、统一配置、统一管理和统一调度。 0x02 漏洞概述 海康…

算法学习笔记(7.4)-贪心算法(区间调度问题)

目录 ##什么是区间调度问题 ##贪心解法 ##具体的例题示例讲解 ##452. 用最少数量的箭引爆气球 - 力扣(LeetCode) ##435. 无重叠区间 - 力扣(LeetCode) ##56. 合并区间 - 力扣(LeetCode) ##什么是区间调…

【Go专家编程——语法糖】

语法糖 语法糖表示编程语言中特定类型的语法,这些语法对语言的功能没有影响,但是更方便程序员使用。 1.语法糖: 1.1 规则一:多变量复制可能会重新声明 我们知道可以使用“:”可以同时声明多个变量 field1, offset : nextField(str,0) fi…

重新安装VmWare的tools

原因: 因为一些原因,我需要重新安装VmWare tools,比如我升级到了win11,但是Vmware16.0已经不能使用,所以我升级了Vmware到16.2,这时候就需要升级VmWare tools。但是升级以后,会有一些小问题&…