欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

Araxis Merge 2001 Professional Evaluation v6.0 时间限制去除 (7千字)

Araxis Merge 2001 Professional Evaluation v6.0 时间限制去除 (7千字)

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返回后的代码的方法就可搞
定,这就需要耐心了。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功