您的位置: 首页 >> 新闻中心 >> 计算机 >> 软件开发
软件保护之为应用软件加上时间限制
■ 最新课程推荐更多课程>>
学校培训课程开课时间上课地点精英价报名
正辰培训 微软软件测试工程师电话预约西直门教学区¥4704
新 科 海 软件测试工程师就业班电话预约海淀长远天地¥6280
北师大IT 软件工程与测试实战班电话预约北京师范大学¥1800
北师大IT 高级网络工程师就业班电话预约北京师范大学¥13000
金 同 方 网络工程师就业周末班电话预约人大总部¥7000
  (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 // 处理定时过程的程序入口地址
);

  

下一篇:JSP 2.0下的动态内容缓存分析讲解

  在Web应用中,内容缓存是最普通的优化技术之一,并且能够很容易地实现。例如,可以使用一个自定义地JSP标签——我们将之命名为<jc:cache>——由<jc:cache>和</jc:cache>将每一个需要被缓存的页面片段封装起来。任何自定义标签可以控制它所包含部分 (也即预先封装的页面片段)在何时执行,并且动态输出结果可以被捕获。<jc:cache>标签使得JSP容器(例如Tomcat)只生成内容一次,作为应用程序范围内的JSP变量,来存储每一个缓存片段。每次JSP页面被执行时,自定义标签将缓存页面片段载入而无需再次执行JSP代码来生成输出结果。作...[查看详情]

  影视动画培训   北大BEC培训官方报名网站   2008美国夏令营启航官方指定报名网站   2008留学第一站!  
  北师大 火星时代
共举影视动画培训之鼎
  北大BEC培训官方报名网站
现在报名独享95折!
  2008年国家职业资格考试
一次过关完全备考手册
  2008留学第一站
留学资讯尽在精英留学站!
 
上一篇:如何安装微软IIS5.1安装文件
下一篇:JSP 2.0下的动态内容缓存分析讲解
 相关新闻
·Java程序开发中代理技术的使用方法·OpenJPA成为Apache顶级项目
·Apache CXF2.0发布并通过JAX-WS2.0 TCK·iPhone面市在即 移动设备Ajax将倾闸而出?
·Java程序把Word文档直接转换成Html文件·Sun向JCP提交Servlet3.0规范—JSR315
·新手入门:学习Java的一点经验心得·腾讯TM2008界面设计泄漏 美图提前看
·专家:如何理解JavaFX应运而生·Oracle Lite 10g数据库第三版正式问世
·专家详解:复杂表达式的执行步骤·教你如何在C语言使用位运算实现循环移位
·经验交流:关于软件设计的一点心得体会·JSP中基于Session的在线用户统计分析
·解决JSP开发Web程序中的中文问题·JSP 2.0下的动态内容缓存分析讲解
 
◇ 重点栏目导航
◇ 精英服务承诺
教育顾问:010-51660910
QQ交流:138660910
相关资料
·软件测试新手的修炼之路
·Smarty简体中文参考手册
·Struts中文手册
·Struts快速学习指南
·ultradev动态网页制作教程
·UML工具箱
·《设计模式》中文版
·学友Flash伴侣 1.11
·阿须图像水印(AssureMark)V2.0
·超级语霸
相关试题
·2007年全国CPA考试试卷及答案解析之《会
·2007年CPA试卷及答案解析之《财务成本管
·2008年注会考前模拟试题之《财务成本管理
·2007年全国CPA《税法》考试试卷及答案解
·2008年中级会计职称《经济法》试题及答案
·2008年注册会计师考前模拟试题参考答案之
·2008年注册会计师考前模拟试题之《会计》
·2008年注册会计师考前模拟试题之《税法》
·2008年高校招生全国统考理数试题(四川延
·2008年全国高考物理科试题参考答案(上海
相关热贴
·如何改QQ IP地址!
·恰当选择软件测试自动化方案
·ADO.NET学习总结
·.net操纵xml文件类(c#)
·Log4net教程
·VPN技术详解
·高手必读 网络端口安全防护技巧放送
·访问XP共享出现的问题解决办法
·Web2.0时代,RSS你会用了吗?(技术实现总
·.NET下正则表达式应用的四个示例