V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cruii
V2EX  ›  程序员

如何尽可能的保护自己的 Java 代码

  •  
  •   cruii · 2020-05-25 15:58:21 +08:00 · 3109 次点击
    这是一个创建于 1425 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近公司要把开发的项目直接以 jar 包的方式发送给客户。理由是客户方是内网环境,无法访问我们部署在服务器上的平台,需要部署到他们的服务器上。 我担心代码泄露,公司也不是第一次发生这种事情,公司前辈说这种东西只能靠打官司解决 但我还是想来问问 V 站大佬们:

    1. 客户方是内网环境就必须以这种方式部署吗?
    2. 如何提高代码的破解成本?
    3. 有没有相对更好的解决办法或者折中的办法?
    19 条回复    2020-05-26 18:45:38 +08:00
    BBCCBB
        1
    BBCCBB  
       2020-05-25 16:03:35 +08:00
    应该只能混淆 + 加很多没用的代码混淆
    lower
        2
    lower  
       2020-05-25 16:21:23 +08:00
    1.核心代码可以考虑搞成 dll 调用;
    2.搞 license 许可,用服务器网卡 /IP 去校验;
    3.加密 class 文件,启动加载时解密,解密逻辑写在外部 dll ;
    murmur
        3
    murmur  
       2020-05-25 16:24:25 +08:00
    你们前辈说的是对的,当你们做到行业老大的时候,就可以一边搜索一边发律师函了,或者把你们的东西做的有缺陷点,不走客服就用不爽
    yjxjn
        4
    yjxjn  
       2020-05-25 16:30:49 +08:00
    最简单的例子其实就是银行系统,好多人说银行系统安全性高,这点不假,但是只要攻破,牢饭妥妥的,所以你前辈说的对,代码这种事儿,你再怎么加密也没啥用,总有漏洞,最好的方法就是打官司。
    lewis89
        5
    lewis89  
       2020-05-25 16:37:16 +08:00
    做好验证, 找个知识产权代理 注册好知识产权 以后打官司就好了,从代码层面上来防盗 根本没用,windows 搞反盗版 搞了这么多年,后面干脆放弃了
    guyeu
        6
    guyeu  
       2020-05-25 16:48:35 +08:00   ❤️ 2
    假如贵司用的是 java9+,可以考虑使用 jimage/jmod 的方式发布二进制。。
    sadfQED2
        7
    sadfQED2  
       2020-05-25 23:03:18 +08:00 via Android   ❤️ 1
    我以前见过的,在客户服务器上面装个虚拟机,所有东西放到虚拟机里面,虚拟机开磁盘加密啥的
    Iamnotfish
        8
    Iamnotfish  
       2020-05-26 00:02:56 +08:00
    代码混淆吧加 LICENSE 验证吧,从技术层面讲能保护源码也就只能做这么多了
    legiorange
        9
    legiorange  
       2020-05-26 06:11:46 +08:00
    做过破解的人表示对于 java 来说代码混淆基本上会被破解。
    除了 2 楼说的,我只能补充一句对 jvm 下手,这才是真正解决问题的关键。
    在安全角度来说,你没有办法不让别人破解,你只能提高别人破解的成本,和溯源一样。
    wujieyuan
        10
    wujieyuan  
       2020-05-26 10:30:21 +08:00
    服务端的代码有什么好保密的, 无非就是 一些业务逻辑和数据库的增删改查, 没啥技术含量, 别人研究你混淆后的代码还不如找一个自己重新写
    nnnToTnnn
        11
    nnnToTnnn  
       2020-05-26 10:59:13 +08:00
    @lower 回复 2L, IDA Pro 表示打开你的 dll 和直接打开源码没有什么区别。 从技术上是无法保证源码泄露的。其次为什么要纠结源码? 你看这么多开源项目,别人一样盈利啊
    hantsy
        12
    hantsy  
       2020-05-26 11:46:52 +08:00
    用 Oracle GraalVM 编译成机器内码,提供 Docker Image,或者 Vagrant Box 。

    目前很多框架开始支持 Graal (主要是集成,简化开发人员操作),Quarkus 从一开始就是支持,Helidon,Micronaut 也添加了支持,Spring 还在开发中。
    cruii
        13
    cruii  
    OP
       2020-05-26 12:23:49 +08:00
    @wujieyuan 不好意思,技术含量还是有的。我既然来问了,也不会不考虑是否值得保护的问题
    cruii
        14
    cruii  
    OP
       2020-05-26 12:24:52 +08:00
    @nnnToTnnn 可是我们不是开源项目。我们是技术服务商。
    cruii
        15
    cruii  
    OP
       2020-05-26 12:25:47 +08:00
    @legiorange
    @lower
    谢谢二位的想法,我会研究一下,尽可能提高破解的成本
    cruii
        16
    cruii  
    OP
       2020-05-26 12:26:09 +08:00
    @guyeu 难顶,目前还停留在 Java8
    nnnToTnnn
        17
    nnnToTnnn  
       2020-05-26 13:12:34 +08:00
    @cruii 说实话你也太看的起你们公司的代码,能比 linux 的代码好吗? 能比 jdk 的代码优秀吗? 与其纠结在代码的保护,还不如在放在著作权,和专利的申请。

    就如同 Google 的那句话,从来不担心源码泄露,同样的代码,没有人做的比它好。
    nnnToTnnn
        18
    nnnToTnnn  
       2020-05-26 13:14:19 +08:00
    @nnnToTnnn 你花了百分之 20 的精力去把代码做保护的时候,还不如用同等的事件去提高产品的质量,做到别人所不能触碰到的高度,走出一条自己的道路,而不是仅仅停留在当下
    wanguorui123
        19
    wanguorui123  
       2020-05-26 18:45:38 +08:00 via iPhone
    各种混淆压缩工具
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1092 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:37 · PVG 02:37 · LAX 11:37 · JFK 14:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.