需要给客户部署 web 服务到他们服务器,想给他一个注册码,填入后就可以获得一年有效期,到期后无法使用,就类似 jetbrains 的付费方式。
但是服务端代码如果是 js/python 这类脚本语言,代码都是明文的,不好做有效期的逻辑,别人直接改掉就没了,有什么办法做到呢?
1
JDog 2021-10-13 09:54:38 +08:00
套个虚拟机🐶
|
2
2kCS5c0b0ITXE5k2 2021-10-13 09:59:25 +08:00
如果是 python 可以用 Cython .
如果是 js 只能做混淆了. |
3
whcoding 2021-10-13 10:04:02 +08:00
这没办法吧 都部署到人家的服务器了, 等个大佬~
|
4
wolfie 2021-10-13 10:04:42 +08:00
写进第三方库依赖里。并且写死。每次续费 重新维护。
|
5
masterclock 2021-10-13 10:08:08 +08:00
不给这些文件的读写权限?
|
6
NewYear 2021-10-13 10:13:16 +08:00
现在都是不在客户端做严格的防护了,而是把部分功能对接你的云端服务器,通过控制服务的可用性来操控客户端的客户端。。。
客户端太难防备了。 |
7
ch2 2021-10-13 10:14:46 +08:00
你收费高了的话,他总能花钱雇到逆向你加密的人才
|
8
initdada 2021-10-13 10:21:37 +08:00
授权中心系统,TCP 心跳机制
|
9
rationa1cuzz 2021-10-13 10:21:48 +08:00
源码加密的话,python 的话可以转成.so 文件,成本相对低一点,另外有效期可以手写个简单的 license,连外网校验,有限制的话让开个白名单就好。
|
10
paopjian 2021-10-13 10:25:43 +08:00
antd 敢在代码里埋时间炸弹,明文的玩意都没几个人发现,自己偷偷埋检测呗
|
11
balabalaguguji OP @initdada #8 别人直接改下代码就好了,而且有些是只内网
|
12
efaun 2021-10-13 10:38:59 +08:00
usb-key
|
13
eason1874 2021-10-13 10:40:33 +08:00
大软件好搞,用 Client/Server 模式,在本地开个虚拟机跑 Server,主程序和验证程序在里面,用系统账号密码保护,通过接口向 Client 提供服务
小软件就比较难搞,不过混淆加密编译二进制什么的也能打消大部分的破解想法了 |
14
keepeye 2021-10-13 10:48:11 +08:00
考虑云端校验,就是要求外网权限了
|
15
2i2Re2PLMaDnghL 2021-10-13 10:54:42 +08:00
@paopjian 这里的问题不是未发生时能不能发现,而是发生后能不能去除。
|
16
victorywangzhcn 2021-10-13 10:59:48 +08:00
白盒密码搞起
|
17
balabalaguguji OP @efaun #12 你代码都明文的,别人改下就不读取你 usb-key 了
|
18
kop1989 2021-10-13 11:04:45 +08:00
这种私有云情况,如果有条件,走云校验。
如果没有条件,则每次续费下发加密的库文件。库文件最好夹杂业务,越复杂越好。 当然,如果死心塌地的走逆向破解,怎么防都没用。 |
19
libook 2021-10-13 11:06:10 +08:00
基本思路是把脚本源代码转换成字节码,再增加一些反逆向的措施就行了。
对于 JS,如果使用 V8 引擎的话,V8 会把 JS 转换成优化过的字节码再运行,那么你可以考虑把这个字节码从 V8 里导出出来,可以去 Google 上搜一下“export bytecode from v8”相关的信息,有手动导出的教程,也有一些现成的工具。 另外也可以考虑转换成 WebAssembly,也就相当于转换成字节码了,只不过不止针对 V8,兼容任何支持 WebAssembly 的引擎。 Python 不了解,但应该也有类似思路的方案。 |
20
janxin 2021-10-13 11:12:15 +08:00
PHP 可以 Zend 混淆
JS 可以使用 qjsc,上面提到的 webassembly 也是一个方案 Python 可以分发中间码文件 |
21
est 2021-10-13 11:13:12 +08:00 4
python 的话,简单。你跑起来后把本地工程目录文件全删了就行
(当然你不能搞什么动态 import 了。 |
22
6IbA2bj5ip3tK49j 2021-10-13 11:14:59 +08:00
intellij 的到期之后,还是可以用的,只是不能升级了。
|
23
kekxv 2021-10-13 11:18:16 +08:00 via iPhone
不加密,发现了就警告并准备发生律师函,这不简单多了
|
24
efaun 2021-10-13 11:18:29 +08:00
@balabalaguguji #11 我说的是硬件,插在 usb 接口上的,初始化系统就必须一直插着,有任何断联行为就必须回单位激活,海关就用的这
|
25
zjsxwc 2021-10-13 11:22:38 +08:00
业务代码混淆就行,目的仅仅只是增加修改和添加新业务的难度,而不是防破解,
真要破解的话,防不住的, 君不见市面上那么多商业软件都会有对应的破解注册机出来,这些商业软件可都是编译成二进制的。 |
27
Aprilming 2021-10-13 11:25:41 +08:00
我们是做 license , 前提是客户的服务器,但是服务器密码,grub 密码,就我们自己清楚。
|
28
zjsxwc 2021-10-13 11:29:33 +08:00
而且有 libfaketime ( https://github.com/wolfcw/libfaketime ) 这肆意修改进程时间的库存在,
有效期保护只能防君子, 比如 `faketime '2018-12-24 08:15:42' /idea.sh` 无限白嫖 idea |
29
cheng6563 2021-10-13 11:32:26 +08:00
用 c,go,rust 之类的语言写几个关键并通用的逻辑做成.so/.dll ,比如登录密码校验,数据序列化时的加密解密。然后业务代码再混淆一下。
|
30
ersic 2021-10-13 11:32:30 +08:00
有合同的话不怕吧,到期他继续用就起诉呗。
|
31
pkoukk 2021-10-13 11:51:58 +08:00
pyhon 和 nodejs 都可以调用 c 库的
把一些核心操作和权限一起封进 c 里调用,比如数据的序列化 /反序列化。 |
32
pkoukk 2021-10-13 11:53:52 +08:00
不需要太高的破解难度,只需要让他们破解的成本增加就行了
|
34
dangyuluo 2021-10-13 12:03:03 +08:00
二进制层面都是明文啦
|
35
cookgo 2021-10-13 12:15:30 +08:00
用 C/C++/Rust/Golang 写一个二进制程序,授权到期了,直接杀掉 Js/Python 服务的进程。
|
36
vinsony 2021-10-13 12:47:36 +08:00
我之前用 js 写服务端,也是用 webpack 打包成一个文件了的,体积小还方便部署,代码经过 webpack 之后也变得比较难读。
当然这还不够,还要防止 js 文件里的关键判断被轻易找到。比如你限制使用日期,就不要直接写年月日进去,可以写成 if (time > 17e11)这种。然后过期了你也不要输出提示信息,防止被搜索到,直接让程序挂掉或者数据错乱就好了。 js 可以有很多骚操作,比如你可以在任何地方污染一下原型,写法也多种多样,比如 Object.defineProperty(Array.prototype, 'fil' + 'ter', {}),这样用到 filter 的地方就会 GG 了,只要你把污染的方法名字变化一下,他搜对应的接口或者关键字,毛都搜不到~ |
37
xiangyuecn 2021-10-13 12:53:19 +08:00
extend #21 你跑起来后把本地工程目录文件全删了就行 {
1. 源码打个加密压缩包 2. 启动时校验授权,解压缩到其他很难找到的目录,启动代码直接明文,但写的鬼都不认识 3. 正常运行 - 源码内也加授权校验代码,也写的鬼都不认识 } 就问骚不骚😂😂😂 |
38
xuanbg 2021-10-13 13:01:25 +08:00
核心逻辑放在自己服务器上面提供远程调用。当然这个逻辑不能是高频的那种。
|
39
est 2021-10-13 13:34:34 +08:00
@xiangyuecn 既然你都启动时校验授权了,那么 python 可以直接从远端 zip 进行 import 。源代码根本都不用落盘。
|
40
pkoukk 2021-10-13 13:45:38 +08:00
@makelove
nodejs 里的 buffer 就是 c 实现的,请你把 buffer 这块代码空掉再试试,你看还跑得起来不 |
41
xuxuxu123 2021-10-13 13:46:50 +08:00
js 的话,有个想法:
把某个核心逻辑,通过引用云端的 js 方式进行处理,然后那个云端文件在你自己服务器,自己做授权;剩下的就开混淆 |
42
zhangchongjie 2021-10-13 13:57:08 +08:00
代码混淆,核心代码 http 协议请求运行,核心代码一定不能放在本地,如果是内网部署,那可能就没有办法了。或者是 jar 包 sdk 集成。反正就这些东西
|
43
lucays 2021-10-13 14:17:57 +08:00
二进制了也是可以逆向出来的
没有绝对安全的方法,就是成本问题,那么多商业软件也都有破解版 |
44
winiex 2021-10-13 14:26:48 +08:00
nodejs 用 nexe,python 用 pyinstaller 。
但要做到万无一失,还要考虑绑定 mac 、CPU ID 等硬件信息。 |
45
balabalaguguji OP @cookgo #35 直接把你的 Go 程序杀掉就好啦
|
46
balabalaguguji OP @kekxv #23 别人内网用,你都不知道他们有没在用
|
47
balabalaguguji OP @lucays #43 不讲究那么高端的破解,能增加破解难度就好了。
|
48
balabalaguguji OP @winiex #44 感谢!试了下,pyinstaller 可以的,我之前有用过这个,印象中有稍微复杂点的依赖都是转不出来 exe 的,所以都没考虑过,没想到现在是可以的。
|
49
SmallXeon 2021-10-13 17:14:50 +08:00
python 的话可以用 pyarmor 加密代码
|
50
Rheinmetal 2021-10-13 17:15:47 +08:00
纯内网的话 在线验证不好搞了
那就在业务设计和代码上做文章 实现用一段时间(一个月左右)就需要你去维护 具体逻辑不能太明显太简单 否则容易破解 一段时间内免费维护 之后按时长收费 |
51
SmallXeon 2021-10-13 17:16:09 +08:00
js 也有 UglifyJS 这种可以加密混淆,也是可以阻止他人查看代码逻辑的
|
52
s127 2021-10-13 17:37:57 +08:00
都是防君子不防小人,加个代码混淆就可以了。就当放水养鱼,抓大的就行了。
|
53
fannas 2021-10-13 17:45:42 +08:00 via iPhone
1. 网络校验授权
2. 部分功能 rpc 3. 律师函准备 |
54
MCyunpeng98 2021-10-13 17:55:16 +08:00
@masterclock #5 自己的服务器,文件权限不是随便改?
|
55
Mithril 2021-10-13 17:59:52 +08:00
软件保护从来都只是个成本问题而不是技术问题。
最简单的,合同只签一年,一年以后不付钱直接起诉就行了。 |
56
podel 2021-10-13 18:03:09 +08:00
python 有好多中打包的软件。
js 可以编译混淆。 另外申请软件著作权。对面破解了,找证据告他们就是了。 |
57
youlooksocool 2021-10-13 18:38:18 +08:00 1
刚刚最近在思考这个问题:
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 )申请专利。 |
58
changwei 2021-10-13 19:18:57 +08:00
用 usb 加密狗就好了,之前去过某学校数据中心,几乎每台服务器上面都插着加密狗,都是买了 xx 教务软件 xx 管理系统之类的然后厂商用这种办法做限制。
|
59
nanjingwuyanzu 2021-10-13 19:30:54 +08:00
有没有针对 java 代码的保护?
|
60
cszchen 2021-10-13 19:36:24 +08:00 via iPhone
最简单的做法是:
linux 部署好了之后,设置目录权限,有权限的用户和 root 账号不要给他们,到期手动停 |
61
nightwitch 2021-10-13 20:06:19 +08:00
核心代码走 C 库调用,C 库里面做验证。
|
62
stevenhawking 2021-10-14 02:07:36 +08:00
核心逻辑存在云端
|
63
akira 2021-10-14 02:15:18 +08:00
所以你发现没有,现在有些产品价格超低甚至免费,然后部署、售后、技术支持这些地方来赚你的钱
|
64
DeWjjj 2021-10-14 02:32:17 +08:00
上次忘记在哪看到过一个打包 django 的。
|
68
adoal 2021-10-14 12:32:18 +08:00
不要做穷逼且爱折腾技术搞破解的客户的生意。这样的客户搞不清甲乙方的价值界限。
|
69
rf99wSiT6IxH1Z23 2021-10-15 01:27:12 +08:00
Node.js: Minify + Uglify + 编译成字节码 🤣
|