好的我想使用在线激活来保护我的软件。用户需要互联网连接,并且需要验证他们是否拥有活动帐户/许可证才能继续使用该软件。因此,我的软件会向我的网站发送一些凭据,我将验证并发回 SOMETHING 以允许程序运行。
这是问题所在。如何防止有人欺骗我发回的简单的SOMETHING,完全绕过我的验证?
两个例子:
我记得在某个地方看到一个允许您监控互联网流量并在流量返回软件之前对其进行修改的程序。我不记得这个名字了。实际上,它是在应用程序看到它之前出现并进入计算机的中间人。例如,您的浏览器发送HTTP请求,该程序可以拦截它并修改输出数据包,或者反之,某些HTTP网页返回到浏览器,并且该程序可以拦截并更改传入的数据包,然后将其传递给浏览器。
可以更改HOSTS文件以将流量重定向到任何地址。因此,如果有人知道我的验证将返回文本“ok_to_use”或“not_ok_to_use”,并且他们知道我用来验证的网址,那么他们可以使用HOSTS文件绕过我的网站的dns查找,将其重定向到他们的网站自己的网站,并始终返回字符串“ok_to_use”
第二个例子说明了问题。我想我需要以某种方式返回静态字符串以外的东西。显然我可以对字符串进行加密,但是如果那个“OK_to_use”等于“7hgx3a”,那么它将不会花费很长时间,如果这是相同的加密字符串总是被发回。所以我需要发送一些随时都有变化的东西。
EDIT /
对评论/回复说,在应用程序中始终只有最终的if / then检查标记许可证是否有效: 是的,这是真的。我在原帖的最后一段暗示了这样的事情。也许让web php发回一些关键功能,这样即使if / then被跳过,如果没有执行web检查,那么某些功能的算法将无法下载,应用程序将无法正常工作正确。任何人都有这个徒劳的想法吗?
答案 0 :(得分:3)
虽然我基本同意Gavin,但这并不是让你的软件容易被最愚蠢的黑客和黑客攻击的理由!
嗯,你有很多选择来修剪大部分脚本小子,可能还有来自威胁你软件许可机制的人群中的客户员工。
我按照他们想到的顺序列出了其中一些:
您可以为客户端 - 服务器连接使用双向SSL,它只需要很少的编码开销,但您可以确保已经销售了已经与许可服务器联系的软件版本。您可以通过正确解密已发送的许可查询的公钥来识别它。
您可以发送比OK_TO_USE更复杂的标记,也许是每次询问时随机返回数字的数学函数的值。然后可以编写客户端软件,以便识别该数字是否由该特定函数产生。(这可能比单个整数更复杂!)
至少使用加密!或注册证书,以便您的客户可以验证它是否已联系到正确的服务器。
及时更新您的软件并不时更改许可机制!
最后,没有用于软件许可证的防弹背心!你会很快或很晚被破解,但试着卖得更多并在以后被黑客攻击。 :d
答案 1 :(得分:1)
我个人不会打扰 - 专业软件产品使用了大量不同的复制保护系统,而且每一个都被破解了。
无论您的复制保护系统有多复杂,在二进制文件中的某个时刻,您将检查许可证是否有效,只需修改二进制文件的这一部分即可返回true。
只需添加一个非常简单的激活系统来阻止人们将其传递给朋友,然后花时间添加新功能以销售更多副本,而不是浪费时间试图阻止专业黑客复制您的软件。
如果他们愿意 - 他们会! -
答案 2 :(得分:0)
将消息从服务器发送到客户端时,可以使用公钥/私钥保护。这些消息无法更改,您可以确保响应来自服务器。
您可以查看已经提供您所需内容的LicenseSpot。它有: