js 代码混淆的另一种思路

2016-12-15 20:58:13 +08:00
 pysama
不想让自己的成果被人快速窃取,常规的代码保护方式就是代码压缩、混淆变量名和函数名。针对这种加密,格式化+变量名逐个还原,也能逐步的解密代码。

我的思路是:通过自动化工具,在代码中故意加入各种干扰代码,即:一本正经的胡说八道。这样一来,即使格式化后,也会因为颇为庞大的代码量和莫名其妙的代码而极大降低了代码的可阅读和可维护性。

当然也有局限性,真正对外的项目肯定不能这么干。只适用于公司内部的一些自研项目。通过这种方式,以避免拿来主意的同事拿着你的代码随便改改就去邀功。
4644 次点击
所在节点    程序员
37 条回复
akira
2016-12-15 21:07:29 +08:00
干扰代码一样可以去掉的
jarlyyn
2016-12-15 21:09:47 +08:00
哼哼,我写的 js 自带混淆,我自己都看不懂.
anubiskong
2016-12-15 21:12:32 +08:00
倒是一个思路
用力过猛的话会增加性能损耗和网络压力
说回来如果只是防同事的话, 既然是同事他应该能拿到和你同等的代码权限才对啊, 这么防也防不住啊
pysama
2016-12-15 21:16:22 +08:00
@jarlyyn 厉害了, word 哥
pysama
2016-12-15 21:16:38 +08:00
@akira 哇,这都可以。 我孤陋寡闻了。
bumz
2016-12-15 21:19:23 +08:00
其实,还不如学学 Google 的 No CAPTCHA ReCAPTCHA

人家自己设计了一套语言和虚拟机,用来执行验证代码

而验证代码是可以直接修改虚拟机当中的变量的

等于说相当于,程序执行了一半,换了一套语言,接着解析执行。
bumz
2016-12-15 21:20:57 +08:00
*修改虚拟机本身的变量

**换成什么语言取决于之前程序执行的结果
binux
2016-12-15 21:23:20 +08:00
快速窃取的思路不是直接受控黑盒调用吗?为什么要解密代码?
pysama
2016-12-15 21:23:29 +08:00
@anubiskong 没关系,我放到服务器上的代码就是“加工过的”,他拿到,也没啥用。

自己最近在给一些内部项目做优化的时候,突然想到:我 tmd 是不是吃饱了撑的,优化个毛。 代码能跑通就行了。
我把代码理的这么顺,注释写这么清晰,又不给我加薪。 so ,我做他干什么呢?

诚然,这么想,显得我非常狭隘和短见。然而,我还是控制不住自己的强迫症。
pysama
2016-12-15 21:25:29 +08:00
@bumz
@binux
大神们,你们说的太高深了,我不懂。
我只略微懂点 js ,写点 node.js 项目。所以,我这个 topic 的思路也只是基于 js 代码哈。
anubiskong
2016-12-15 21:26:09 +08:00
@pysama 用 shi 做蛋糕口味的参照物, 何必自寻苦恼?
shyling
2016-12-15 21:27:33 +08:00
其实我觉得...那主要是为了压缩不是混淆
zhuangzhuang1988
2016-12-15 21:47:35 +08:00
用 clojure, scalajs 写
然后编译+压缩下,
基本作者自己都看不懂
SilentDepth
2016-12-15 21:51:27 +08:00
嗯,同意 @akira 的观点,干扰代码也能去掉,因为毕竟是「逻辑上没有意义的代码」,做语法分析很容易移除。如果真的要加大混淆力度的话,干脆不要写 JS ——用别的语言写,然后编译到 JS ,这样应该比手动设计干扰内容更高效。当然,理论上 JS 就没有所谓的源码加密……
onceyoung
2016-12-15 21:59:45 +08:00
很多程序员写出来的代码自带混淆的
an168bang521
2016-12-15 22:04:12 +08:00
你最终要让浏览器来执行的, 浏览器上能正常执行的代码,都防不住真正想拿你代码的人;
你听说过有哪个前端框架或者类库是封闭的吗?
只要东西好用,即使不想开源,也"被开源"了,
我感觉是,没必要那么倒腾。
chemzqm
2016-12-15 22:41:16 +08:00
这技术已经有了,小程序开发工具源码后来的混淆就加了很多拉圾代码进去,只是比较初级,很容易识别。
SlipStupig
2016-12-15 23:04:56 +08:00
估计 LZ 最近被同事给恶心了,你这种方法,跑一下 coverage 基本上就没用了.....
nfroot
2016-12-15 23:05:13 +08:00
来来来,转换成风骚六进制。。。。。。。。。。

[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()
onlyhot
2016-12-15 23:09:43 +08:00
不懂混淆的意义,每次解混淆就完了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/327925

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX