• 标 题:转贴:破解时间限制的老文章(二) (2千字)
  • 作 者:1212
  • 时 间:2000-10-23 16:50:15
  • 链 接:http://bbs.pediy.com

注:GetTickCount( )的破解

X-win Pro 4.3的demon版有31分钟的时间限制.
在运行到第30分钟的时候,弹出一个对话框,告诉你只能再用1分钟.到第31分钟的
时候,又弹出一个对话框,告诉你已经没时间了,要你重新运行它.它已经销毁了它
所启动的所有窗口.
我的破解方法如下:
用softice symbol loader加载xserver.exe,按F5运行.等连上UNIX主机后,
用bpx messageboxa设置断点,然后出去玩半个小时(我是去逛书店了).
等30分钟过后,就发现进入了softice.按F11从MessageBoxA函数返回.
再按几下F10,经过一条ret指令后,就可以看见如下的程序段:
0041228D: CALL  CS:[KERNEL32!GetTickCount]    
          MOV  ECX,[0050D184]
          MOV  EBX,EAX
          TEST  ECX,ECX
          JZ    004122D3
004122A0: CMP  EAX,ECX
          JLE  004122D3
          MOV  EDX,0000EA60              ;60000毫秒=1分钟
          MOV  EBX,[0050D17C]
          MOV  EAX,[0050D174]
          MOV  [0050D184],ESI
          CALL  [0050D178]                  ;显示"只剩1分钟了"
          CALL  CS:[KERNEL32!GetTickCount]  ;取时间
          ADD  EAX,0000EA60                ;加上1分钟(60000毫秒)
          MOV  [0050D188],EAX              ;保存起来
          JMP  004122F8
004122D3: CMP  EBX,[0050D188]
          JLE  004122F8
          MOV  EBX,[0050D17C]
          MOV  EAX,[0050D174]
          XOR  EDX,EDX                    ;0分钟
          CALL  [0050D178]                  ;显示"剩下0分钟"
          MOV  DWORD PTR [0050D18C],00000001
004122F8: MOV  EAX,ESI
          POP  ESI
          POP  EDX
          POP  ECX
          POP  EBX
          RET
  通过用softice改变程序执行流程,对上面的程序段进行分析,知道程序是这么
作的:
  程序不断用GetTickCount( )得到系统时间(系统启动以来所经过的毫秒数),
和预定的值比较,看有没有到30分钟.到了30分钟的时候,先显示对话框,告诉你
只能再用1分钟了.然后用GetTickCount( )得到系统时间,将其加上60000,
也就是加上1分钟,保存在一个变量中.此后不断将GetTickCount( )返回的数和这
个变量比较,如果大于这个变量,就说明过了31分钟,就弹出个对话框,告诉你剩下
0分钟,然后销毁窗口.
  如果让GetTickCount( )返回固定值,不就可以骗过它了吗?由于GetTickCount
返回值在EAX寄存器中,所以只需要把CALL  CS:[KERNEL32!GetTickCount]这条
指令改为
            MOV EAX,00000001
            NOP
            NOP
为了保险起见,我把上面的两条CALL  CS:[KERNEL32!GetTickCount]都改了.
find:      2E FF 15 4C 71 52 00 8B 0D
replace:    B8 01 00 00 00 90 90 -- --

find:      2E FF 15 4C 71 52 00 05 60 EA
replace:    B8 01 00 00 00 90 90 -- -- --
由于30分钟时间很长,我只检验过一次,不知道还有什么bug.
当然也可以把30分钟改短点儿.