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

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

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

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

8550 次点击
所在节点    信息安全
69 条回复
xuxuxu123
2021-10-13 13:46:50 +08:00
js 的话,有个想法:
把某个核心逻辑,通过引用云端的 js 方式进行处理,然后那个云端文件在你自己服务器,自己做授权;剩下的就开混淆
zhangchongjie
2021-10-13 13:57:08 +08:00
代码混淆,核心代码 http 协议请求运行,核心代码一定不能放在本地,如果是内网部署,那可能就没有办法了。或者是 jar 包 sdk 集成。反正就这些东西
lucays
2021-10-13 14:17:57 +08:00
二进制了也是可以逆向出来的
没有绝对安全的方法,就是成本问题,那么多商业软件也都有破解版
winiex
2021-10-13 14:26:48 +08:00
nodejs 用 nexe,python 用 pyinstaller 。
但要做到万无一失,还要考虑绑定 mac 、CPU ID 等硬件信息。
balabalaguguji
2021-10-13 15:42:39 +08:00
@cookgo #35 直接把你的 Go 程序杀掉就好啦
balabalaguguji
2021-10-13 15:43:10 +08:00
@kekxv #23 别人内网用,你都不知道他们有没在用
balabalaguguji
2021-10-13 15:44:20 +08:00
@lucays #43 不讲究那么高端的破解,能增加破解难度就好了。
balabalaguguji
2021-10-13 15:58:21 +08:00
@winiex #44 感谢!试了下,pyinstaller 可以的,我之前有用过这个,印象中有稍微复杂点的依赖都是转不出来 exe 的,所以都没考虑过,没想到现在是可以的。
SmallXeon
2021-10-13 17:14:50 +08:00
python 的话可以用 pyarmor 加密代码
Rheinmetal
2021-10-13 17:15:47 +08:00
纯内网的话 在线验证不好搞了
那就在业务设计和代码上做文章
实现用一段时间(一个月左右)就需要你去维护
具体逻辑不能太明显太简单 否则容易破解
一段时间内免费维护 之后按时长收费
SmallXeon
2021-10-13 17:16:09 +08:00
js 也有 UglifyJS 这种可以加密混淆,也是可以阻止他人查看代码逻辑的
s127
2021-10-13 17:37:57 +08:00
都是防君子不防小人,加个代码混淆就可以了。就当放水养鱼,抓大的就行了。
fannas
2021-10-13 17:45:42 +08:00
1. 网络校验授权
2. 部分功能 rpc
3. 律师函准备
MCyunpeng98
2021-10-13 17:55:16 +08:00
@masterclock #5 自己的服务器,文件权限不是随便改?
Mithril
2021-10-13 17:59:52 +08:00
软件保护从来都只是个成本问题而不是技术问题。
最简单的,合同只签一年,一年以后不付钱直接起诉就行了。
podel
2021-10-13 18:03:09 +08:00
python 有好多中打包的软件。
js 可以编译混淆。
另外申请软件著作权。对面破解了,找证据告他们就是了。
youlooksocool
2021-10-13 18:38:18 +08:00
刚刚最近在思考这个问题:

1 、代码中
采用混淆代码,降低源码可读性。
( 1 )用到代码混淆库,如 pyobfuscate 。
( 2 )修改 Python 解释器,利用抽象语法树 AST 混淆源码。


2 、打包时候
( 0 )发行 .pyc 二进制文件,虽然无法直接看出源码,但一些工具能够直接反编译出源码。
( 1 ) Pyinstaller 是打包为二进制可执行文件 exe/elf/app 。
( 2 ) Nuitka 打包为二进制可执行文件。打包后的 exe 比 Pyinstaller 打包后的 exe 运行速度提升 30%。因为底层转换为了 C 程序再编译为二进制文件。目前,反编译 C 程序难度和成本比较大。
( 3 ) cython 编译为 C 文件,然后再将 C 文件编译为操作系统的动态链接库文件。(Linux 下的 .so 文件和 Windows 下的 .pyd 文件)。但兼容性不是很好。


3 、付费加密,风险外包
( 1 ) Pyarmor 付费,使用脚本加密。
( 4 ) Sourcedefender 付费,使用 AES-256 加密。


4 、寻求法律保护
( 1 )许可证 /合同 /条款和条件。
( 2 )申请专利。
changwei
2021-10-13 19:18:57 +08:00
用 usb 加密狗就好了,之前去过某学校数据中心,几乎每台服务器上面都插着加密狗,都是买了 xx 教务软件 xx 管理系统之类的然后厂商用这种办法做限制。
nanjingwuyanzu
2021-10-13 19:30:54 +08:00
有没有针对 java 代码的保护?
cszchen
2021-10-13 19:36:24 +08:00
最简单的做法是:
linux 部署好了之后,设置目录权限,有权限的用户和 root 账号不要给他们,到期手动停

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

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

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

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

© 2021 V2EX