公司开发了一个新产品,客户是在内网环境下使用的,但是我们的产品又需要卖授权,有没有人做过类似的方案呢? 目前考虑的方案是:使用非对称加密算法生成公钥和私钥,公钥保存在公司内,用于生成 licence,私钥嵌入产品内,licence 中包含机器码等信息,软件启动时加载 licence 并用私钥解密,判断机器码和使用时间等信息是否有效。 但是这个方案容易被破解,毕竟 class 反编译后私钥,licence 文件格式,授权检验等信息都藏不住,把检验的 class 文件替换掉就破裂掉了。 即使做代码混淆也不过是提高了反编译的难度而已。 技术所限,想了一天都想不到解决方案,各位有没有什么更好的方案可以提供参考呢?或者其他离线授权机制的思路?
1
Lighfer OP 手机发表的,换行都没了,我一会回去调整一下
|
2
Lighfer OP 好像不能编辑… 各位看官辛苦了……
|
3
shayuvpn0001 2018-06-04 19:01:30 +08:00
加密狗 + 限时的 Licence
|
4
chinvo 2018-06-04 19:03:17 +08:00 via iPhone
Java bytecode 和明文源码没多大区别,所以用硬件,把一部分核心逻辑放到加密狗里面。
|
5
olOwOlo 2018-06-04 19:04:12 +08:00
。。。我还是第一次听说把公钥保密,私钥公开的
|
7
Lighfer OP @shayuvpn0001 客户的机子上是禁止 usb 的,所以加密狗用不了,licence 限时意义不大,因为被反编译后授权完整的代码基本都呈现出来了,很容易造出一个破解版的 class 文件把验证算法跳过去……
|
9
Lighfer OP @olOwOlo rsa 加密一般不都是用公钥加密私钥解密吗,而且只要保证其中任意一个不泄露,其实用哪个公开都可以的吧?
|
10
gam2046 2018-06-04 19:07:49 +08:00 1
看应用被破解的强度吧。一般的,用自定义 ClassLoader 去加载 bytecode,同时 ClassLoader 用 native 写,基本上可以防止很多中低端的破解手段。
要高强度的就是考虑上面大佬说的看门狗方案,将部分功能以及授权验证抽离到独立外部硬件中进行。 |
12
Lighfer OP @gam2046 客户的机子禁用 usb,所以似乎加密狗的方案行不通…… classloader 倒是一个更好的思路,我回头研究一下,十分感谢!
|
15
zhjits 2018-06-04 19:26:43 +08:00
如果客户终端比较多的话写一个 license server,server 要求定期从公司网站下一个 license file 喂进去(
|
16
wenzhoou 2018-06-04 19:58:41 +08:00 via Android
公钥保存在公司内。说的是谁的公司内,你的公司内 还是使用者公司内?
|
21
likuku 2018-06-04 20:27:18 +08:00
唯有在线激活(激活服务器记录保存验证客户购买和机器信息,确保任何时候客户激活的机器总数不超过许可)这种机制可以在技术上较好得应对这个状况。
|
22
cxh116 2018-06-04 20:34:06 +08:00 via Android 1
用硬件加密狗都能破解,只是比普通的纯软件加密难度高些。
只能像 v2 的朋友用过的方法,先让你使用,使用一段时间后突然检测是不是盗版,是盗版的话数据丢到其它隐藏表,或加密,要恢复交钱。 |
25
ETiV 2018-06-04 21:09:42 +08:00
没用的…加密做的再好,
if (validate(license)) 改成 if (true || validate(license)) 就破掉了…… |
26
0TSH60F7J2rVkg8t 2018-06-04 21:12:04 +08:00 via iPhone
什么?公钥存服务器?私钥随软件分发?这不是开玩笑吗?
私钥是不公开的! 私钥是不公开的! 私钥是不公开的! 重要的事情说三遍。 私钥存服务器才对啊,授权采用签名模式啊。把机器序列号(硬件信息)和软件序列号(和或产品主要文件 hash 校验指纹)一起签名了发下去。软件用公钥计算一遍校验签名就行了啊。 |
27
pabupa 2018-06-04 21:13:56 +08:00
Jetbrains 的 IDE 是怎么做的呢?我觉得挺好,
|
28
Lighfer OP @ahhui 对的,这个是我的错误。主要的问题都不在于 licence 里面是什么,licence 怎么生成的,真正的问题在于只要是(在我的理解范围内的只要是)纯 java 实现的,都可以比较轻易的通过反编译得到对应的验证逻辑,然后替换 class 文件实现破解,正如 25 楼说的这样= =
|
29
Lighfer OP @pabupa JB 是网上有现成的 licence 可以用,所以别人就不需要去做破解版了,还有就是 JB 的授权服务器也被破解了,可以自己搭建的
|
30
anotherlf 2018-06-04 21:21:15 +08:00 via Android
直接开源,然后卖原厂服务,做产品的时候积极挖坑就好。
|
31
PHPer233 2018-06-04 21:23:34 +08:00 via iPhone
你只需要对授权验证的相关代码进行加密或混淆,不需要对普通代码做特殊手段。我之前遇到过一款软件,对加解密算法进行保护,我们搞了几天没搞出来。不知道是用了什么保护手段。
|
34
wenzhoou 2018-06-04 21:27:15 +08:00 via Android
你的程序相当于客户端,你公司的版权服务器相当于服务器端。 这个问题就是客户端和服务器端双方互相确认对方的身份问题。 具体来说,根据每个客户第一次运行的机器,生成一个加密文件。你把这个加密文件的拿来,用自己的私钥签名。作为卖给每个客户的 license,邮件方式给用户。软件每次启动,或者执行一些关键函数的时候都确认这个文件存在性,以及没有被篡改,以及本机的信息都匹配才可以执行。 那软件的完整性怎么确保。还是一样把关键文件的 hash 值做校验。
|
35
qile1 2018-06-04 21:32:22 +08:00 via Android
自己看看公开加密算法或者自己写个加密算法,生成 12 位或者多少位注册码让用户注册,软件牛到需要请人破解,只能埋雷了,
话说我以前弄注册码直接有个字段放时间字符,每次过期注册码只改那个字符,后来他们自己会改了,就再没有给我付尾款,两年了! |
36
lihongming 2018-06-04 21:37:51 +08:00 via Android 5
软件防破解的关键在于设置多个加密点,且触发方式不同,比如执行某项操作时,顺便对授权管理文件的哈希值做个校验,看有没有改动过。
尤其是延时触发一定要做。当你检测到破解、调试等行为时,先不要做出保护动作,让软件正常运行,这样他就很难一次性把所有加密点全都找到。 后续怎么处理就看心情了,比如半年以后把他的数据加密一下。但要注意好法律问题,千万不要搞成勒索,数据恢复是免费的,但你可以在软件授权协议中约定,如果有调试、破解、反编译等行为,需要支付违约金多少多少钱…… |
37
Lighfer OP @wenzhoou 那么假设确认这个文件存在性、是否被篡改及机器信息匹配的函数(或者多个函数)被反编译后,对方根据反编译得到的代码编译出一个总是返回验证通过的版本的 class 替换掉了原来的 class 文件,这种情况也还是无法解决了,毕竟 java 的字节码和源码差不了太多。。
|
38
Lighfer OP @lihongming 这个方案也好,而且可以较好地结合其他楼主的方案,受教了,十分感谢!
|
39
wly19960911 2018-06-04 22:04:08 +08:00 via Android
|
40
lastpass 2018-06-05 00:15:15 +08:00 via Android
涉密产品呀,不用搞这么麻烦。你直接把数据库的初始化 sql 给加密就好,只有使用你专门的加密方式才能解密。你完全可以方向,绝对不会有人敢去,或者想去破解你的数据库。使用涉密数据库用户会把它看的比他家还严实 100 倍。
|
41
IvanLi127 2018-06-05 00:44:25 +08:00 via Android
检测盗版,是盗版就干病毒干的活,然后要钱。干得隐秘点,让人以为都是破解的时候出差错了。
|
42
ETiV 2018-06-05 00:58:25 +08:00
不过话说回来,你服务的客户,真有这样的技术么 -。-
去破解你家的软件,再拿出去卖吗… 我有个大学同学,毕业后留校了,管图书馆 去年聊天得知,图书馆内部的那个什么系统,也是买的第三方的,授权之类的一律离线 然后卖他们系统的就有售后服务的小伙,全国各地的跑,去更新这个系统、备份里面的数据,相当于运维。 |
43
qwertyegg 2018-06-05 01:00:44 +08:00
@jadec0der 有了私钥虽然不能解析算出来公钥,但是要攻击并不难,因为缺的那个 e 并不大(1 < e < λ(n) ),而且常常选的就是 65537
|
44
miketeam 2018-06-05 01:39:43 +08:00 via iPhone
楼主的老板思维好僵化,看看人家微软怎么做!你不会盗版?没关系,我注册小号教你破解系统!要的是市场。
|
45
Lighfer OP @lastpass 哈哈哈哈是这样的没错,所以我们这个不带数据库的哈,除了日志文件,其他的不能记录任何客户的信息,导出日志都需要审核,我们的产品是工具类的
|
47
scmod 2018-06-05 09:22:41 +08:00
只有混淆了感觉,或者 Excelsior JET 之类的?
|
49
oska874 2018-06-05 12:29:31 +08:00
加密狗一条路。
|
50
Greatshu 2018-06-05 13:32:11 +08:00
涉密软件不会有人搞盗版的,破解版谁敢用
|
51
qile1 2018-06-05 13:44:29 +08:00 via Android
@flower545 是自助发药机的接口,从 his 系统整理药品数据,同步到发药机的火鸟数据库,用的 his 系统是微软 mssql,用户名 sa 别系统也在使用,数据库封 ip 后有的程序报错,连接不上,现在用跟踪器发现我程序名没有重复的,不知道怎么封!
|
54
wmhx 2018-06-06 01:51:24 +08:00
v2ex 里面有个卖水厂软件的,说到类似的版权保护方案, 大概意思是说纯靠技术基本是不现实的, 需要一个很好好的合约,里面做好约定, 然后才是考验你的技术了, 类似#36 楼那样, 设置多个检查点, 定期检查, 如果发现问题就加密或混淆部分数据, 这就是破解或者没有售后的结果, 等其发现数据不对自然回来找你的, 然后你再用约定来约束之, 让买授权解决数据恢复问题. 这也是一个 javaer 能想到的最好的方案了 .
|