我在一家销售 受保护的 Java软件的公司工作。
我不会评论用户身份验证方案,但可以评论在线许可证检查。
甚至不要让它“工作两天”:这就是我盗版大多数软件的方式…虚拟机设置为“及时返回”并在外部进行防火墙保护,以使其不再“回拨”(即:仅允许它必须与服务器联系一次,以获取试用密钥),并且总是从重新安装软件和宾果游戏的那一刻开始重新映像,因此30天的试用期(或两天的试用期)已成为终身试用。我为什么要这样做?当然,要学习如何更好地保护我们的应用程序;)(好吧,我也只是为了好玩而已)
我们在商用Java软件中所做的是在每次启动时都要检查许可证。
我们有数百名客户,却从未有人对此bit之以鼻。不止一次。我们在每次运行时都会生成一个唯一的类,该类在每次运行时都不同,这取决于客户端启动时唯一的事物以及服务器端一次生成的事物。
除了在每次启动时让应用与您的服务器联系之外,它还是一种收集分析数据的好方法:下载到试用比率,每次试用的平均启动次数等。而且,除了在每个网页上都具有Urchin
/ Google Javascript跟踪器外,它也不再令人讨厌真讨厌
只需向人们表明您的软件可以执行在线许可证检查即可:我们没有打开或关闭一个巨大的复选框,其中说:“在线许可证验证:确定/失败”。就是这样。人们知道有支票。如果他们不喜欢它,他们会使用劣质的竞争对手产品,并且生活会很好。
人们习惯于生活在有线世界中。
由于互联网连接断开,您多久 不能 访问GMail?由于互联网连接断开,您多久 不能 访问FaceBook或SO?
重点是:取决于服务器端进行尽可能多的计算:
- 许可证检查
- 保存用户首选项
- 备份您的应用程序生成的数据
- 等等
没有人会抱怨。您将有0.1%的用户抱怨,并且无论如何您都不希望这些用户:他们是会抱怨其他事情并在线发布有关您的应用的负面反馈的人。您最好让他们根本不使用软件,并抱怨它需要始终在线的互联网连接(99.99%的目标人口,因此他们不会在意该抱怨),而不是实际使用它们该应用程序,并抱怨与您的应用程序相关的其他事情。
关于反编译,通常可以将.class反编译为.java,除非您使用的代码流混淆器生成有效的字节码,但无法从.java文件生成(因此无法获取有效的.java文件)
)。
字符串混淆器有助于更难弄清。
源代码混淆器使查找起来更加困难。
像免费的Proguard这样的字节码混淆器使查明它变得更加困难(并且产生更快的代码,尤其是在移动世界中引人注意)。
如果仅运送Windows / Linux,则可以使用Java到本机的转换器,例如Excelsior
Jet(这不是免费的,对于启动公司来说有点贵,但是它会生成本机代码,您根本 无法从中 找到.java文件)。
有趣的是,您会看到有人试图弄乱您的在线服务器…在大约30个Beta测试人员中,我们已经有人(我们知道该试验的一部分)试图盗版我们的在线服务器。



