
需要给客户部署 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 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 )用到代码混淆库,如 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 < href="/member/akira" class="dark">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 + 编译成字节码 |