假设有一个程序,是以卖序列号的方式盈利的,每个序列号可以装在5台电脑上。
每次安装的时候,输入序列号之后,安装程序会发一个请求到某个服务器地址,请求中会包含序列号,
如果服务器验证序列号通过的话,就会给剩余可安装次数减一,并返回一个验证通过的标记,安装包程序接收到这个
标记之后才会继续安装,如果返回的是验证失败的标记的话,则安装包程序退出,安装失败。
相应的,在一台电脑上卸载这个程序的时候,安装包程序也会自动发一个请求到服务器,服务器验证通过的话会给可安装次数加一。现在就面临一个问题,假设某个用户在卸载的时候用某个http监视工具获取到了请求地址,那么他就可以在装满五次之后执行
这个请求来冒充卸载的过程,这样这个序列号就又可以装在别的机子上了。如何防止用户模拟卸载呢?

解决方案 »

  1.   

    序列号跟cpuid或者硬盘id绑定存数据库,只允许绑定5次,如果需要更多的请联系客服想通过监控软件卸载来确认使用次数是不大现实的
      

  2.   

    试试https?它能应付重放攻击。
      

  3.   

    用机器号 MAC地址做密码 写到注册表里 不过人家一重做系统 就又可以继续用了我也一直在寻找更好的办法 貌似PS dw什么的试用期过了 重做系统一样可以继续试用哎不知道怎么弄 
      

  4.   

    Web安全实践 
      

  5.   

    Thank youThank youThank you
      

  6.   


    (机器码: 12345 安装随机码:123) ->加密方式1:*****卸载:
    卸载程序判定卸载成功后:
    (机器码: 12345 安装随机码:123) ->加密方式2:***** 
      

  7.   


    不好意思,没太看明白您的回帖。我之前是这个意思:
    加密的过程是安装包调用托管程序集进行的,即使混淆过还是可以被人看出个眉目。
    假设我有一个序列号已经在五台机子上装过了,想要模拟卸载其中一台,我只需要反编译一下安装包调用的程序集,获取里面请求的url地址和加密方式,就可以模拟一个卸载过程了。
    然后我的这个序列号就可以在第六台机子上用了。
      

  8.   

    用某个http监视工具获取到了请求地址,地址加密码,验证
      

  9.   

    不好意思我刚才没说清楚。
    我的意思不是说客户可以重复利用抓到的包,而是可以伪造包。
    假设我有一个序列号,我已经装过限定次数了,现在我卸载其中一个,截获url,大概搞清楚url的构造方式,然后根据这一个截获到的包再伪造四个包来假冒另外四台机器的卸载过程。
    如果这个假冒过程成功了,客户现在就又有5次安装权限了,他可以再装五台,这么一来,一个序列号就装了九台(除去最开始做实验牺牲的一台)。
      

  10.   

    简单的,加密请求,卸载时,先请求服务端给一个token 这个token由用户的序列号和日期组成,并加一些随机的验证,一份留底在服务器里。
    当客户确定卸载,发回这个token后,就把留底在服务端的那份token给灭了。 给它+1.
    要是这个token被用第二次的时候,服务端又没有留底,token里的日期又不对,
    那就拒绝请求。
      

  11.   

    www.chenjiliang.com下有一个比较好的方法
    http://www.chenjiliang.com/Article/View.aspx?ArticleID=19108
      

  12.   

    怕的不是这个token被二次利用,现在已经处理过这一点了。
    怕的是客户构造出一个冒牌的token来。
      

  13.   

    - -!
    不知道LZ做的是啥,我只知道貌似目前国内没有用付费软件的习惯...
    LZ倒是可以通过提高装几率,增加附加值...例如TX的QQ...唔...