日期:2014-05-18  浏览次数:21119 次

关于序列号验证和产品授权
假设有一个程序,是以卖序列号的方式盈利的,每个序列号可以装在5台电脑上。
每次安装的时候,输入序列号之后,安装程序会发一个请求到某个服务器地址,请求中会包含序列号,
如果服务器验证序列号通过的话,就会给剩余可安装次数减一,并返回一个验证通过的标记,安装包程序接收到这个
标记之后才会继续安装,如果返回的是验证失败的标记的话,则安装包程序退出,安装失败。
相应的,在一台电脑上卸载这个程序的时候,安装包程序也会自动发一个请求到服务器,服务器验证通过的话会给可安装次数加一。

现在就面临一个问题,假设某个用户在卸载的时候用某个http监视工具获取到了请求地址,那么他就可以在装满五次之后执行
这个请求来冒充卸载的过程,这样这个序列号就又可以装在别的机子上了。

如何防止用户模拟卸载呢?

------解决方案--------------------

------解决方案--------------------

------解决方案--------------------
序列号跟cpuid或者硬盘id绑定存数据库,只允许绑定5次,如果需要更多的请联系客服

想通过监控软件卸载来确认使用次数是不大现实的
------解决方案--------------------
设计一个算法,带校验位的,这个校验位发送给服务器,服务器通过算法算出来这个值,如果值是重复的,说明就是伪造的请求。
------解决方案--------------------
试试https?它能应付重放攻击。

------解决方案--------------------
用机器号 MAC地址做密码 写到注册表里 不过人家一重做系统 就又可以继续用了

我也一直在寻找更好的办法 貌似PS dw什么的试用期过了 重做系统一样可以继续试用。。。

哎不知道怎么弄
------解决方案--------------------
let me see
------解决方案--------------------
learn!!!!!!!
------解决方案--------------------
Web安全实践

------解决方案--------------------
探讨
Web安全实践

------解决方案--------------------
就按照阿捷说的。。不放心就再弄个加密吧。。仿照不了了就
------解决方案--------------------
其实不需要搞这么复杂,软件重在后续的服务,别人想用你的软件,那么你的软件就有价值,如果真要做到完全的加密一般都是用加密狗,微软就很明智,微软自己做软件的我想不会连盗版加密之类的做不好.
------解决方案--------------------
你考虑到网络不通的情况了吗?如果不能上网,是不是就不允许安装和卸载?
------解决方案--------------------
不太好弄,没有万全的方法 帮顶


------解决方案--------------------
安装是对机器数据进行加密,加密后数据发送到服务器

卸载时,发送机器数据,判断是否是以安装的机器
------解决方案--------------------
探讨
引用:

安装是对机器数据进行加密,加密后数据发送到服务器

卸载时,发送机器数据,判断是否是以安装的机器

不过还是有可能被模拟卸载过程啊

------解决方案--------------------
我的想法

你先在服务器上给用户生成5个密钥,就是随机字符串吧
客户安装的时候,联到你服务器上,你服务器分配给他一个密钥,做个标记,这个字符串写到客户的机器上
客户卸载的时候,联上你的服务器,把这个字符串又发给你,你比较后就把这个字符串废弃了,又重新生成一个字符串作为密钥。

这样每次卸载的数据就不一样的,抓包也没用
------解决方案--------------------
但是他还是可以把抓到的某个包修改为正确的包??

他是可以知道一个正确的包,但是这个包有个密钥,你卸载的时候已经废弃了,他在那这个卸载又有什么用呢?你得到这个包,一检查,没有这个密码,什么事也不干,怎么会有问题呢?
------解决方案--------------------
他是可以构造一个假的卸载,那你的软件每次运行的时候联网看一下这个密钥是不是已经卸载了也行
------解决方案--------------------
没有绝对的安全。只能尽量减少损失。

不要花太多的精力在这上面
------解决方案--------------------
或者还有一个方法,为了实现卸载的时候唯一,你的密钥怕别人识别,那你的算法也动态生成吧,就是考虑卸载的时候需要到你服务器上下载一个卸载工具,这个卸载工具是动态变化的,每次不同,还可以和密钥结合,这样每次发送到数据包就可以完全不同了
------解决方案--------------------
简单的,加密请求,卸载时,先请求服务端给一个token 这个token由用户的序列号和日期组成,并加一些随机的验证,一份留底在服务器里。
当客户确定卸载,发回这个token后,就把留底在服务端的那份token给灭了。 给它+1.
要是这个token被用第二次的时候,服务端又没有留底,token里的日期又不对,