软件时间限制的原理

          这类软件一般都有时间段的限制,例如试用30天等。当过了共享软件的试用期后,就不予运行。只有向软件作者付费注册之后才能得到一个无时间限制的注册版本。这种保护的实现方式大致如下。

        首先在安装软件的时候由安装程序取得当前系统日期,或者主程序在第一次运行的时候获得系统日期,并且将其记录在系统中的某个地方;可能记录在注册表的某个不显眼的位置,也可能记录在某个文件或扇区中。这个时间统称为软件的安装日期。

        程序在每次运行的时候都要取得当前系统日期,且将其与记录下来的那个安装日期进行比较,当其差值超过允许的天数(比如30天)时就停止运行。

        可见,这种日期限制的机理很简单。但是在实现的时候,如果对各种情况处理得不够周全,就很容易被绕过,比如在过期之后简单地把机器时间调回去,软件又可以正常使用了。

        如果考虑得比较周全,软件最少要保存两个时间值,一个就是上面所说的安装时间,这个时间可由安装程序在安装软件的时候记录,也可以在软件第一次运行的时候记录(即软件发现该值不存在时就将当前日期作为其值记录下来)。为了增加解密难度,最好把这个时间在不同的地方多存放几份,否则解密者可以通过RegMon、FileMon等监视工具轻易地找到存放该值的地方,然后删除该键值,这样又可以正常使用软件了。

        另外一个时间值就是软件最近一次运行的日期,这是防止用户将机器日期改回去而设的。软件每次退出的时候都要将该日期取出来与当前日期相比较,如果当前日期大于该日期,则用当前日期替换掉该值,否则保持该值不变。同时,软件每次启动的时候要把该值读出来与当前日期进行比较,如果该值大于当前系统日期,则说明用户把机器时间改回去了,可以拒绝运行。

        取得时间的API函数一般有GetSystemTime、GetLocalTime和GetFileTime。软件作者可能不直接使用上面的函数来获得系统时间,比如采用高级语言中封装好的类来操作系统时间等。这些封装好的类实际上也是调用上面的函数。解密者在采用动态跟踪方法破解这种日期限制时,最常用的断点也是这个。

        还用一种比较方便地获得当前系统日期的方法,就是读取需要频繁修改的系统文件(比如Windows注册表文件user.dat、system.dat等)的最后修改日期,利用FileTimeToSystemTime()将其转换为系统日期格式,从而得到当前系统日期。

        需要指出的是,采用日期限制的软件必须能防RegMon、FileMon之类的监视软件,否则很容易被找到日期的存放位置。

  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值