将ACDSee V3.1 Build 921试用版变为注册版 (5千字)
将ACDSee V3.1 Build 921试用版变为注册版by liangs 2001/3/18
说明:软件可从《电脑报2000年合订本》配套光盘中获得。
前两天买了套《电脑报2000年合订本》,装了一下这个软件觉得还不错,比原来
的2.4版功能强劲了不少。它的限制主要是时间限制,破掉它的时间限制很简单,但
程序启动后标题栏显示的Trial Version让人看到很不舒服,我们试着拿掉它看看。
(1)首先来搞定时间问题。过期后弹出 Trial Period Expired 的提示框,用W32Dasm
反汇编后,我们查找Expired的字样,我们可以找到如下的地址:
* Reference To: InTouchClient.?TrialPeriod_GetDaysLeft@InTouchClient@@QAEHXZ, Ord:005Dh
|
:00404596 FF1564824D00 Call dword ptr [004D8264]
:0040459C 85C0 test eax, eax
:0040459E 7F16 jg 004045B6
* Reference To: InTouchClient.?g_itc@@3VInTouchClient@@A, Ord:0069h
|
:004045A0 8B0D30824D00 mov ecx, dword ptr [004D8230]
:004045A6 6A00 push 00000000
* Reference To: InTouchClient.?TrialMode_ShowExpiredBox@InTouchClient@@QAEHPAUHWND__@@@Z,
Ord:005Bh
|
:004045A8 FF155C824D00 Call dword ptr [004D825C]
:004045AE 85C0 test eax, eax
:004045B0 7521 jne 004045D3
:004045B2 83C408 add esp, 00000008
:004045B5 C3 ret
上面的 TrialMode_ShowExpiredBox 字样已经很能说明问题了,其它地方也能找到Expired
的字样,但是一看就知道不是,当然如果你看不出来的话,你就下bpx 00xxxxxx试试就知道了,
根本就不会在那儿中断下来。
很明显只要将0040459E处的jg 004045B6改为Jmp 004045B6就可以搞定时间问题了。
(2)接着要搞定的是标题栏显示的Trial Version字样。我们查找Trial Version的字样,我们可
以找到如下两处地址:
第一处地址:
:004172D0 B900434F00 mov ecx, 004F4300
:004172D5 E816320000 call 0041A4F0
:004172DA 85C0 test eax, eax
:004172DC 7529 jne 00417307
:004172DE 8D8C2414010000 lea ecx, dword ptr [esp+00000114]
:004172E5 6A50 push 00000050
:004172E7 51 push ecx
* Reference To: KERNEL32.lstrlenA, Ord:0335h
|
:004172E8 FF1550834D00 Call dword ptr [004D8350]
:004172EE 8D940418010000 lea edx, dword ptr [esp+eax+00000118]
:004172F5 A124434F00 mov eax, dword ptr [004F4324]
:004172FA 52 push edx
* Possible Reference to String Resource ID=00195: " Trial Version"
^^^^^^^^^^^^^^^^^
|
:004172FB 68C3000000 push 000000C3
:00417300 50 push eax
------------------------------------------------------------------------
第二处地址:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00465A0E(U)
|
:00465A36 B900434F00 mov ecx, 004F4300
:00465A3B E8B04AFBFF call 0041A4F0
:00465A40 85C0 test eax, eax
:00465A42 7520 jne 00465A64
:00465A44 8D442408 lea eax, dword ptr [esp+08]
:00465A48 6A50 push 00000050
:00465A4A 50 push eax
:00465A4B FFD6 call esi
:00465A4D 8B1524434F00 mov edx, dword ptr [004F4324]
:00465A53 8D4C040C lea ecx, dword ptr [esp+eax+0C]
:00465A57 51 push ecx
* Possible Reference to String Resource ID=00195: " Trial Version"
^^^^^^^^^^^^^^^^^
|
:00465A58 68C3000000 push 000000C3
:00465A5D 52 push edx
你注意看一下就可以发现,在判断是否是"Trial Version"的时候,在前面共同都
调用了call 0041A4F0来判断eax的值,如果eax到时候为0就铁定是" Trial Version"
我们进call 0041A4F0的里面去看看:
* Referenced by a CALL at Addresses:
|:004044F2 , :0040468F , :0040488B , :004049FE , :004087DC
|:004088D3 , :00412A6F , :004172D5 , :0041837B , :00418499
|:0043D2B6 , :0043D3AB , :0043D4B9 , :0043D5A5 , :0043D6E6
|:0045A549 , :00465A3B
|
:0041A4F0 33C0 xor eax, eax
:0041A4F2 C3 ret
:0041A4F3 90 nop
:0041A4F4 90 nop
:0041A4F5 90 nop
:0041A4F6 90 nop
:0041A4F7 90 nop
我们发现这里只有两行代码就是使eax为0,而且还有很多地方要调用这个Call,如果这里
eax返回的是1的话,我们的目的就完成了,好在0041A4F3后面有好几个nop可以给我们用。
将上面代码简单修改如下就可以了:
:0041A4F0 33C0 xor eax, eax
:0041A4F2 40 inc eax
:0041A4F3 c3 ret
现在再重新启动ACDSee看看,是不是已经变成注册版了,还有一点不尽入人意的地方就是
打开About ACDSee...菜单时,里面的"The software is license to:"和"license number:"
还是空的,要让它在这显示你的名字也很简单,用RegMon检测软件对注册表的读写,我们
可以找到如下的地方,写个注册文件运行一下就可以了,至此ACDSee V3.1就彻底搞定了。:->
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\ACD Systems\ACDInTouch]
"UserName"="liangs"
"CompanyName"="ZTE"
"UserEMail"="liangs@wx88.net"
[HKEY_LOCAL_MACHINE\Software\ACD Systems\ACDSee]
"LicenseNumber"="ZTE389"
[HKEY_CURRENT_USER\Software\ACD Systems\ACDInTouch]
"UserName"="liangs"
