zoukankan      html  css  js  c++  java
  • 第5章:演示版保护技术——时间限制

    SetTimer() 函数

    向系统申请一个计时器并指定计时器的时间间隔,同时获得一个处理器超时的回调函数,超时时系统会向申请计时器的目标窗口发送消息 WM_TIMER 

    timeSetEvent() 函数

    多媒体计时器,精度可以达到 1ms 

    GetTickCount() 函数

    返回从系统成功启动以来所经历的时间(ms),两次返回值相减即得程序运行时长

    timeGetTime() 函数

    多媒体计时器函数,同上

    常用的获取时间的 API 函数有:GetSystemTime() , GetLocalTime() , GetFileTime() 

    软件时间检测:

    ①安装软件时记录安装日期(存储在注册表、文件、扇区中),将当前时间与安装日期对比

    ②安装软件时记录安装日期,或第一次运行时记录日期,并将时间存储在多个地方;记录程序最近一次运行时的日期,与当前时间进行对比,并更新

    ③读取需要频繁修改的系统文件(比如,user.dat 、system.dat )的最后修改日期,利用 FileTimeToSystemTime() 函数将其转换为系统日期格式

    在程序中看一下:

    可以发现这个程序只调用了 DialogBoxParamA() 这个一个 API,重点关注第四个参数。和上个程序类似,直接转到该回调函数:

    收到 WM_TIMER 消息,将数据

    可以看到,它需要先执行 SetTimer() 函数,然后继续对时间进行检测,根据传入参数的值(EAX),判断要执行什么操作:

    因此,这个程序存在漏洞,即程序处于调试状态时,只要没有处理到 WM_TIMER (0x 113)消息,则程序不会计时。

    因此可以在 C6 直接跳转到 D6,跳过 SetTimer() ,如此不会收到 WM_TIMER 消息:

    或者在计数次数到达后不跳转:

  • 相关阅读:
    ASP.NET 缓存技术分析
    asp.net中两款文本编辑器NicEdit和Kindeditor
    VS2005,VS2008,VS2010将ASP.NET网站编译成一个DLL文件
    公共的Json操作C#类
    怎么把100多个EXCEL文件合并成一个
    C# ToString()方法一些特殊用法
    C# 将数据导出到Execl汇总
    ASP.NET MVC中在Action获取提交的表单数据方法总结
    vue实现锚点定位跳转(当前页面跳转,url不变)
    es6 去除小数点后,不四舍五入
  • 原文地址:https://www.cnblogs.com/Rev-omi/p/13749014.html
Copyright © 2011-2022 走看看