不联网的情况下,怎么控制一个软件的过期不准使用?

2019-09-20 15:57:46 +08:00
 fileinthehole

如题,想请教各位业界大佬,一个软件给到客户处,客户不联网,时间不会跟着网络时间更新,根据本地时间的话,他可以私自改动时间导致控制不住,开服务的话,服务也可能被关掉吧。想请教一下有没有什么好的控制方式?

19524 次点击
所在节点    程序员
135 条回复
fileinthehole
2019-09-20 16:25:57 +08:00
@arrow8899 我们想了好几种方法,但领导老是给你钻牛角尖,把客户想成高端黑客[/手动白眼]
Leez088
2019-09-20 16:27:00 +08:00
到期后,卸载掉在安装能用吗
fileinthehole
2019-09-20 16:27:32 +08:00
@newtype0092 这种就只能控制他一共使用不超过 7*24*60 分钟,但这么多分钟可以分配到一年甚至更久的之间之内
opengps
2019-09-20 16:27:49 +08:00
定期强制要求联网激活,检测到假日期自动删除
dp2px
2019-09-20 16:28:14 +08:00
你的程序没有计数器(因为会关闭或关机)唯一的计数器( PC 的计时)还会被修改,这样导致你没有可以参考的时间点。但是据说关机后 CMOS 芯片会有电,会保存时间,如果你能拿到这个时间作为参考,每次在用户更改的时候能获取到时间的变化事件,那么从时间角度就可以实现。
fileinthehole
2019-09-20 16:28:28 +08:00
@Leez088 不用安装的,就一个小软件,也就不存在卸载
DoubleShut
2019-09-20 16:28:32 +08:00
直接写在代码里,每次编译的时候自动生成过期时间,类似于代码生成,过期直接不能使用,联网更新自动打新包给他
fileinthehole
2019-09-20 16:28:50 +08:00
@opengps 怎么检测到假日期呢
airfling
2019-09-20 16:28:52 +08:00
你自己维护一个计数,这个计数就是时间差,定时保存到数据库或者文件里面,具体做法就是你保存到数据库中的 id 用 uuid+你这个计数的加密编码,你每次读取的时候就判断一下 id,把这个加密编码解密,然后判断这个数字,然后下次存储就是在这个基础上加上已经过去的时间差,你过期就根据这个数字,如果客户问你 id 是怎么设计的,你就说是公司自己设计的一套 id 生成算法,属于保密条例之类的就可以了。这个数肯定是一直增大的,最后无论怎么样,肯定会过期 ,怎么改都没用
zlhsvc
2019-09-20 16:29:16 +08:00
强制要求联网,不然不给用。纯本地了话你校验 bios 时间都能改
fileinthehole
2019-09-20 16:29:34 +08:00
@DoubleShut 你这个他可以把电脑的时间一直停留在给他软件那天
qq316107934
2019-09-20 16:30:03 +08:00
@dp2px #25 BIOS 可以直接修改时间的
lneoi
2019-09-20 16:31:45 +08:00
@fileinthehole 运行时就不断更新记录时间,增加用户修改时间的麻烦程度。一般用软件调时间,随便调容易超过允许范围,总是设置倒回同一个时间点,记录一下是否多次重复这个时间,是多次则禁用。
qq316107934
2019-09-20 16:32:52 +08:00
设备是你们的吗?是的话可以通过锁 BIOS+驱动 /组策略禁止用户修改时间来实现。 不是的话不能通过外界渠道获取信息这个命题就不成立,无解的。
fileinthehole
2019-09-20 16:34:29 +08:00
@qq316107934 没有设备,就是把一个软件给客户的电脑上用一下,控制一下其他设备,其他设备也是不联网的
WanzizZ
2019-09-20 16:34:31 +08:00
还是判断系统时间,比如每过 10 秒,记录一次当前时间,如果他改时间,那修改以后的时间肯定要比记录的时间要提前,这样直接禁用。
amaranthf
2019-09-20 16:35:04 +08:00
每次开启时记录日期+时间,然后关闭时也记录,累加天数就好,比如累加到 30 天就终止使用。
如果发现某次开启时的时间比上次关闭时的时间还要靠前,那也无所谓,累加 1 天甚至惩罚性地累加两天、三天随你。
如果要绕过这个策略,就必须每次调整时间为同一天的上一次关闭后的时间,而且还得他确实理解了你这个策略才行。
如果还想堵上漏洞,那就去查某些系统文件的访问、修改时间。
buf1024
2019-09-20 16:35:11 +08:00
程序首次启动时,获取客户当前机器时间,程序退出时,程序自己加上刚才获取是时间生成过期的加密时间,生成一个新的程序,将新的程序替换旧的程序即可。程序再次启动时,就可以知道过期时间了。
WanzizZ
2019-09-20 16:36:04 +08:00
如果遇到说时间一直不变的,也直接禁用
fileinthehole
2019-09-20 16:36:07 +08:00
@WanzizZ 假设我先用了一分钟从 20 号 12:00:00 用到了 20 号 12:01:00,第二天了,感觉快过期了,吧时间改回 20 号 12:00:10s,岂不是又可以用了?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/602583

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX