找回密码
 加入
搜索
查看: 1557|回复: 8

可以分享一下日期获取和有效期设定的非函数实现方法吗?

  [复制链接]
发表于 2010-1-20 05:41:01 | 显示全部楼层 |阅读模式
本帖最后由 imnebula 于 2010-2-5 10:40 编辑

1、用DATA.AU3的函数实现很直接,是获取WINDOWS的时间进行判断,优点是方便,缺点是会增加几十K的软件大小,以及如果用做有效期判断的话,容易被破解。

2、参考了坛子里分享的,获取网络时间的方式来获取时间然后做比较:
#include <IE.au3>
$oIE = _IECreate ("http://www.timedate.cn/worldclock/ti.asp")
$sText = _IEBodyReadText ($oIE)
MsgBox(0, "Body Text", $sText)

这样的方式,在防破解上稍微好许多,我将中间的中文和冒号全部替换为空(比如得到2010120),再对值进行比较,但只是便于时间比较,设定一个值(2010229),当新获取的值(如2010322)大于预设值后,表示已经到有效期。这个需要手动预设一个时间格式的值才能实现。

3、我想请教大家,如果我这里预设的值是7天,或者30天。在程序运行后自动存取程序第一次运行的时间,再第二次运行后开始判断这是第几天,一当超过所限天数后程序失效。以上面的条件,就比较难实现。因为我不知道如果第一次运行的时候是29号。如果我直接+7,表示获得七天后的日期,那就是36号了。。额。算术没有学好。不知道怎么解决。见笑。
DATE.AU3函数有办法实现(“ _DateAdd('d', 0, _NowCalcDate())”改变0可以设定获取任意天数后的日期),但是我想看有没有非函数更轻型的实现方式。不想增加程序体积了。

希望大家帮忙分享思路。谢谢!
发表于 2010-1-20 08:40:05 | 显示全部楼层
老实说,有心的话,这个也很容易破,比如hosts里面改域,自己建个WEB返回请求..
发表于 2010-1-20 08:55:19 | 显示全部楼层
这种方法的漏洞太多,不如做一个简单的验证,放一个PHP页面在你的网页上,给每个用户分配一个序列号,网页数据库中记录每个用户的到期时间,对比后给个返回。你也可以设定一下,比如返回10次失败后才算失败。
发表于 2010-1-20 09:06:23 | 显示全部楼层
同意楼上的看法
发表于 2010-1-20 17:15:47 | 显示全部楼层
还不如写一个加密的验证文件,每次启动软件就读取它,在文件里面写入执行次数,SID,userid,执行时间等等。
另外,也可以尝试读取主板中的数据,比如得到系统总运行时间等...
发表于 2010-1-20 17:43:55 | 显示全部楼层
回复 5# supersp

这样做还不完善哦,其实单机的话,太容易越过时间过期的检测了。。譬如,我就装着还原卡,重启后,一切恢复如初(时间当然可以往回设)。。或者使用加密文件,我每次使用软件前,都恢复最初的加密文件,不就没事了?

我本来以为联网会更好些,但像你说的用改HOSTS办法,那就没辙了,呵呵。。如果AU3内部访问网址不被监听到的话,倒是可以做到完美检测过期了。。
 楼主| 发表于 2010-1-28 04:45:30 | 显示全部楼层
PHP返回的办法应该算是一个但HOST修改的话确实也能够被破解。

我想了一下,在服务器端存储一个INI文件,里面存储有验证码。如果到期了就从里面删除(单独写一个程序来管理这个INI的每日定时上传更新)

然后,给客户的软件每次打开都下载这个INI到一个随机的目录里,然后读取这个INI。。以验证软件。

不知是否可行。
发表于 2010-1-28 09:32:12 | 显示全部楼层
INI你不加密还是有漏洞啊
发表于 2010-1-28 09:40:26 | 显示全部楼层
就是加密了又怎么着。。
既然改HOSTS可以提供虚假的验证内容,为什么不能给你一个虚假的文件让你下载,我把电脑时间设置到过去,就用下载的老的INI文件,照用不误
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-7-1 11:32 , Processed in 0.077267 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表