想写一个有试用期的程序,不知道用什么方法可以避免用修改系统时间来跳过试用期检验

例如:试用期一个月,首次使用时记录时间,下次使用时验证,但是修改系统时间,就没用了,不知道有什么方法可以避免,求解。其实我是想找一个不能更改的时间。和加密啊之类的没有什么... 例如:试用期一个月,首次使用时记录时间,下次使用时验证,但是修改系统时间,就没用了,不知道有什么方法可以避免,求解。
其实我是想找一个不能更改的时间。和加密啊之类的没有什么关系,谢谢!
展开
 我来答
sniper2003
2013-07-31 · TA获得超过1882个赞
知道小有建树答主
回答量:775
采纳率:100%
帮助的人:677万
展开全部

之前想了一个,不过仍然有漏洞。如果有人能知道你设置的方式,就仍然可以破解。在客户端的程序永远都不是最安全的。


我的构思如下:

记录两个时间:

var d1;//该参数表示软件安装的日期
var d2;//该参数表示最后一次更新后的当前日期,并默认同d1变量相同
var running_days;
//当前日期-d1不得大于指定天数
if(Current_Date - d1 > 30)
Msg("已超过试用期");
//return;
//当前日期不得小于d1 和 d2
if(Current_Date < d1 or Current_Date < d2)
Msg("日期错误");
//return;
//如果当前日期与d2不同;则重新赋值
if(Current_Date.Day ≠ d2.Day)
{
d2 = Current_Date;
running_days = running_days + Current_Date.Day - d2.Day;
if(running_days > 30){
Msg("已超过试用期");
//return;
}
}


细节处理:

1、要对保存的日期进行加密存储;最好是用当前硬盘的序列号+日期的刻度值组合作为加密因子;

2、程序在每次打开、运行周期和关闭时都需要更新d2参数和running_days参数;以写入注册表为佳(加密后);

追问
谢谢你的回复,但是你的方法我觉得还是有点漏洞,因为使用者只要记录最后一次操作的时间,下次使用时把系统时间改的稍微比d2大几秒或者等于d2,就可以跳过验证了。虽然说这样d2会无限接近试用期的终点,但是任然算是个bug。我的要求有点变态,但还是希望能找到个完美的方法,谢谢!
追答
其实在客户端,做试用期限制,就永远都离不开系统时间。但是系统时间总是可以被修改的,所以看看现在微软的软件和一些软件厂商都用注册码来代替试用期了。因为时间在系统中总是不可控的。

如果非要做试用期,最保险的方式就是使用网络时间做为时间界定。在操作系统中保存的任何数据都不安全,且可被修改的!!!
金沙滩
2013-07-29
知道答主
回答量:43
采纳率:0%
帮助的人:12.5万
展开全部
你应该跟注册表结合在一起。这样就避免了修改系统时间。或者设置一条语句获取网络时间。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ae3233c
2013-07-30 · TA获得超过1176个赞
知道小有建树答主
回答量:1329
采纳率:0%
帮助的人:496万
展开全部
获取网络时间是最简单直接的办法, 用户如果故意断网导致不能获取网络时间, 就限制程序的运行就行了.
除此之外, 真没有万全的办法了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
as5050as
2013-07-29 · 超过18用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:38.4万
展开全部
可以联网么。读取网络时间。如果有服务器就读取服务器时间。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6ce992a
2013-07-29
知道答主
回答量:28
采纳率:0%
帮助的人:16.5万
展开全部
可以用使用天数做记录
追问
谢谢!这是个方法,但是隔几天使用一次的话就不能算准确的试用期了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式