| 关键词: 函数 计时器 时间 程序 限制 指令 SetTimer 位置 参数 文件 |
许多商业软件设置时间限制,这样客户要想使用其软件就得支付费用获得使用权,因此企业也得以盈利,这也就是程序设置时间限制由来。 首先,我们的知道给程序设置时间限制,一般需要计时器,通过系统以及软件开始运行的时间进行计时,本次展示的程序在初始化便是利用SetTimer()这个win32编程的API函数向系统申请计时器来记录程序使用时间。 函数原型: UINT SetTimer{ HWND hWnd, //窗口句柄 UINT nIDEvent, //计时器标识 UINT uElapse, //计时器时间间隔 TIMERPROC lpTimeFunc //回调函数(计时器超时,调用该函数) }; 首先看下源程序,每次开启,时间限制只有20秒 将我们的程序拖入IDA进行分析,在Imports导入窗口中,我们可以看到它使用SetTimer这个函数用作程序的计时器 双击该函数,进入该函数代码段,Ctrl+x进行交叉引用,这里我们开到只有一个位置引用该函数,选择第一个进入该函数被引用的位置 在这里我们可以清晰开到前面4个push指令就是SetTimer这个函数的4个参数,由于是在栈中,数据先入后出,所以先从第4个参数开始. 这里我们就可以想到要想绕过时间限制,就需要跳过调用计时器这个函数即可。即在入栈第一个参数位置004010c6,将push指令修改为jmp指令,跳转位置位于call之后, 即为:jmp 4010d6 将程序拖入Ollydbg中,Ctrl+g搜索004010c6定位到该地址,将push指令修改为jmp 4010d6 随后复制到可执行文件——》选择所有修改——》全部复制——》保存文件 打开我们新修改的文件,可以看到不在有时间限制 参考资料:段刚 《加密与解密》 |
| 本文出处: https://www.toutiao.com/a6815111519404032519/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|