暴力破解Paragon CD Emulator時間及功能限制
[下載]
已經很長時間了,估計應該在www.inhua.com下載,手裡的版本為1.02.007
[破解工具]
WDasm
IDA Pro
Trw2000
Regmonitor
Filemonitor
[破解過程]
透過使用軟體來收集資訊發現:
1. 軟體啟動的時候會跳出對話方塊,提示還有多少天的使用期。
2. 超過30天的試用期會提示過期了。程式呼叫一些功能時候也顯示過期了,拒絕呼叫。
3. Regmonitor發現程式找不到user和registration兩個登錄檔的值。
4. Add Image功能因為是Trial Version受到限制。
現在就可以開始動手術了。
使用WDasm和IDA Pro進行反彙編,檢視區別。
首先,cdman.exe經過反彙編,在WDasm的Import裡面,看到了對cdshell的函式的呼叫。看來程式還有一個cdshell.dll,
所以除了反彙編cdman.exe以外,還需要反彙編cdshell.dll。
浪費了許多時間後發現,程式的Trial Version和Full Version的版本號是不同的,因此似乎無法開啟註冊對話方塊來輸入
註冊碼,雖然使用ResHack可以看見註冊對話方塊。所以無法對上述3的資訊進行進一步操作。
IDA裡面甚至看到了license的檔名,cde.lic。不過,這個東東是為網路版應用的,個人版看來只需破解時間限制即可。
由於所有的提示資訊都可以在cdshell.dll的反彙編檔案中找到,所以,它成了主要目標。
既然是時間限制,很容易想到GetSystemTimeA;自從IDA配備了三個查詢Import,Export以及String Reference的plugin
以後,查詢的事情變得很簡單了。經過考慮,加上trw2000在這裡的跟蹤,注意力集中到了下面地方:
.........
.........
:1001C3C9 6800AB0410 push
1004AB00 <-------- IDA裡告訴我們,這裡是放入FlagEx
:1001C3CE 68B8A90410 push
1004A9B8 <-------- 這裡是登錄檔的路徑
:1001C3D3 E868160000 call
1001DA40
.........
.........
:1001C41A E811170000 call
1001DB30
:1001C41F 3BC3
cmp eax, ebx
:1001C421 7456
je 1001C479 <-------- 這裡不能跳,否則過期了。
:1001C423 8B54240C
mov edx, dword ptr [esp+0C]
:1001C427 51
push ecx
:1001C428 8BC4
mov eax, esp
:1001C42A 895E20
mov dword ptr [esi+20], ebx
:1001C42D 8D4C241C
lea ecx, dword ptr [esp+1C]
* Possible Reference to String Resource ID=00001: "Create CD Image File"
|
:1001C431 BB01000000 mov ebx,
00000001
:1001C436 8910
mov dword ptr [eax], edx
:1001C438 8D442414
lea eax, dword ptr [esp+14]
:1001C43C 50
push eax
:1001C43D E8BE160000 call
1001DB00
:1001C442 8B08
mov ecx, dword ptr [eax]
:1001C444 B807452EC2 mov eax,
C22E4507
:1001C449 F7E9
imul ecx
:1001C44B 03D1
add edx, ecx
:1001C44D 8BC3
mov eax, ebx
:1001C44F C1FA10
sar edx, 10
:1001C452 8BCA
mov ecx, edx
:1001C454 C1E91F
shr ecx, 1F
:1001C457 03D1
add edx, ecx <-------- edx顯示還有多少天。
:1001C459 895624
mov dword ptr [esi+24], edx <------- 這裡修改edx為1D(29天),程式會認為仍在使用期內
:1001C45C 5F
pop edi
:1001C45D 5E
pop esi
:1001C45E 5B
pop ebx
:1001C45F 83C408
add esp, 00000008
:1001C462 C3
ret
經過以上修改,發現程式沒有進行其他的過期檢測。第一步成功。
第二步來解它的NagScreen,就是提醒還有多少天的對話方塊。依舊在cdshell.dll裡面:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10006EFD(C)
|
:10006F08 8B442430
mov eax, dword ptr [esp+30]
:10006F0C 85C0
test eax, eax
:10006F0E 0F84B6000000 je 10006FCA
<---------- 跳去顯示NagScreen,因為下面可見“cdshell.cdMessageBox”
:10006F14 8D4C2408
lea ecx, dword ptr [esp+08]
:10006F18 E8EB2B0300 call
10039B08
:10006F1D 8D4C2404
lea ecx, dword ptr [esp+04]
:10006F21 C744244000000000 mov [esp+40], 00000000
:10006F29 E8DA2B0300 call
10039B08
..............
..............
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10006F0E(C)
|
* Possible Reference to String Resource ID=00048: "%s/s; %.3f kHz; %i Bits;
%s"
|
:10006FCA 6A30
push 00000030
* Possible Reference to String Resource ID=00062: "You work with the trial
version of the program.
This version"
|
:10006FCC 6A3E
push 0000003E
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10006F03(U)
|
* Possible Reference to String Resource ID=00140: "Paragon CD Emulator Manager"
|
:10006FCE 688C000000 push
0000008C
* Reference To: cdshell.cdMessageBox
|
:10006FD3 E888FEFFFF call
10006E60
:10006FD8 83C40C
add esp, 0000000C
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:10006EF1(C)
|
:10006FDB 8B4C2438
mov ecx, dword ptr [esp+38]
:10006FDF 8BC6
mov eax, esi
:10006FE1 64890D00000000 mov dword ptr fs:[00000000],
ecx
:10006FE8 5E
pop esi
:10006FE9 83C440
add esp, 00000040
:10006FEC C3
ret
所以乾脆讓10006F0E跳到10006EF1來,結果,程式啟動時候以及以後的NagScreen都不見了。
=======此為 cdshell.dll反彙編的東東==========
Exported fn(): cdTrialInfo - Ord:0027h
:10007750 6A43
push 00000043
* Possible Reference to String Resource ID=00070: "
This function is unavailable in the trial version.
You can"
|
:10007752 6A46
push 00000046
* Reference To: cdshell.cdRestrictionInfo
|
:10007754 E8D7FDFFFF call
10007530
:10007759 83C408
add esp, 00000008
:1000775C C3
ret
=======此為 cdman.exe反彙編的東東==========
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040A00F(C), :0040A018(C)
|
:0040A028 E8B39AFFFF call
00403AE0
:0040A02D 85C0
test eax, eax
:0040A02F 741F
je 0040A050 <-------------- 需要跳轉。
:0040A031 8B8500010000 mov eax, dword
ptr [ebp+00000100]
:0040A037 85C0
test eax, eax
:0040A039 7515
jne 0040A050
:0040A03B 8B8504010000 mov eax, dword
ptr [ebp+00000104]
:0040A041 85C0
test eax, eax
:0040A043 750B
jne 0040A050
* Reference To: cdshell.cdTrialInfo, Ord:0026h <--------------
要跳過這裡
|
:0040A045 FF15D4CE4500 Call dword
ptr [0045CED4]
:0040A04B E9C9040000 jmp 0040A519
總結一下需要修改的地方:
[cdshell.dll]
1. 1001C421 7456 ---> 9090
2. 1001C457 03D1
add edx, ecx
<---- 改成mov byte ptr [esi+24], 1D,由於
1001C459 895624
mov dword ptr [esi+24], edx <---- 原來6個位元組,改後成5個,要添一個90
3. 10006F0E 0F84B6000000 je
10006FCA ---> jmp 10006EF1
[cdman.exe]
1. 0040A02F 741F
je 0040A050 ---> jmp 0040A050
於是,破解完成了。:)
不過,希望有高手能講解一下它的時間是如何運算的。