单独部署在客户服务器上的 Java 应用如何防止客户将其再次部署到其他客户的服务器?

2021-05-07 20:04:09 +08:00
 jack778
如题,我用 java 做了一个管理系统出售给某个客户并需要部署到客户的服务器,客户方面有懂技术的人员,如何防止他们去将这个应用再次部署到其他服务器上,或者说尽量增加他们移植到其他服务器的成本?以防止他们将其二次出售给其他客户, 从而影响本人的利益.请各位大佬分享一些经验,谢谢.
3242 次点击
所在节点    程序员
31 条回复
yitingbai
2021-05-08 08:59:53 +08:00
@wangsd java 写的程序这么做没意义, 加密方法轻易就被看到了
XiLingHost
2021-05-08 09:06:44 +08:00
把一部分关键逻辑放在你的服务器上,然后做 api 鉴权
wanguorui123
2021-05-08 09:07:09 +08:00
绑定硬件,每次只允许生成一份软件授权码
buster
2021-05-08 09:19:06 +08:00
曾经破解过一个 BI 软件,直接修改底层依赖包里的 LICENSE 验证代码,写死过期时间就可以实现无限期使用了。

可以优先考虑如何防止(混淆)反编译,然后再把你的 license 验证代码藏进去。
timethinker
2021-05-08 09:22:22 +08:00
要真防的话是防止不了的,就如 2 楼所言,防君子不防小人,收集证据是一种方法,但是如果他们的服务器不联网或者屏蔽了你们的中央服务器,这一招就没有办法了。

以往的做法就是,软件根据所部署系统的一些特征生成一个唯一标识( UID ),软件厂商根据一些算法,例如使用私匙对这个唯一标识进行签名生成一个授权码。客户获取授权码之后进行配置,然后软件启动的时候获取 UID,并根据授权码和公匙进行校验。

需要指出的是以上方法如果系统环境被复制(在系统层面没有什么是不能模拟的),或者软件内置的公匙被替换为他们自己的,都会导致此方法失效。

估计未来一段时间仍然会有这种独立部署的需求存在,除非客户端是断网的,内部使用的(例如学校内的一些系统),否则现在绝大多数服务基本上都转变为 SaaS 模式了,多租户使用一组服务器,数据上进行隔离分区,不仅方便版本升级,也省去了客户部署的操作。
jack778
2021-05-08 09:34:01 +08:00
@Greatshu 老哥的办法有点狠
matrix67
2021-05-08 09:34:26 +08:00
这不就是单机软件防破解么

于破解过招,保护你的共享软件
――此文曾作为连载刊登于《电脑报》 2003 年 41 、42 期,如要转载,请注明出自《电脑报》

推荐搜索看一下这篇文章,看雪论坛 03 年左右就有讨论过的。
jack778
2021-05-08 09:38:20 +08:00
@qwe520liao 私有部署是客户对数据安全有心理障碍,反正就是单独部署在自己服务器才感觉安心,这是心理需求,并非真正的安全需求。
saytesnake
2021-05-08 09:43:00 +08:00
可以上外网,在线授权 orgid,无法上外网,就加密狗。
uselessVisitor
2021-05-08 13:56:21 +08:00
加一层 mac 地址验证?
cheng6563
2021-05-08 13:59:30 +08:00
找一个 c 的加解密库,预编译成 dll/so 用 jni 调用。
给所有 jar 文件加密,自定义个类加载器,即时解密 jar 文件并加载。
通过 mac 地址生成授权码。

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

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

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

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

© 2021 V2EX