Ai
1 Star 0 Fork 0

李立民杂项/JS代码混淆实例

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
obfuscator.js 1.99 KB
一键复制 编辑 原始数据 按行查看 历史
M.Lee 提交于 2023-01-31 17:32 +08:00 . init
/**
* @用法
* vite打包完成后,使用命令行nodejs执行本文件: node obfuscator.js
* 它会挨个把里面的js文件做混淆然后替换
*
* @说明
* 本质就是依赖这个工具
* 底层实现就是把代码全部作为一个字符串丢给它,它内部调用其他包来分析语法,做混淆替换
*
* @doc https://github.com/javascript-obfuscator/javascript-obfuscator
*
* @拓展
* obfuscator.js也有对应 webpack 的 plugin 和 rollup(vite打包用的就是rollup) 的 plugin
* 实现起来比较简单,如有需要也可以自己找符合要求的plugin或者自己写一个,本质上就是把这个文件的执行过程自动追加到打包过程中
*/
const JavaScriptObfuscator = require('javascript-obfuscator')
const fs = require('fs')
// 配置
const buildDir = './dist/assets/'
/**
* 获取目录下所有js文件及内容字符串
* @result {fileName:string, content:string}[]
*/
const getJsFileList = (dir) => new Promise((resolve) => {
fs.readdir(dir, (err, files) => {
if (err) return reject(`[obfuscator] output dir not exist!`)
return resolve(Promise.all(files.filter(fileName => fileName.endsWith('.js')).map(fileName => new Promise(resolveInner => {
fs.readFile(dir + fileName, (err, data) => {
return resolveInner({ fileName, content: data.toString() })
})
}))))
})
})
getJsFileList(buildDir).then(list => {
console.log(`[obfuscator] start`)
Promise.all(list.map(it => new Promise(resolve => {
const obfuscationResult = JavaScriptObfuscator.obfuscate(it.content, {
/** 这些都是配置 */
compact: false,
controlFlowFlattening: true,
controlFlowFlatteningThreshold: 1,
numbersToExpressions: true,
simplify: true,
stringArrayShuffle: true,
splitStrings: true,
stringArrayThreshold: 1
})
fs.writeFile(buildDir + it.fileName, obfuscationResult.getObfuscatedCode(), () => {
console.log(`[obfuscator] file done ${it.fileName}`)
resolve(1)
})
}))).then(() => {
console.log(`[obfuscator] finished`)
})
})
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/li-limins-miscellaneous-items/example-of-js-code-obfuscation.git
git@gitee.com:li-limins-miscellaneous-items/example-of-js-code-obfuscation.git
li-limins-miscellaneous-items
example-of-js-code-obfuscation
JS代码混淆实例
master

搜索帮助