在Java应用程序中实现许可证实施的最佳方法是什么,以便在用户不购买许可证的情况下无法"分发"和使用应用程序?
看看truelicense,这是一个开源框架.如果你想自己创建一些文档来解释这些概念,你也可以通过查看代码来获得一些好的想法.
编辑: 值得一提的是,它不是一个复制保护方案
我建议你甚至不要尝试添加复制保护.你会惹恼别人.如果人们喜欢您的产品,您更有可能获得销售.小偷和对待小偷这样的顾客是不会有帮助的.(除非产品真的很糟糕,否则你必须阻止人们在购买之前尝试它.)
您可能希望发送许可证密钥,其唯一目的是满足那些想要获得收入的用户.只需在某处添加状态即可显示是否已付款.状态需要相当明显,以便很明显发生了一些事情(我之前工作的产品是软盘上的两张光盘 - 一半的支持电话是因为安装程序没有要求第二个[win32s]盘).
我所知道的许可计划并不容易破解.我不会详细说明,但作为一个例子,在Java情况下,如果它是用Java完成的,那么它可以被反编译(就像C++或任何编译语言一样,但Java比C++更容易).如果它是本机完成的,那么您需要本机方法,并且DLL/so可以替换为允许访问的DLL.
对于C/C++示例,我知道有人反编译CL(Microsoft编译器)以确定它们如何命名mangling.他们所拥有的只是二进制文件,他们能够用反汇编程序和大量时间来完成它.
不要为这类事情烦恼,它会惹恼诚实的用户,并适度减慢那些想要复制它的人. 看看World of Goo(伟大的游戏!)和他们对DRM的看法(这与你所说的相似).
World of Goo的开发人员发现,他们的产品在90%的时间内被盗版(他们解释了这个数字可能是不准确的),与另一款DRM附带的游戏相比,92%的时间是盗版.
如果您正在谈论合法企业,那么他们通常希望获得许可证合规性,因此确保不进行复制是一种浪费.如果你是在谈论那些不会开始购买产品的人,或者只是不想为此付费,那么你真的不会改变非法获取软件的人数,你只会放慢速度.得到它的第一个人 - 之后猫从袋子里出来了.