- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我打算制作一些在互联网上销售的软件。我以前只创建过开源,所以我真的不知道如何保护它不被破解并以warez的形式分发。记住我知道两个程序既没有破解也没有真正有用,我决定唯一或多或少可靠的方法可能如下所示:
您对此有何看法?这似乎有点限制,但我最好先减少销售量,然后最终免费下载我宝贵的 killer 级应用程序。无论如何,首先我需要一些基本的理论/教程/指南,以确保用户在付费后只使用某个 Java 应用程序,所以请提出一些建议。
谢谢
最佳答案
我在一家销售 protected Java 软件的公司工作。
我不会评论用户认证的方案,但我可以评论在线许可证检查。
不要让它甚至“工作两天”:这就是我盗版大多数软件的方式......虚拟机设置“及时”并在外部设置防火墙,使其不再“打电话回家”(即:只允许它与服务器联系一次,以获取试用 key ),始终从新安装软件和宾果游戏的位置重新镜像,30 天试用(或两天试用)已成为终身试用。我为什么要这样做?当然是学习如何更好地保护我们的应用程序;)(好吧,好吧,我这样做也是为了好玩)
我们在商业 Java 软件中所做的是在每次启动时检查许可证。
我们有数百名客户,但从来没有人提示过。不止一次。我们在每次运行时生成一个唯一的类,每次运行时都会有所不同,这既取决于客户端启动时的独特之处,也取决于服务器端生成的东西。
除了让应用在每次启动时与您的服务器联系之外,这也是收集分析数据的好方法:下载与试用的比率、每次试用的 nb 平均启动等。而且它并不比拥有 Urchin/Google JavaScript 跟踪器更糟糕在每个网页上都是讨厌的。
只需向人们明确说明您的软件执行在线许可证检查:我们有一个巨大的复选框打开或关闭,上面写着:“在线许可证验证:OK/Failed”。就是这样。人们知道有一张支票。如果他们不喜欢它,他们就会去使用劣质的竞争对手产品,生活是美好的。
人们习惯于生活在有线世界中。
由于 Internet 连接中断,您不多久访问一次 GMail?您多久无法访问 Facebook 或 SO,因为您的 Internet 连接中断?
重点是:尽可能多地依赖服务器端进行计算:
没有人会提示。您将有 0.1% 的用户提示,无论如何您不希望这些用户:他们会提示其他事情并在网上发布有关您的应用程序的负面反馈。您最好让他们根本不使用您的软件并提示它需要始终在线的 Internet 连接(这是您的目标人群的 99.99%,因此他们不会关心提示),而不是让他们实际使用应用程序,并提示与您的应用程序相关的其他事情。
关于反编译,.class 通常可以反编译回 .java,除非您使用的代码流混淆器可以生成有效的字节码,但无法从 .java 文件生成(因此无法取回有效的字节码) .java 文件)。
字符串混淆器有助于使其更难弄清楚。
源代码混淆器有助于使其更难弄清楚。
像免费的 Proguard 这样的字节码混淆器使得更难(并且生成更快的代码,在移动世界中尤其明显)弄清楚。
如果您只发布 Windows/Linux,那么您可以使用 Java 到 native 的转换器,例如 Excelsior Jet(不是免费的,而且对初创公司来说有点贵,但它会生成您根本无法使用的 native 代码 找到 .java 文件)。
作为一个有趣的旁注,您会看到有人试图弄乱您的在线服务器...在大约 30 名 Beta 测试人员中,我们已经有人(我们知道这是试用的一部分)试图盗版我们的在线服务器。
关于java - 制作商业 Java 软件 (DRM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2466424/
前言 在进行Maven开发时,往往需要下载大量jar包,而由于网络不稳定等其他因素可能导致jar未下载完毕,然后保留了lastUpdated文件,导致无法更新失效的jar包。 本文分享 bat脚本,自
按字母顺序排序并不是我们花太多时间担心的事情。我们在很小的时候就学习了字母表,现在我们知道它(拉丁文)以 A 开头,然后是 B,然后是 C 等等,一直到 Z。 但是这个订单究竟存储在计算机系统中的什么
我尝试使用可分离为 2 个一维向量的二维矩阵来证明二维傅里叶变换的信号属性的可分离性。地点: f(x,y) = f(x)*f(y) 那么 F(u,v) = F(u)*F(v) 使用以下代码: % Se
我需要为几个小型sqlite数据库编写文档。想描述数据的使用方式,包括表和行说明以及示例数据。 是否可以使用MySQL Workbench?如果没有其他选择,或者我可以使用任何模板? TIA! 最佳答
我正在尝试使用旧版本(例如:1.4.5)安装 memcached,但我不知道该怎么做。 brew install memcached安装最新的。 我也试过 brew install memecache
背景 多年来,我一直使用自己的类似贝叶斯方法,根据大型且不断更新的训练数据集对来自外部来源的新项目进行分类。 每个项目都有三种类型的分类: 30 个类别,其中每个项目必须属于一个类别,且最多属于两个类
嗨,我需要确定 4 个数字是否相等。数字是 size(A,1)、size(B,1)、size(C,1) 和 size(D,1),其中,例如A = [1 2; 3 4], B=[1 2 3, 4 5 6
Wikipedia 中的文章似乎太冗长了。 我将框架理解为一组精心设计的库和工具。 Qt 框架为跨平台 GUI 提供了一组库/工具。 cocoa 框架为 Mac 做了同样的事情。 软件框架的实际定义是
我们的客户最近发现了这个网站: http://mydeco.com/3d-planner/ 它有一个非常非常奇特且组合良好的 3d CAD Web 应用程序,似乎是使用 jQuery 编写的,而不是
我们正在寻找一种独立的(非 cms)日历解决方案来显示在网络上。它可以是开源的或付费服务。 我们主要是在寻找一种在 Web 上显示日历的方法,其中包含事件发生的时间和事件的名称。如果它可以按周、月、年
我想知道与软件相关的“质量保证”和“质量科学”之间的区别。 我在Google上进行了研究,但未找到有关“质量科学”的任何信息。 最佳答案 Based on the link you have prov
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我有一个由 2 个方程和 2 个未知数组成的系统,我想使用 MATLAB 求解,但不知道如何编程。我得到了一些有关 Gamma 分布的信息(平均值为 1.86,90% 的间隔介于 1.61 和 2.1
给定一个矩阵,其中 1 是当前子集 test = 0 0 0 0 0 0 0 0 0 0 0 0
我在组合 Matlab“数据”变量的重复元素时遇到问题。我可以使用 unique 和 sort 轻松组合这些值。 [sorted,idx] = sort(data); [~,ij] = unique(
我在做的问题中有这么一段代码,如下图。定义部分只是为了向您展示数组的大小。下面我粘贴了矢量化版本 - 它慢了 2 倍以上。为什么会这样?我知道如果矢量化需要大的临时变量,我就会发生,但(看起来)这里不
我有一个 3D 矩阵,我想将它的每个 2D 分量存储在另一个 2D 矩阵的行中,该 2D 矩阵有许多行作为 3D 矩阵的第 3 维。 我该怎么做? 最佳答案 与 permute & reshape -
如果计算机能够使用纯 JavaScript(Google V8)、C++(Windows、Mac OS 和 Linux)运行程序/软件而没有任何性能问题,是否有任何好的方法可以通过要求尽可能少尽可能从
我的团队的任务是将用于播放媒体文件的全屏、信息亭式应用程序从 Windows 迁移到嵌入式 ARM Linux(瘦客户端)。我们需要在 sd/1080p 中支持 mpeg-2 播放以及 HTML、SW
我们有数以千计的具有白色或黑色或渐变背景的产品图片。我们正在寻找可以去除图片背景的软件或服务。我们需要一款能够很好地完成这项工作的智能软件。 最佳答案 在 photoshop 中,您可以记录 Acti
我是一名优秀的程序员,十分优秀!