压缩和混淆node.js服务端代码

压缩和混淆node.js服务端代码

在前端我们有webpack,gulp等构建工具提供了从项目结构搭建到部署打包,基本所有工作流程所需要的都被覆盖到了。

在后台node.js写的服务端却是透明,很多时候我们不愿意交付透明的代码。这个时候就需要对js代码进行压缩混淆。

目的

我有一个express纯api后台项目,在发布之前我需要对他进行压缩混淆。在开发完成以后我希望执行一个命令就能得到完整,压缩混淆之后的代码。然后一个命令启动,运行,维护等。

方案查找

百度谷歌上网找文章。找到了下面几种方案,但是都没有很好的案例可以参考。

这里列出几个与js混淆,编译,打包相关的库或网站:

  1. 混淆
  2. 编译
    • bytenode,一个极简的Node.js字节码编译器。
  3. 打包
    • ncc 可以把Node.js项目打包成一个js单文件,支持 TypeScript,动态导入。
    • pkg 可以把Node.js项目打包成一个二进制的可执行文件,pkg不支持动态导入,但是会将Node本身一起打包,可以实现在没安装Node.js的环境运行。
    • pmq20/node-packer 也能打包成一个二进制的可执行文件,它的优势在于支持各种形式的require, 也支持C++模块。可惜项目已经两年没更新了,只支持到Node.js 8.3.0, 对于更高版本的支持,请移步slee047/node-packer

来源:https://juejin.im/post/5d89e996e51d453bc64802c0
作者:Winston_Lee

javascript-obfuscator

简介:A free and efficient obfuscator for JavaScript (including ES2017). Make your code harder to copy and prevent people from stealing your work. This tool is a Web UI to the excellent (and open source)

一个免费和高效的JavaScript混淆器(包括ES2017)。让你的代码更难复制,防止别人窃取你的成果。这个工具是一个优秀的Web UI(并且是开源的)

官网:https://obfuscator.io/

这个库很像在线JavaScript代码压缩网站,实际上也可以做一个在线压缩代码的网站。不过他吸引我的是他的cli工具。

❗ 作者在Github上说了没有很多时间来维护这个项目了,使用请慎重考虑。

文档

官网文档:https://github.com/javascript-obfuscator/javascript-obfuscator/

自己翻译:https://sunseekerx.github.io/javascript-obfuscator-README.zh-CN.md/

使用

0x0 全局安装javascript-obfuscator

npm i javascript-obfuscator -g

0x1 例如一个express项目,在项目根目录下新建javascript-obfuscator.json

{
  "compact": true,
  "controlFlowFlattening": true,
  "controlFlowFlatteningThreshold": 0.75,
  "deadCodeInjection": true,
  "deadCodeInjectionThreshold": 0.4,
  "debugProtection": false,
  "debugProtectionInterval": false,
  "disableConsoleOutput": true,
  "identifierNamesGenerator": "hexadecimal",
  "log": false,
  "renameGlobals": false,
  "rotateStringArray": true,
  "selfDefending": true,
  "stringArray": true,
  "stringArrayEncoding": "base64",
  "stringArrayThreshold": 0.75,
  "transformObjectKeys": true,
  "unicodeEscapeSequence": false
}

0x2 在package.jsonscript代码块中加上如下命令

下面命令会将压缩好的文件放在根目录下的obfuscated文件夹中,可以看到代码都是经过压缩混淆的,如果开启了selfDefending选项,如果代码经过格式化工具格式化出来也是无法运行的。

javascript-obfuscator ./ --output ./obfuscated --exclude node_modules --config javascript-obfuscator.json

问题

  • .js为后缀的文件会被压缩混淆但是其他的文件没有复制,达不到想要的开发完成一个命令压缩混淆代码,然后可以得到完成的可以部署的项目。(如果对shell脚本熟悉,可以自己写脚本实现。
  • 项目已经停更,作者没有精力继续维护,存在不能用风险

UglifyJS2

UglifyJS是一个JavaScript解析器,缩小器,压缩器和美化工具包。

UglifyJS is a JavaScript parser, minifier, compressor and beautifier toolkit.

Note:

  • uglify-js@3 has a simplified API and CLI that is not backwards compatible with uglify-js@2.
  • Documentation for UglifyJS 2.x releases can be found here.
  • uglify-js only supports JavaScript (ECMAScript 5).
  • To minify ECMAScript 2015 or above, transpile using tools like Babel.

官方GitHub仅仅支持ECMAScript 5,弃用。

总结

就目前来看并没有一个很好的方案去压缩混淆Node的项目。不过javascript-obfuscator已经很接近我想要的效果了。后续更多的使用体验或更多的选择,我会继续写一篇文章。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 本文介绍的是常见的3种工具的使用说明情况。 三种工具为: 1.Google Closure Compiler(本文...
    凡凡的小web阅读 5,413评论 0 1
  • 在现在的前端开发中,前后端分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始...
    Charlot阅读 5,428评论 1 32
  • JS 简史 Web 的兴起已经把 JavaScript 带到一个前所未有的地步, 了解JS 的历史更好的使用JS ...
    迷缘火叶阅读 1,614评论 0 1
  • 一 、安装流程: 1:安装node 2:安装npm 3:安装– uglifyjs ,命令行cmd,在输入:npm ...
    约书亚Luis阅读 4,702评论 1 1
  • 春之初,风不思我。 夏之初,湿泥留香。 我耗尽一生顽固的等 骤起的风 无意里扬起柳絮漫天 惊醒了城 瞬间褪去了苍白...
    得之我幸11111阅读 326评论 0 0