题    目:消除金山影霸和音频解霸时间限制
软件名称:金山影霸2003(包含两个东西KingPlayer2003.exe和KingAmp2003.exe)
软件大小:12102 KB
使用平台:Win9x/NT/2000/XP
最新版本:2003版(电脑报2003光盘)
软件介绍:
金山影霸(KingPlayer)是一套集音、视频播放于一体的媒体播放软件。它支持现行市面上流行的各种音、视频格式;能轻易读取各种烂碟;提供金山影

霸的音频播放器,具有强大的音频文件编辑功能;同时提供转换器,可以实现MPEG4转换AVI;CD转换为WAV、MP3;以及WAV与MP3间的转换。她以高质量

、流畅的播放效果为基础,兼顾其他播放软件之优点,同时又突出自身新的功能点。
破解难度:易
破解工具:SOFTICE,W32DASM,ULTRAEDIT,PEID
破解目的:消除时间限制(30天试用)
引子:前几天找到了豪杰英雄解霸,今天又试验了一个金山公司的金山影霸和音频解霸,与英雄解霸的不同在于这个金山解霸没有注册码,只有30天试

用。安装这个软件后,把电脑日期加快1个月,再运行则提示你试用期已过,程序将退出。下面就开始寻找蛛丝马迹,找出破绽,一举攻破它。我在这里

简单描述了时间的计算过程和判断过程。
   拿出PEID来检查一下这两个软件都是用VC开发的,没有加壳,省去脱壳一步啦:)。接着用W32DASM反汇编KingPlayer2003.exe,查看使用了什么

引入函数,结果发现一个getsystemtime,反汇编第二个程序KingAmp2003.exe同样找到这个函数了。那好,我们Ctrl+D打开SoftICE,下断点如bpx 

getsystemtime,F5退出,运行第一个程序KingPlayer2003.exe,被拦下,按1次F12来到如下代码处。
1.金山影霸时间消除
* Reference To: KERNEL32.GetSystemTime, Ord:015Dh
:004E472F FF15F8C66400            Call dword ptr [0064C6F8]
:004E4735 668B45EA                mov ax, word ptr [ebp-16]      //停在这里,取分钟数
:004E4739 663B05FA7F6400          cmp ax, word ptr [00647FFA]
:004E4740 753B                    jne 004E477D    //跳走
*
*略去无用代码
*
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004E4740(C), :004E474D(C), :004E475A(C), :004E4767(C), :004E4774(C)
:004E477D 8D8534FFFFFF            lea eax, dword ptr [ebp+FFFFFF34]
:004E4783 50                      push eax
* Reference To: KERNEL32.GetTimeZoneInformation, Ord:0170h
:004E4784 FF15DCC66400            Call dword ptr [0064C6DC]
:004E478A 83F8FF                  cmp eax, FFFFFFFF
:004E478D 741B                    je 004E47AA   //此处不跳
:004E478F 83F802                  cmp eax, 00000002
:004E4792 7512                    jne 004E47A6  //此处自然跳
*
*略掉几行
* Possible Reference to String Resource ID=00001: "裶q8 2003"
:004E47A1 6A01                    push 00000001
:004E47A3 58                      pop eax
:004E47A4 EB07                    jmp 004E47AD
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004E4792(C), :004E4799(C), :004E479F(C)
:004E47A6 33C0                    xor eax, eax
:004E47A8 EB03                    jmp 004E47AD
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004E478D(C)
:004E47AA 83C8FF                  or eax, FFFFFFFF
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004E47A4(U), :004E47A8(U)
:004E47AD 56                      push esi  
:004E47AE 57                      push edi
:004E47AF 8D75E0                  lea esi, dword ptr [ebp-20]
:004E47B2 BFF07F6400              mov edi, 00647FF0
:004E47B7 A5                      movsd      //从ESI处拷贝年月日时分秒数据到EDI处
:004E47B8 A5                      movsd
:004E47B9 A5                      movsd
:004E47BA A5                      movsd
:004E47BB 5F                      pop edi
:004E47BC A3E87F6400              mov dword ptr [00647FE8], eax
:004E47C1 5E                      pop esi
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004E477B(U)
:004E47C2 50                      push eax
:004E47C3 0FB745FC                movzx eax, word ptr [ebp-04] //以下到4E47E0处是时间数据都进栈
:004E47C7 50                      push eax
:004E47C8 0FB745FA                movzx eax, word ptr [ebp-06]
:004E47CC 50                      push eax
:004E47CD 0FB745F8                movzx eax, word ptr [ebp-08]
:004E47D1 50                      push eax
:004E47D2 0FB745F6                movzx eax, word ptr [ebp-0A]
:004E47D6 50                      push eax
:004E47D7 0FB745F2                movzx eax, word ptr [ebp-0E]
:004E47DB 50                      push eax
:004E47DC 0FB745F0                movzx eax, word ptr [ebp-10]
:004E47E0 50                      push eax
:004E47E1 E879970000              call 004EDF5F   //此函数进行时间计算,可以跟入看看如何计算的。
:004E47E6 8B4D08                  mov ecx, dword ptr [ebp+08]
:004E47E9 83C41C                  add esp, 0000001C
:004E47EC 85C9                    test ecx, ecx
:004E47EE 7402                    je 004E47F2
:004E47F0 8901                    mov dword ptr [ecx], eax
:004E47F2 C9                      leave
:004E47F3 C3                      ret    //返回到:0040FBC1处,见下面代码段。
----------------------------------------------------------------------
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040FB95(C)
:0040FBA4 8D9424B0040000          lea edx, dword ptr [esp+000004B0]
* Possible Reference to Dialog: DialogID_00DE, CONTROL_ID:00FF, ""
:0040FBAB 6AFF                    push FFFFFFFF
:0040FBAD 52                      push edx
:0040FBAE 8D4C2430                lea ecx, dword ptr [esp+30]
:0040FBB2 E884521000              call 00514E3B
:0040FBB7 8D442424                lea eax, dword ptr [esp+24]
:0040FBBB 50                      push eax
:0040FBBC E8C6521000              call 00514E87   //就是这个函数内一个地方调用的上面的代码。
:0040FBC1 8B4C2424                mov ecx, dword ptr [esp+24]  //4E47F3的ret 返回到这里
:0040FBC5 8B542428                mov edx, dword ptr [esp+28]
:0040FBC9 8BC1                    mov eax, ecx
:0040FBCB 2BC2                    sub eax, edx
:0040FBCD 3BCA                    cmp ecx, edx        //新旧时间差比较,比规定时间长度大或者小皆失败。
:0040FBCF 0F8C6D070000            jl 00410342      //此处要NOP掉,换成6个NOP即可。
:0040FBD5 3D008D2700              cmp eax, 00278D00
:0040FBDA 0F8F62070000            jg 00410342     //此处要NOP掉,换成6个NOP即可。
:0040FBE0 E862641300              call 00546047
:0040FBE5 53                      push ebx
:0040FBE6 E83E6A0C00              call 004D6629
:0040FBEB 83C404                  add esp, 00000004
* Possible StringData Ref from Data Obj ->"KingDVDPlayer"
 :0040FBEE 68E8445900              push 005944E8
* Possible Reference to String Resource ID=00001: "裶q8 2003"
:0040FBF3 6A01                    push 00000001
:0040FBF5 53                      push ebx
....略去多行
=========================================
2.金山影霸音频播放器时间限制消除
我们Ctrl+D打开SoftICE,下断点如bpx getsystemtime,F5退出,运行第二个程序KingAmp2003.exe,被拦下,按1次F12,然后你会看到跟前面一样

的时间计算过程,我们一直按F10,返回到如下代码处。
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040B9CA(C)
:0040B9D9 8D942444020000          lea edx, dword ptr [esp+00000244]
* Possible Reference to Dialog: DialogID_0083, CONTROL_ID:00FF, ""
:0040B9E0 6AFF                    push FFFFFFFF
:0040B9E2 52                      push edx
:0040B9E3 8D4C242C                lea ecx, dword ptr [esp+2C]
:0040B9E7 E81E920300              call 00444C0A
:0040B9EC 8D442420                lea eax, dword ptr [esp+20]
:0040B9F0 50                      push eax
:0040B9F1 E860920300              call 00444C56    //这个函数内一个地方对时间进行计算,类似上面的那部分。
:0040B9F6 8B4C2420                mov ecx, dword ptr [esp+20]
:0040B9FA 8B542424                mov edx, dword ptr [esp+24]
:0040B9FE 8BC1                    mov eax, ecx
:0040BA00 2BC2                    sub eax, edx  
:0040BA02 3BCA                    cmp ecx, edx  //新旧时间长度的比较
:0040BA04 0F8C07030000            jl 0040BD11       //此处要NOP掉,换成6个NOP即可。
:0040BA0A 3D008D2700              cmp eax, 00278D00
:0040BA0F 0F8FFC020000            jg 0040BD11     //此处要NOP掉,换成6个NOP即可。
:0040BA15 E8C3640400              call 00451EDD
:0040BA1A 85C0                    test eax, eax
:0040BA1C 750A                    jne 0040BA28
* Possible Reference to Dialog: DialogID_0083, CONTROL_ID:00FF, ""
:0040BA1E 6AFF                    push FFFFFFFF
:0040BA20 53                      push ebx
* Possible Reference to String Resource ID=00117: "?OLE2.0?
KingAmp勮燒稞譹?"
:0040BA21 6A75                    push 00000075
:0040BA23 E8C43B0400              call 0044F5EC
*
*略去无用代码
*
=============================================
后记:
经过2个小时的奋斗,终于完成了这个破文,希望对菜鸟有些启发。感谢金山的软件让我们实践!用UltraEDIT修改这几个地方,我们的金山软件又重新

露出它那金色的笑脸。:)即使你修改到任意时间,软件都不过期了!目的已经达到了。收兵!
感谢您阅读此文!
Qduwg
qduwg@163.com