题 目:消除金山影霸和音频解霸时间限制
软件名称:金山影霸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
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法