日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js混淆

發(fā)布時間:2024/10/12 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js混淆 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
// 1、js-encode-plugin.js 文件(webpack的js加密插件) const fs = require('fs'); //node的文件系統(tǒng)模塊,用于讀寫及操作文件 const path = require('path'); //node提供的一些用于處理文件路徑的小工具 var chalk = require('chalk') //用于向控制臺輸出帶顏色的問題提示 // 2、模塊對外暴露的 js 函數(shù) function JsEncodePlugin(pluginOptions) {this.options = pluginOptions; } // 3、原型定義一個 apply 函數(shù),并注入了 compiler 對象 JsEncodePlugin.prototype.apply = function (compiler) {const _this = this;// 4、掛載 webpack 事件鉤子(這里掛載的是 after-emit 事件,在將內(nèi)存中 assets 內(nèi)容寫到磁盤文件夾之后觸發(fā)的webpack生命周期鉤子)compiler.plugin('after-emit', function (compilation, callback) {// ... 內(nèi)部進行自定義的編譯操作// 5、操作 compilation 對象的內(nèi)部數(shù)據(jù)console.log(chalk.cyan('\n jsencode start.\n'))var filePath = path.resolve(__dirname, _this.options.assetsPath); //設(shè)置需要加密的js文件路徑,_this.options.assetsPath為插件配置中傳過來的需要加密的js文件路徑filterFile(filePath);function filterFile(fp) {fs.readdir(fp, (err, files) => { //讀取該文件路徑if (err) {console.log(chalk.yellow('讀取js文件夾異常:\n' +err.message + '\n'))return;}files.forEach((filename) => { //遍歷該路徑下所有文件if (_this.options.jsReg.test(filename)) { //利用正則匹配我們要加密的文件,_this.options.jsReg為插件中傳過來的需要加密的js文件正則,用以篩選出我們需要加密的js文件。var filedir = path.resolve(fp, filename);fs.readFile(filedir, 'utf-8', (err, data) => { //讀取文件源碼if (err) {console.log(chalk.yellow('讀取js文件異常:\n' +err.message + '\n'))return;}//調(diào)用jjencode函數(shù)對源碼進行jjencode加密,_this.options.global為插件配置中傳過來的加密使用的全局變量名,將在jjencode函數(shù)中作為第一個參數(shù)傳入let result = jjencode(_this.options.global, data);fs.writeFile(filedir, result, (err) => { //將加密后的代碼寫回文件中if (err) {console.log(chalk.yellow('寫入加密后的js文件異常:\n' +err.message + '\n'))return;}console.log(chalk.cyan(' jsencode complete.\n'))})})}})})}//js加密函數(shù)function jjencode(gv, text) {var r = "";var n;var t;var b = ["___", "__$", "_$_", "_$$", "$__", "$_$", "$$_", "$$$", "$___", "$__$", "$_$_", "$_$$", "$$__", "$$_$", "$$$_", "$$$$", ];var s = "";for (var i = 0; i < text.length; i++) {n = text.charCodeAt(i);if (n == 0x22 || n == 0x5c) {s += "\\\\\\" + text.charAt(i).toString(16);} else if ((0x20 <= n && n <= 0x2f) || (0x3A <= n == 0x40) || (0x5b <= n && n <= 0x60) || (0x7b <= n && n <= 0x7f)) {s += text.charAt(i);} else if ((0x30 <= n && n <= 0x39) || (0x61 <= n && n <= 0x66)) {if (s) r += "\"" + s + "\"+";r += gv + "." + b[n < 0x40 ? n - 0x30 : n - 0x57] + "+";s = "";} else if (n == 0x6c) { // 'l'if (s) r += "\"" + s + "\"+";r += "(![]+\"\")[" + gv + "._$_]+";s = "";} else if (n == 0x6f) { // 'o'if (s) r += "\"" + s + "\"+";r += gv + "._$+";s = "";} else if (n == 0x74) { // 'u'if (s) r += "\"" + s + "\"+";r += gv + ".__+";s = "";} else if (n == 0x75) { // 'u'if (s) r += "\"" + s + "\"+";r += gv + "._+";s = "";} else if (n < 128) {if (s) r += "\"" + s;else r += "\"";r += "\\\\\"+" + n.toString(8).replace(/[0-7]/g, function (c) {return gv + "." + b[c] + "+"});s = "";} else {if (s) r += "\"" + s;else r += "\"";r += "\\\\\"+" + gv + "._+" + n.toString(16).replace(/[0-9a-f]/gi, function (c) {return gv + "." + b[parseInt(c, 16)] + "+"});s = "";}}if (s) r += "\"" + s + "\"+";r =gv + "=~[];" +gv + "={___:++" + gv + ",$$$$:(![]+\"\")[" + gv + "],__$:++" + gv + ",$_$_:(![]+\"\")[" + gv + "],_$_:++" +gv + ",$_$$:({}+\"\")[" + gv + "],$$_$:(" + gv + "[" + gv + "]+\"\")[" + gv + "],_$$:++" + gv + ",$$$_:(!\"\"+\"\")[" +gv + "],$__:++" + gv + ",$_$:++" + gv + ",$$__:({}+\"\")[" + gv + "],$$_:++" + gv + ",$$$:++" + gv + ",$___:++" + gv + ",$__$:++" + gv + "};" +gv + ".$_=" +"(" + gv + ".$_=" + gv + "+\"\")[" + gv + ".$_$]+" +"(" + gv + "._$=" + gv + ".$_[" + gv + ".__$])+" +"(" + gv + ".$$=(" + gv + ".$+\"\")[" + gv + ".__$])+" +"((!" + gv + ")+\"\")[" + gv + "._$$]+" +"(" + gv + ".__=" + gv + ".$_[" + gv + ".$$_])+" +"(" + gv + ".$=(!\"\"+\"\")[" + gv + ".__$])+" +"(" + gv + "._=(!\"\"+\"\")[" + gv + "._$_])+" +gv + ".$_[" + gv + ".$_$]+" +gv + ".__+" +gv + "._$+" +gv + ".$;" +gv + ".$$=" +gv + ".$+" +"(!\"\"+\"\")[" + gv + "._$$]+" +gv + ".__+" +gv + "._+" +gv + ".$+" +gv + ".$$;" +gv + ".$=(" + gv + ".___)[" + gv + ".$_][" + gv + ".$_];" +gv + ".$(" + gv + ".$(" + gv + ".$$+\"\\\"\"+" + r + "\"\\\"\")())();";//console.log(r);return r;}// 6、執(zhí)行 callback 回調(diào)callback();}); };// 暴露 js 函數(shù) module.exports = JsEncodePlugin;// console.log("555555")

總結(jié)

以上是生活随笔為你收集整理的js混淆的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。