私有部署如何避免代码泄露?如何限制服务有效期?

2021-10-13 09:51:44 +08:00
 balabalaguguji

需要给客户部署 web 服务到他们服务器,想给他一个注册码,填入后就可以获得一年有效期,到期后无法使用,就类似 jetbrains 的付费方式。

但是服务端代码如果是 js/python 这类脚本语言,代码都是明文的,不好做有效期的逻辑,别人直接改掉就没了,有什么办法做到呢?

8999 次点击
所在节点    信息安全
69 条回复
JDog
2021-10-13 09:54:38 +08:00
套个虚拟机🐶
2kCS5c0b0ITXE5k2
2021-10-13 09:59:25 +08:00
如果是 python 可以用 Cython .
如果是 js 只能做混淆了.
whcoding
2021-10-13 10:04:02 +08:00
这没办法吧 都部署到人家的服务器了, 等个大佬~
wolfie
2021-10-13 10:04:42 +08:00
写进第三方库依赖里。并且写死。每次续费 重新维护。
masterclock
2021-10-13 10:08:08 +08:00
不给这些文件的读写权限?
NewYear
2021-10-13 10:13:16 +08:00
现在都是不在客户端做严格的防护了,而是把部分功能对接你的云端服务器,通过控制服务的可用性来操控客户端的客户端。。。

客户端太难防备了。
ch2
2021-10-13 10:14:46 +08:00
你收费高了的话,他总能花钱雇到逆向你加密的人才
initdada
2021-10-13 10:21:37 +08:00
授权中心系统,TCP 心跳机制
rationa1cuzz
2021-10-13 10:21:48 +08:00
源码加密的话,python 的话可以转成.so 文件,成本相对低一点,另外有效期可以手写个简单的 license,连外网校验,有限制的话让开个白名单就好。
paopjian
2021-10-13 10:25:43 +08:00
antd 敢在代码里埋时间炸弹,明文的玩意都没几个人发现,自己偷偷埋检测呗
balabalaguguji
2021-10-13 10:26:12 +08:00
@initdada #8 别人直接改下代码就好了,而且有些是只内网
efaun
2021-10-13 10:38:59 +08:00
usb-key
eason1874
2021-10-13 10:40:33 +08:00
大软件好搞,用 Client/Server 模式,在本地开个虚拟机跑 Server,主程序和验证程序在里面,用系统账号密码保护,通过接口向 Client 提供服务

小软件就比较难搞,不过混淆加密编译二进制什么的也能打消大部分的破解想法了
keepeye
2021-10-13 10:48:11 +08:00
考虑云端校验,就是要求外网权限了
2i2Re2PLMaDnghL
2021-10-13 10:54:42 +08:00
@paopjian 这里的问题不是未发生时能不能发现,而是发生后能不能去除。
victorywangzhcn
2021-10-13 10:59:48 +08:00
白盒密码搞起
balabalaguguji
2021-10-13 11:01:45 +08:00
@efaun #12 你代码都明文的,别人改下就不读取你 usb-key 了
kop1989
2021-10-13 11:04:45 +08:00
这种私有云情况,如果有条件,走云校验。

如果没有条件,则每次续费下发加密的库文件。库文件最好夹杂业务,越复杂越好。

当然,如果死心塌地的走逆向破解,怎么防都没用。
libook
2021-10-13 11:06:10 +08:00
基本思路是把脚本源代码转换成字节码,再增加一些反逆向的措施就行了。

对于 JS,如果使用 V8 引擎的话,V8 会把 JS 转换成优化过的字节码再运行,那么你可以考虑把这个字节码从 V8 里导出出来,可以去 Google 上搜一下“export bytecode from v8”相关的信息,有手动导出的教程,也有一些现成的工具。

另外也可以考虑转换成 WebAssembly,也就相当于转换成字节码了,只不过不止针对 V8,兼容任何支持 WebAssembly 的引擎。

Python 不了解,但应该也有类似思路的方案。
janxin
2021-10-13 11:12:15 +08:00
PHP 可以 Zend 混淆

JS 可以使用 qjsc,上面提到的 webassembly 也是一个方案

Python 可以分发中间码文件

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

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

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

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

© 2021 V2EX