首页新闻找找看学习计划

关于序列号验证和产品授权

0
悬赏园豆:30 [已关闭问题]

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

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

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

问题补充: 参考: http://topic.csdn.net/u/20100609/15/58aa9986-8a94-4d69-902f-af9b7ed1d546.html
崔鹏飞的主页 崔鹏飞 | 初学一级 | 园豆:140
提问于:2010-06-10 16:14
< >
分享
其他回答(2)
0

一般情况它是可以随便装的,只是在使用的时候按照你那种方式来验证。

数据库存储可以不用以+1形式,可以存五条信息,每个信息有一个机器码。安装和删除的时候都需要发送机器码,对应的机器码删除对应的安装信息,每个序列号只能对应五条安装信息。

Astar | 园豆:40805 (高人七级) | 2010-06-10 16:27
谢谢! 不过这样似乎还是有问题。 用户卸载时可以检测到请求的url地址,他只需要将这个url中的机器码替换一下,就可以伪造其他机器的卸载信息了。
支持(0) 反对(0) 崔鹏飞 | 园豆:140 (初学一级) | 2010-06-10 16:53
@崔鹏飞:...本地程序写一个加密函数,混淆一下,传过去,服务器端再解密。
支持(0) 反对(0) Astar | 园豆:40805 (高人七级) | 2010-06-10 17:17
@Astar: 呵呵,其实现在就是这么做的,关键是加密过程是在客户端执行的,而且还是托管程序集......
支持(0) 反对(0) 崔鹏飞 | 园豆:140 (初学一级) | 2010-06-10 18:45
0

在Astar的基础上补充点:

你可以对机器码进行加密后在发送到服务端,服务端进行解密后在执行你操作。如果解密成功说明这个信息是合法的,否则就忽略吧。当然这个加密的程序需要好好的考虑下了。

loolda | 园豆:8 (初学一级) | 2010-06-10 17:00
现在差不多就是这么做的,安装包里面会附带一个dll,调用dll来加密,但是就怕人家反编译啊,混淆的作用似乎也不太明显......
支持(0) 反对(0) 崔鹏飞 | 园豆:140 (初学一级) | 2010-06-10 18:48
加密程序可以选择使用其他的编写,不用.NET。选择C++,delphi,之类的。而且按照你的情况,因为客户端不会注册很多,你大可以使用MD5加密,然后服务端将已经注册的几个机器码也MD5加密后进行比较。使用不可逆的加密方法在破解上还是有难度的。
支持(0) 反对(0) loolda | 园豆:8 (初学一级) | 2010-06-10 19:50
谢谢你的建议! 其实客户如果要搞恶意行为的话,并不需要对我的签名算法做逆操作,因为明文对他来说没用。 他只需要猜出密文是怎么做出来的,然后伪造卸载的密文就ok了。
支持(0) 反对(0) 崔鹏飞 | 园豆:140 (初学一级) | 2010-06-11 08:58
呵呵,哪里有这么好猜的,你取cpu的几位,硬盘的几位,内存的几位。打乱,加密。谁有这么厉害能猜到,否则真可以去猜彩票了。当然前提是加密程序不被破解。
支持(0) 反对(0) loolda | 园豆:8 (初学一级) | 2010-06-11 10:58
@ygcao: 我说猜到,就是指他反编译加密的程序集啊,呵呵
支持(0) 反对(0) 崔鹏飞 | 园豆:140 (初学一级) | 2010-06-11 12:51
0

没必要吧,最好不要在安装包上做文章,针对产品本身授权就可以了,每个授权号都记录服务器上,用服务器激活方式,激活一次即可;

winzheng | 园豆:8797 (大侠五级) | 2010-06-10 19:43
谢谢! 不过没太搞懂,授权具体怎么执行?
支持(0) 反对(0) 崔鹏飞 | 园豆:140 (初学一级) | 2010-06-11 09:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册