2010-08-14 48 views
4

我有一段我想写在互联网上的共享软件。我有一个序列号类型的东西设置,但仍然有很多密钥共享:(我想添加一个系统,一旦用户输入序列,它会与我的服务器进行检查以确保它是有效的。简单是关键。如何编写一个超级简单的软件激活系统?

- 客户端使用PHP式的东西“www.mywebsite.com?key=3434343”

发送MD5序列号,以网页-php脚本采用MD5和检查它反对简单的数据库。如果数据库中存在MD5密钥,则会增加与该密钥关联的计数器,并生成显示1的网页。如果数据库中没有条目,则该脚本生成显示为0的网页。

- 客户端读取网页和检查0或1并据此采取行动。

我将手动输入数据库中的有效密钥(md5'd),并监视活动密钥是否过多激活。我不知道什么关于PHP,所以我不知道这是否会工作。这看起来够好吗?有没有公​​然的安全漏洞?我将使用共享主机。有没有更好的办法?谢谢

+2

你想重塑这个轮子的任何特殊原因?只是好奇。 – allnightgrocery 2010-08-14 01:21:09

+2

为什么不花一些钱购买Humble Indie Bundle(没有可变支付费用),并且相信用户支付软件的费用是不错的,没有粘性的DRM? – 2010-08-14 01:22:27

+1

@Inkspeak:你有选择提供OP吗? – 2010-08-14 01:23:09

回答

4

你的方案中实际上有几个公然的安全漏洞。

第一个是用户可以将他们的本地互联网流量重定向到一个假装成你的网站,但总是显示一个“1”。

第二个是每个键只对X“激活”有效,但是如果该消息在传输中丢失,太糟糕了 - 计数器仍然递增。你需要一些方法来验证一切正常;查看该页面是不够的。

第三是黑客程序认为它从你的网站获得“1”将是世界上最简单的事情。

请勿实施您自己的版权保护。它只会惹恼合法用户,甚至不会放慢真正的盗版。要么使用先进的商业系统,要么试图打击导致用户窃取你的程序的动机。这可能是因为你的价格太高,或者他们觉得你不尊重他们。人们出于某种原因做事。

+0

我认为这足以阻止在办公室环境中随意分享密钥。我不会担心复杂的黑客。知道这一点,还有什么不对吗?我买了犰狳,但那不会激活。 – max111 2010-08-14 01:31:28

+0

@ max111:如果你想停止休闲密钥分享,为什么不让用户下载一个锁定到他们的用户帐户的“完整版”二进制文件?这并不涉及用户在服务器关闭的情况下无法重新安装程序。最终会是这样。你准备好维护一个稳定的Web服务器来运行这个软件吗? – Borealid 2010-08-14 01:34:23

3

你缺乏关键的重要的理解......关键是在MD5的形式,这将同时包含字母和数字字符,认为这是一个例子:

 
3c102d6b53a7a8723e694f1417c2abfe 

你打算怎么生成密钥?你在什么基础上从生成密钥

我也看到在这个关键是该网站的使用参数像这样传:

 
www.mywebsite.com?key=3434343 

这将需要一段时间的黑客找到一把钥匙......有什么用处理器速度和密钥生成的问世......它会很快被破解,更多的是,你将暴露你的脚本....不要低估黑客/饼干可以做什么来破坏脚本......这是你在帖子中没有提到的东西,没有任何安全防范!

此外,没有提到使用安全证书进行身份验证,而不是吓跑最终用户,甚至更糟糕的是,防病毒扫描程序可能会将该站点标记为可疑,因此最终用户被锁定在应用程序之外.... 。

底线:不要试图保障计划这样的,因为它们是虚假的经济,无论哪种方式,这将是相当于飞蛾的吸引到火焰,当应用程序“被保护”,黑客/饼干将尝试绕过它,不管你的想法是什么..你会开玩笑自己思考和欺骗自己,你是一个出色的程序员,并且你的梦想计划是万无一失的 - 不要 ...远离这些类型的计划......

1

我会回应在评论中提出的关于为什么你应该考虑不这样做的观点,或者至少不要自己去做。但是如果你真的想要(和/或为了教育目的),对于这样的系统,我会选择非对称加密。

基本上,这个想法是,你生成一个公钥/私钥对,在你的应用程序中嵌入公钥,并将私钥保存在你的服务器上。为了获得注册,您的应用程序的副本将发送序列号到您的服务器。服务器上的PHP脚本将检查其数据库中的该序列号,确定注册是否有效,如果是,则服务器发回用私钥加密的序列号。然后,程序可以使用公钥解密收到的消息,将解密后的版本与序列号进行比较,如果匹配,则可以自行激活。当然,这不会阻止(半)确定的黑客,但它确实消除了解决您在问题中提供的方案的最简单方法,即将请求重定向到始终返回1的网站。

如果您担心序列号通过互联网未加密,您可以在程序将其发送到服务器之前使用公钥加密序列号。当服务器响应时,不是发送加密的序列号,而是发送(1)服务器上生成的随机数和(2)随机数和序列号的加密散列。或者使用HTTPS,它做类似的事情。但是,如果你试图防止有人拦截程序和服务器之间通信的方式和动机,那么你就不仅需要这种简单的方案,因为这个人几乎可以肯定在他/她的处置上有更复杂的工具。在这种情况下,您需要一个有信誉的商业DRM系统才能有最好的机会来保护您的程序。在那个时候,我会问自己是否真的值得。