当前位置: 首页 > 面试题库 >

制作商业Java软件(DRM)

张嘉
2023-03-14
问题内容

我打算制作一些可以通过互联网出售的软件。我以前只是创建开放源代码,所以我真的不知道如何保护它免受warez的破坏和分发。考虑到我知道两个程序都没有被破解或没有真正的用处,所以我决定唯一或多或少可靠的方法可能是这样的:

  1. 连接到服务器并提供许可信息和某种硬件摘要信息
  2. 如果一切正常,服务器将返回绑定到该特定PC的程序的某些关键缺失部分,并规定2天的使用限制
  3. 关键内容不会保存到硬盘驱动器,因此每次程序启动时都会下载该文件,如果程序运行超过2天,则会再次下载数据
  4. 如果从不同的计算机使用相同的信息,请暂停客户帐户

你怎么看待这件事?似乎有些限制,但是我最好先减少销量,然后再免费下载我宝贵的杀手级应用。无论如何,首先我需要一些有关如何确保用户仅在购买了某个Java应用程序后才能使用它的基本理论/教程/指南,因此请提出一些建议。

谢谢


问题答案:

我在一家销售 受保护的 Java软件的公司工作。

我不会评论用户身份验证方案,但可以评论在线许可证检查。

甚至不要让它“工作两天”:这就是我盗版大多数软件的方式…虚拟机设置为“及时返回”并在外部进行防火墙保护,以使其不再“回拨”(即:仅允许它必须与服务器联系一次,以获取试用密钥),并且总是从重新安装软件和宾果游戏的那一刻开始重新映像,因此30天的试用期(或两天的试用期)已成为终身试用。我为什么要这样做?当然,要学习如何更好地保护我们的应用程序;)(好吧,我也只是为了好玩而已)

我们在商用Java软件中所做的是在每次启动时都要检查许可证。

我们有数百名客户,却从未有人对此bit之以鼻。不止一次。我们在每次运行时都会生成一个唯一的类,该类在每次运行时都不同,这取决于客户端启动时唯一的事物以及服务器端一次生成的事物。

除了在每次启动时让应用与您的服务器联系之外,它还是一种收集分析数据的好方法:下载到试用比率,每次试用的平均启动次数等。而且,除了在每个网页上都具有Urchin
/ Google JavaScript跟踪器外,它也不再令人讨厌真讨厌

只需向人们表明您的软件可以执行在线许可证检查即可:我们没有打开或关闭一个巨大的复选框,其中说:“在线许可证验证:确定/失败”。就是这样。人们知道有支票。如果他们不喜欢它,他们会使用劣质的竞争对手产品,并且生活会很好。

人们习惯于生活在有线世界中。

由于互联网连接断开,您多久 不能 访问GMail?由于互联网连接断开,您多久 不能 访问FaceBook或SO?

重点是:取决于服务器端进行尽可能多的计算:

  • 许可证检查
  • 保存用户首选项
  • 备份您的应用程序生成的数据
  • 等等

没有人会抱怨。您将有0.1%的用户抱怨,并且无论如何您都不希望这些用户:他们是会抱怨其他事情并在线发布有关您的应用的负面反馈的人。您最好让他们根本不使用软件,并抱怨它需要始终在线的互联网连接(99.99%的目标人口,因此他们不会在意该抱怨),而不是实际使用它们该应用程序,并抱怨与您的应用程序相关的其他事情。

关于反编译,通常可以将.cl​​ass反编译为.java,除非您使用的代码流混淆器生成有效的字节码,但无法从.java文件生成(因此无法获取有效的.java文件)
)。

字符串混淆器有助于更难弄清。

源代码混淆器使查找起来更加困难。

像免费的Proguard这样的字节码混淆器使查明它变得更加困难(并且产生更快的代码,尤其是在移动世界中引人注意)。

如果仅运送Windows / Linux,则可以使用Java到本机的转换器,例如Excelsior
Jet(这不是免费的,对于启动公司来说有点贵,但是它会生成本机代码,您根本 无法从中 找到.java文件)。

有趣的是,您会看到有人试图弄乱您的在线服务器…在大约30个Beta测试人员中,我们已经有人(我们知道该试验的一部分)试图盗版我们的在线服务器。



 类似资料:
  • 我想得到10产品从一个类别在WooCommerce 例如,对于获取帖子类别的最新帖子,我使用以下代码 我想要一个代码,像这样的商业产品

  • 商业化的版本控制 概述 基本规则 举例 商业化的版本控制 更新时间:2018-03-27 13:30:57 概述 在对服务、移动插件、Web插件进行商业化的同时,服务、移动插件、Web插件本身存在版本,开发者通常也会不定期发布新版,进行功能升级或者bug fix,而且对于版本是否开放给购买者使用也会有自己的判断和选择,因此对于已经商业化的服务、移动插件、Web插件,Link Develop提供对于

  • 2. 作业控制 2.1. Session与进程组 在第 1 节 “信号的基本概念”中我说过“Shell可以同时运行一个前台进程和任意多个后台进程”其实是不全面的,现在我们来研究更复杂的情况。事实上,Shell分前后台来控制的不是进程而是作业(Job)或者进程组(Process Group)。一个前台作业可以由多个进程组成,一个后台作业也可以由多个进程组成,Shell可以同时运行一个前台作业和任意多

  • 问题内容: 在Java中,为什么每个类都必须声明其所属的包。我的意思是,已经使用文件系统的文件夹结构描述/强制使用了软件包hierachy。在我看来,该行: 作为每个类的第一行,都是多余的信息。但我很确定有充分的理由让它存在。 问题答案: 我的意思是,已经使用文件系统的文件夹结构描述/强制使用了软件包hierachy。 不必要。虽然以这种方式组织代码当然是一个好主意,但这不是必需的。还请记住,源代

  • #面经# 1.分布式磁盘kv的读写性能如何与延迟 2.分布式磁盘kv原理 3.LSM-tree 4.冷热库分离与路由 5.项目中数据在Redis中的存储结构 6.mq的防重消费 7.RedisCluster-gossip,failover,sharding,replication 8.sharding内读从还是读主?默认读什么? 9.Codis集群方案 10.TwemProxy+LVS+agent

  • 1.自我介绍 2.跨专业就业的契机 3.学习历程 4.为什么不读研 5.聊实习项目 6.分工合作 7.遇到困难的地方 8.项目的使用场景 9.部门职能 10.分流意向 11.反问作息时间 12.新人培养机制 13.什么时候来提前实习 许愿oc