软件破解时间限制

crack常见技巧

运行时间限制
一、运行时间限制
这种程序是每次运行的时间有限制,如运行10分钟,20分钟等情况。
它们里面一般有个计时器,让我们假设这程序每秒减一,其会用上DEC指令。一般的程序是32位,你反汇编后查找"dec dword ptr",如运气好的话,有可能给你提供重要的线索。
当然实现这种功能方法很多,需要我们多接触这种类型就能掌握。

二、时间限制
这种限制是程序让用几天,而每次运行时间不限。CRACK这种程序有以下经验:
1、限定多少天时间限制
这种类型程序很多,让你有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" 。
2、要记住当前年份、月份的十六进制的一些表示方法,如:2000年的十六进制是07D0,然后用W32DASM反汇编你的程序,用查找字符串的方法找 D007(在机器码中位置颠倒了一下)或其它类似时间的数字,有可能会找到有价值的线索。你别小看这种方法,对那些没怎么防范的程序,此招很有效。
如:一程序限定在2000年使用,可能有如下一代码:
:00037805 817C2404D0070000 cmp dword ptr [esp+04], 000007D0 比较是否在2000年。
另外,在1中的30天限期中也可用类似方法,如:
CMP DWORD PTR register, 1E <-- 1E 表示 30
JLE/JGE address <-- 一般都是这些条件中断
其中CMP的机器码是83,1E是30天,7E (JLE) 或7D (JGE),以这些为查找对象,在十六进制工具或W32DASM中查找功能找寻,你有可能找到多处,这时可用排处法,找到最大可能处,把7E (JLE) 或7D (JGE)改成EB(JMP),试试时间限制是否取消。
3、还有一种方法是常用的,把系统时间调后,程序将出现到期的警告窗,然后记下警告窗的一些提示语言,在W32DASM中利用串式数据参考功能( string reference)查找,然后分析代码,CRACK它。
另外,有一点要注意的,如这对话框或警告窗是中文的,在W32DASM是找不到相应的中文字串的,你可用十六进制工具把相关的中文的提示改成英文,如其提示:“你的使用时间到期”。你用十六进制工具把这改成:“Trial Time has expired”(注意改后的字节不可超过原文的字节数),再用W32DASM查找字串。

三、与时间相关函数
1、GetSystemTime 得当前系统时间
说明:
在一个SYSTEMTIME中载入当前系统时间,这个时间采用的是“协同世界时间”(即UTC,也叫做GMT)格式。
VOID GetSystemTime(LPSYSTEMTIME l

pSystemTime // 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 // 处理定时过程的程序入口地址
);


附:SYSTEMTIME 类型定义

SYSTEMTIME 类型定义Type SYSTEMTIME ' 16 Bytes
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type说明这结构中包含日期和时间信息.
字段表字段类型与说明wYearInteger,当前年份 .wMonthInteger,当前的月份. 一月份是1.wDayOfWeekInteger,星期几. 星期天是 0.wDayInteger,当月中的第几天.wHourInteger,当前小时.wMinuteInteger,当前分钟.wSecondInteger,当前秒.wMillisecondsInteger,当前毫秒.
附:FILETIM 类型定义
类型定义Type FILETIME ' 8 Bytes
dwLowDateTime As Long
dwHighDateTime As Long
End Type说明windows提供了一种特殊的机制,可以记录文件的访问及创建时间。在win32环境中,这些信息以64位值的形式保存,量度的是自1601年1月1日以来经历的100ns时间单位数量(64-bit number specifying the elapsed time since January 1, 1601, in 100-nanosecond increments.)字段表字段类型及说明dwLowDateTimeLong,Low and high-order 32 bits of the file timedwHighDateTime注解文件时间在系统中通常用“协同世界时间”(UTC)的格式保存,但同时提供了在UTC及本地时间之间转换的函数。FILETIME结构里可包含UTC或本地时间——由我们自行决定在结构中包含什么时间
返回

相关文档
最新文档