社区
硬件/系统
帖子详情
类似共享软件的时间限制,一般如何实现?请教各位达人
xiaolizi
2006-06-23 11:00:44
As Tile,
要检测软件使用时是否过了某个具体的时间点(如2006.10.1),这个一般如何做?
不包括GetSystemTime之类的API函数,请教达人
...全文
570
6
打赏
收藏
类似共享软件的时间限制,一般如何实现?请教各位达人
As Tile, 要检测软件使用时是否过了某个具体的时间点(如2006.10.1),这个一般如何做? 不包括GetSystemTime之类的API函数,请教达人
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
「已注销」
2006-06-24
打赏
举报
回复
看雪学院中如是说:
3、时间限制
(1) 定时器
有些程序的试用版每次运行都有时间限制,例如运行10分钟或20分钟就停止工作,必须重新运行该程序才能正常工作。这些程序里面自然有个定时器来统计程序运行的时间。
1)使用Settimer()
常用的计数器是函数Settimer(),调用这个函数创建的定时器可以发出消息VM_TIMER,或者在定时期满时调用一个回调函数。 使用这个函数会使时间延时,精度不高。
2)使用timeSetEvent()
给Windows驱动程序最精确的周期性通知是由Windows的多媒体服务timeSetEvent()提供的。它的时间可以精确到1毫秒。
3)使用VXD
可以使用VMM的Set_Global_time_Out()服务来迫使回调函数的几个毫秒再执行,这就创造了一个“只有一次”的定时器。VXD可以在回调中再次调用Set_Global_time_Out()来开始下一个定时器,这样提供了一个连续运行的定时器了。
4)其它
GetTickCount():精度不高;
timeGetTime(): 可以以毫秒级返回windows开始后的时间。
(2)时间限制
一般这类保护的软件都有时间上的限制,如试用30天等,当过了共享软件的试用期后,就不予运行,只有向软件作者付费注册之后才能得到一个无时间限制的注册版本。
这种类型程序很多,让你有10天、20天、30天等,它们在安装时,在你的系统某处做上时间标记,每次运行时用当前系统时间和安装时的时间比较,判断你还否能使用。
如最典型的30天限制的一种情况:
mov ecx,1E ; 把1E (30天 十进制) 放入 ecx
mov eax,[esp+10] ; 把用过天数放到eax
cmp eax,ecx ; 在此比较
jl ...
如碰到这种情况,只需把"mov eax,[esp+10]"改成"mov eax,1" 。
要记住当前年份、月份的十六进制的一些表示方法,如:2000年的十六进制是07D0,然后用W32DASM反汇编你的程序,用查找字符串的方法找D007(在机器码中位置颠倒了一下)或其它类似时间的数字,有可能会找到有价值的线索。你别小看这种方法,对那些没怎么防范的程序,此招很有效。
如:一程序限定在2000年使用,可能有如下一代码:
:00037805 817C2404D0070000 cmp dword ptr [esp+04], 000007D0 比较是否在2000年。
(3)与时间相关函数
1、GetSystemTime 得当前系统时间
说明:
在一个SYSTEMTIME中载入当前系统时间,这个时间采用的是“协同世界时间”(即UTC,也叫做GMT)格式。
VOID GetSystemTime(
LPSYSTEMTIME lpSystemTime // SYSTEMTIME,随同当前时间载入的结构
);
2、GetLocalTime 得当前本地时间
VOID GetLocalTime(
LPSYSTEMTIME lpSystemTime // SYSTEMTIME,用于装载本地时间的结构
);
3、SystemTimeToFileTime 根据一个FILETIME结构的内容,载入一个SYSTEMTIME结构
BOOL SystemTimeToFileTime(
CONST SYSTEMTIME * lpst, // SYSTEMTIME,包含了系统时间信息的一个结构
LPFILETIME lpft // FILETIME,用于装载文件时间的一个结构
);
返回值 :非零表示成功,零表示失败。
4、SetTimer 创建一定时器,在指定时间内暂停
UINT SetTimer(
HWND hwnd, // 时间信息句柄
UINT idtimer, // 定时器ID 标识符
UINT uTimeout, // 暂停时间
TIMERPROC tmprc // 处理定时过程的程序入口地址
);
lixiaosan
2006-06-23
打赏
举报
回复
每启动软件一次就记录一次时间。
if (date[n]<date[n+1] )
failed;
if (date[n+1]-date[0] > 30天)
failed;
当然,这个保存date的工作可以写注册表(不推荐),也可以写加密文件。。
lixiaosan
2006-06-23
打赏
举报
回复
也可以写加密文件
这个加密文件中你可以得到当前机器硬件的相关信息来保证唯一性。。
guosenjuncs
2006-06-23
打赏
举报
回复
如果是网络软件就获取网络时间,如果不是,则
我觉得这样设计,不知道行不行
保存第一使用的时间和今天使用是第几天
第二个值的存取可以添加自定义的判断,因为有些可以通过修改系统时间到比较以前的时间而延长使用时间的
xiaolizi
2006-06-23
打赏
举报
回复
To zephyr007(道可道)
"例如将某些时间标记记录在资源dll中,并通过动态修改/装载机制控制时间"
这个就是我想要的,能否详细介绍,或者给出一些相关的技术文章?万分感谢!!!
To lixiaosan(小三)
"保存date的工作可以写注册表(不推荐),也可以写加密文件" 这个也可以,但是可以通过复制这个加密文件来一直使用的 :)
zephyr007
2006-06-23
打赏
举报
回复
如果对exe/dll文件研究足够深,可以自己修改自己,例如将某些时间标记记录在资源dll中,并通过动态修改/装载机制控制时间
2021-06-22
嵌入式C语言经典面试题 第一部分:基本概念及其它问答题 3 1、关键字static的作用是什么? 3 2、“引用”与指针的区别是什么? 3 3、.h头文件中的ifndef/define/endif 的作用?...9、冒泡排序算法的
时间
复杂度
嵌入式C语言面试宝典
37 8、请列举一个软件中
时间
换空间或者空间换
时间
的例子。 37 9、outputstr所指的值为123456789 38 10、不用库函数,用C语言
实现
将一整型数字转化为字符串 38 11、求组合数: 求n个数(1....n)中k个数的组合.... 40...
c/c++笔试题
语言中
类似
atoi 的函数功能(输入可能包含非数字和空格) 百度笔 试题 一、选择题: 15 分 共 10 题 1. 在排序方法中,关键码比较次数与记录地初始排列无关的是 . A. Shell 排序 B. ...
WEB开发文档2 总结
请教
各位高手:在客户端用javascript修改过options的dropdownlist控件,如何才能让它将修改后的内容回发? MSDN里面说用,@Page trace=true%,TRACE用法??请问Trace怎么用? 如何获得系统字体和系统字体...
C知识点 大考验 你知道几条?
那就是,这个函数被
限制
在声明它的模块的本地范围内使用。 大多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。这是一个应试者的严重的缺点,因为他显然不懂得本地化数 据...
硬件/系统
2,640
社区成员
17,239
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章