Araxis Merge 2001 Professional Evaluation v6.0 时间限制去除
by liangs
(1)去除Nag和30天限制
根据Nag的标题"Welcome to Araxis Merge"我们在W32Dasm中可以查到那
个窗口的ID是DialogID_0FA8,再查DialogID_0FA8在程序中出现的地方,
可找到如下代码处:
:00469A79 3BF3
cmp esi, ebx
:00469A7B 8B55F0
mov edx, dword ptr [ebp-10]
:00469A7E 8B45EC
mov eax, dword ptr [ebp-14]
:00469A81 8990000E0000 mov dword ptr
[eax+00000E00], edx
:00469A87 7C05
jl 00469A8E //改为EB05
:00469A89 83FE1E
cmp esi, 0000001E
//判断时间是否大于30天
:00469A8C 7E05
jle 00469A93
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00469A77(U), :00469A87(C)
|
:00469A8E BE1E000000 mov esi,
0000001E
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00469A8C(C)
|
:00469A93 395D08
cmp dword ptr [ebp+08], ebx
:00469A96 747D
je 00469B15 //改为EB7D
:00469A98 53
push ebx
* Possible Reference to Dialog: DialogID_0FA8 //Nag过期窗口提示
★★★ 一定要跳过这个Nag,上面的两个修改都是为了要Jump过它
:00469A99 68A80F0000 push 00000FA8
:00469A9E 8D8D04FFFFFF lea ecx, dword
ptr [ebp+FFFFFF04]
:00469AA4 E81D270700 call 004DC1C6
:00469AA9 B91E000000 mov ecx,
0000001E
:00469AAE 2BCE
sub ecx, esi
:00469AB0 898D60FFFFFF mov dword ptr
[ebp+FFFFFF60], ecx
:00469AB6 8D8D64FFFFFF lea ecx, dword
ptr [ebp+FFFFFF64]
:00469ABC C645FC03 mov
[ebp-04], 03
:00469AC0 E8FB5F0000 call 0046FAC0
:00469AC5 A140E95300 mov eax,
dword ptr [0053E940]
:00469ACA 8945A0
mov dword ptr [ebp-60], eax
:00469ACD 8945A4
mov dword ptr [ebp-5C], eax
:00469AD0 68AC355400 push 005435AC
:00469AD5 8D4DA0
lea ecx, dword ptr [ebp-60]
:00469AD8 C645FC06 mov
[ebp-04], 06
:00469ADC C78504FFFFFF34AD5000 mov dword ptr [ebp+FFFFFF04], 0050AD34
:00469AE6 E80E1E0700 call 004DB8F9
:00469AEB 68AC355400 push 005435AC
:00469AF0 8D4DA4
lea ecx, dword ptr [ebp-5C]
:00469AF3 E8011E0700 call 004DB8F9
:00469AF8 8D8D04FFFFFF lea ecx, dword
ptr [ebp+FFFFFF04]
:00469AFE C645FC07 mov
[ebp-04], 07
:00469B02 E895270700 call 004DC29C
:00469B07 8D8D04FFFFFF lea ecx, dword
ptr [ebp+FFFFFF04]
:00469B0D 885DFC
mov byte ptr [ebp-04], bl
:00469B10 E89B29FBFF call 0041C4B0
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00469A96(C)
|
:00469B15 83FE1E
cmp esi, 0000001E
:00469B18 8D4DA8
lea ecx, dword ptr [ebp-58]
:00469B1B 0F9CC3
setl bl
:00469B1E C745FCFFFFFFFF mov [ebp-04], FFFFFFFF
:00469B25 E8E676FAFF call 00411210
:00469B2A 8B4DF4
mov ecx, dword ptr [ebp-0C]
:00469B2D 5F
pop edi
:00469B2E 5E
pop esi
:00469B2F 8AC3
mov al, bl
★★★ 这个很重要,一定要使al为1
下面我们将会看到这点
:00469B31 64890D00000000 mov dword ptr fs:[00000000],
ecx
:00469B38 5B
pop ebx
:00469B39 8BE5
mov esp, ebp
:00469B3B 5D
pop ebp
:00469B3C C20400
ret 0004
这里将返回到00412ABC的调用
:00469B3F 90
nop
-----------------------------------------------------------
为使00469B3C处返回时,al=1我们可以修改上面代码如下:
:00469B2F 8AC3
mov al, bl //改为 xor eax,eax
33c0
:00469B31 64890D00000000 mov dword ptr fs:[00000000],
ecx
:00469B38 5B
pop ebx
:00469B39 8BE5
mov esp, ebp
:00469B3B 5D
pop ebp
插入语句 40
inc eax //这里使al=1
:00469B3C C20400
ret 0004
:00469B3F 90
nop //这个nop将被占用
------------------------------------------------------------
下面代码为上面子程序的返回后的处理,程序会继续处理时间判断:
* Reference To: KERNEL32.GetLocalTime, Ord:011Bh
|
:00412A87 FF151C645000 Call dword ptr
[0050641C]
:00412A8D 8B45E0
mov eax, dword ptr [ebp-20]
:00412A90 663DD007 cmp
ax, 07D0
:00412A94 722E
jb 00412AC4
:00412A96 663DD207 cmp
ax, 07D2
:00412A9A 7728
ja 00412AC4
:00412A9C 7513
jne 00412AB1
:00412A9E 668B45E2 mov
ax, word ptr [ebp-1E]
:00412AA2 663D0300 cmp
ax, 0003
:00412AA6 771C
ja 00412AC4
:00412AA8 7507
jne 00412AB1
:00412AAA 66837DE61E cmp word
ptr [ebp-1A], 001E
:00412AAF 7713
ja 00412AC4
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00412A9C(C), :00412AA8(C)
|
:00412AB1 53
push ebx
:00412AB2 B960365400 mov ecx,
00543660
:00412AB7 E8446E0500 call 00469900
:00412ABC 84C0
test al, al
★★★ 从上面的00469B3C处的RET返回到此,如果al=0,将跳往过期的处理,
几个F12后程序将退出,所以一定要在前面的call 00469900中将al置为1
:00412ABE 0F85A7000000 jne 00412B6B
上面al为1后,这里就会跳往正确的地方
(2)去除2002年3月31号的限制
这个程序的作者有点变态,他在程序中调用GetLocalTime有几十次之多,
而且每次调用后都作了判断,判断如果时间过期后都要跳忘不同的过期
处理,比如上面00412A87处开始的一段GetLocalTime的处理要按如下方
法处理:
* Reference To: KERNEL32.GetLocalTime, Ord:011Bh
|
:00412A87 FF151C645000 Call dword ptr
[0050641C]
:00412A8D 8B45E0
mov eax, dword ptr [ebp-20]
:00412A90 663DD007 cmp
ax, 07D0 //改为9090
07D0也就是2000年
:00412A94 722E
jb 00412AC4 //改为9090
如果时间小于2000年则跳往00412AC4
:00412A96 663DD207 cmp
ax, 07D2 //改为9090
07D2也就是2002年
:00412A9A 7728
ja 00412AC4 //改为9090
如果时间大于2002年则跳往00412AC4
:00412A9C 7513
jne 00412AB1 //改为EB13
//这里一定要跳,下面就要跳往过期处理
:00412A9E 668B45E2 mov
ax, word ptr [ebp-1E]
:00412AA2 663D0300 cmp
ax, 0003
:00412AA6 771C
ja 00412AC4 //这里跳往过期处理
:00412AA8 7507
jne 00412AB1
:00412AAA 66837DE61E cmp word
ptr [ebp-1A], 001E
:00412AAF 7713
ja 00412AC4
如果不怕麻烦的话,就处理每个GetLocalTime后的代码,共有几十处,
我用的一种投机的方法就简单了这个问题。
我们已经知道07D2也就是2002年,用UltraEdit打开Merge.exe,查找替换
文件中所有的07D2为0BB8(也就是3000年),当然你也可以改为N千年也
是可以的 :-),重新运行程序Nag、30天限制、及2002年3月限制都没有了,
这种方法并没有处理时间小于2000年的问题,当然现在已经2001年了,不
会有人会把机器时间改为2000年以前吧,如果要解决掉这个小于2000年的
问题,须按上面我写的修改每个GetLocelTime返回后的代码的方法就可搞
定,这就需要耐心了。
- 标 题:Araxis Merge 2001 Professional Evaluation v6.0 时间限制去除 (7千字)
- 作 者:liangs
- 时 间:2001-6-6 21:43:55
- 链 接:http://bbs.pediy.com