加解密修行No.2——超简单的时间限制程序破解

许多商业软件设置时间限制,这样客户要想使用其软件就得支付费用获得使用权,因此企业也得以盈利,这也就是程序设置时间限制由来。

首先,我们的知道给程序设置时间限制,一般需要计时器,通过系统以及软件开始运行的时间进行计时,本次展示的程序在初始化便是利用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

随后复制到可执行文件——》选择所有修改——》全部复制——》保存文件

打开我们新修改的文件,可以看到不在有时间限制

参考资料:段刚 《加密与解密》

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年3月9日
下一篇 2020年3月9日

相关推荐