当前位置: 首页 > article >正文

javascript-obfuscator js混肴 (用户界面版)

javascript-obfuscator JS混肴

  • 混肴的作用
  • 预览图
  • mix.sh混肴脚本
  • config.json

混肴的作用

防止浏览器的js/html/css代码被他人盗用。下述只实现了js的混肴。html/css可仿照js逻辑实现

预览图

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

mix.sh混肴脚本

#!/bin/bash  
  
# 检查 terser 是否可用  
if ! command -v javascript-obfuscator &> /dev/null; then  
    echo "javascript-obfuscator 不可用,请安装后再运行此脚本。执行安装:npm install -g javascript-obfuscator"  
    exit 1  
fi 
  
# 获取当前目录下的所有子目录(只考虑一级子目录)并自然排序  
dirs=($(find . -maxdepth 1 -mindepth 1 -type d -exec basename {} \; | sort))  
  
# 显示目录列表并让用户选择  
for (( i=0; i<${#dirs[@]}; i++ )); do  
    echo "$((i + 1)). ${dirs[$i]}"  
done  
read -p "请选择js存储目录(1-${#dirs[@]}):" choice1  
  
# 检查输入是否有效  
if ! [[ "$choice1" =~ ^[1-9][0-9]*$ ]] || [[ "$choice1" -gt ${#dirs[@]} ]]; then  
    echo "无效的输入,请重新运行脚本"  
    exit 1  
fi  
  
# 转换为0-based索引  
choice1=$((choice1-1))  
selected_dir="./${dirs[$choice1]}"  
  
# 第二步:列出目录下的js文件并自然排序  
files=($(find "$selected_dir/js" -type f -name "*.js" | sort))  

# 显示文件列表并让用户选择  
for (( i=0; i<${#files[@]}; i++ )); do  
    filename=$(basename -- "${files[$i]}")  
    echo "$(($i+1))). ${filename}"  
done  
read -p "请选择要混肴的js(1-${#files[@]})" choice2  
  
# 检查输入是否有效  
if ! [[ "$choice2" =~ ^[1-9][0-9]*$ ]] || [[ "$choice2" -gt ${#files[@]} ]]; then  
    echo "无效的输入,请重新运行脚本"  
    exit 1  
fi  
  
# 转换为0-based索引  
choice2=$((choice2-1))  
full_file_path="${files[$choice2]}"  
echo "混肴的js路径:$full_file_path"
# 第三步:执行混淆并保存到新位置  
dir_part="${full_file_path%/*}"  # 移除最后一个 / 及其后的内容  
dir_part="${dir_part#./}"   # 如果需要,移除开头的 ./  

output_dir="./copy/$dir_part"  
mkdir -p "$output_dir"  # 确保目录存在 
output_file="./copy/${full_file_path#./}"   #去掉./前缀

javascript-obfuscator "$full_file_path" --config "./config.json" --output "$output_file"
  
echo "混淆后的文件已保存到:$output_file"

#目录结构必须是/主目录/js/*.js

config.json

{  
  "compact": true,  
  "mangle": true,  
  "controlFlowFlattening": false,  
  "numbersToExpressions": false,  
  "splitStrings": false,  
  "stringArray": false,  
  "stringArrayThreshold": 0.75,  
  "simplify": true,  
  "deadCodeInjection": false,  
  "debugProtection": false,  
  "debugProtectionInterval": 0,  
  "selfDefending": false,  
  "reservedNames": [],  
  "transformObjectKeys": true, 
  "reservedStrings": [],  
  "rotateStringArray": true,  
  "renameGlobals": false,  
  "seed": 0  
}

http://www.kler.cn/news/333578.html

相关文章:

  • 【ECMAScript 从入门到进阶教程】第四部分:项目实践(项目结构与管理,单元测试,最佳实践与开发规范,附录)
  • [SQL] SQL语句注意事项
  • Python——异常处理机制
  • AJAX 1——axios体验、认识URL、常用请求方法、HTTP协议、错误处理、form-serialize插件
  • 用Python实现运筹学——Day 12: 线性规划在物流优化中的应用
  • 【Qt】控件概述 (1)—— Widget属性
  • 胤娲科技:AI透视艺术大师——拉斐尔的笔触,500年后终被AI读懂
  • [C++][第三方库][Elasticsearch]详细讲解
  • 闭源与开源嵌入模型比较以及提升语义搜索效果的技术探讨
  • JAVA开源项目 旅游管理系统 计算机毕业设计
  • 「Qt Widget中文示例指南」如何实现一个平板电脑示例?(一)
  • 数据挖掘-padans初步使用
  • MySQL高阶2082-富有客户的数量
  • Oracle SQL语句没有过滤条件,究竟是否会走索引??
  • Shell文本处理(三)
  • 古典舞在线互动:SpringBoot平台设计与功能实现
  • 鸿蒙HarmonyOS NEXT 电商APP开发,打造你的专属购物商城
  • 【算法笔记】滑动窗口算法原理深度剖析
  • Python | Leetcode Python题解之第454题四数相加II
  • FPGA实现PCIE图片采集转HDMI输出,基于XDMA中断架构,提供3套工程源码和技术支持