再貼一篇cd-chcek破解譯文,我自己譯的,文章來源不詳,若覺得還可以,給點鼓勵,我會繼續努力。
這次的目標是:
Warlords 3 - Darklords Rising
工具: SICE, W32Dasm
保護:CD-checks 加filesize check(檔案長度檢測)
破解參考:
* Reference To: KERNEL32.GetDriveTypeA, Ord:00CEh
|
:00445853 FF1540F85900 Call dword
ptr [0059F840]
:00445859 83F805
cmp eax, 00000005 <-- 你在這裡,這是一個檢測光碟型別的指令
:0044585C 757A
jne 004458D8
:0044585E 8D45E4
lea eax, dword ptr [ebp-1C]
:00445861 8D4D94
lea ecx, dword ptr [ebp-6C]
:00445864 50
push eax
* Possible StringData Ref from Data Obj ->"%sW3.DAT" <--在光碟上看是否有這個檔案
|
|
:00445865 68603E4F00 push
004F3E60 <-- 壓入檔案指標
:0044586A 51
push ecx
:0044586B FFD7
call edi <-- call getdrivetypea
:0044586D 83C40C
add esp, 0000000C
:00445870 8D4D94
lea ecx, dword ptr [ebp-6C]
:00445873 6A00
push 00000000
* Possible Reference to String Resource ID=00001: "Error!"
|
:00445875 6A01
push 00000001
:00445877 51
push ecx
:00445878 8D8D84FEFFFF lea ecx, dword
ptr [ebp+FFFFFE84]
:0044587E E8FD330900 call
004D8C80 <-- 檢查檔案 (如果eax == 1 ->檢測透過)
:00445883 85C0
test eax, eax <-- 看是否檢測到檔案
:00445885 7451
je 004458D8 <-- 如果沒有就跳轉
:00445887 8D8D84FEFFFF lea ecx, dword
ptr [ebp+FFFFFE84]
:0044588D E8DE350900 call
004D8E70
:00445892 8D45E4
lea eax, dword ptr [ebp-1C]
:00445895 8D4D94
lea ecx, dword ptr [ebp-6C]
:00445898 50
push eax
* Possible StringData Ref from Data Obj ->"%sDRAKDUM\DRAKDUM0.SMK" <--
也要檢查是否有這檔案
|
:00445899 68483E4F00 push
004F3E48 <-- 壓入檔案指標
:0044589E 51
push ecx
:0044589F FFD7
call edi <-- call getdrivetypea
:004458A1 83C40C
add esp, 0000000C
:004458A4 8D4D94
lea ecx, dword ptr [ebp-6C]
:004458A7 6A00
push 00000000
* Possible Reference to String Resource ID=00001: "Error!"
|
:004458A9 6A01
push 00000001
:004458AB 51
push ecx
:004458AC 8D8D84FEFFFF lea ecx, dword
ptr [ebp+FFFFFE84]
:004458B2 E8C9330900 call
004D8C80 <-- 檢測 (若eax == 1 ->檢測透過)
:004458B7 85C0
test eax, eax
:004458B9 741D
je 004458D8
:004458BB 8D8D84FEFFFF lea ecx, dword
ptr [ebp+FFFFFE84]
:004458C1 E89A360900 call
004D8F60 <-- 跟入!!
Ok.. 這就是那兩個檢測.. 讓我們看最後一個檢測, 跟入那個 call
:004D8F60 56
push esi
:004D8F61 57
push edi
:004D8F62 8BF9
mov edi, ecx
:004D8F64 33F6
xor esi, esi
:004D8F66 39B708010000 cmp dword
ptr [edi+00000108], esi
:004D8F6C 7415
je 004D8F83
:004D8F6E 56
push esi
:004D8F6F 8B870C010000 mov eax, dword
ptr [edi+0000010C]
:004D8F75 50
push eax
* Reference To: KERNEL32.GetFileSize, Ord:00DAh <-- 獲取 DRAKDUM0.SMK檔案的長度
GetFileSize是最後的檢查了,它決定了DRAKDUM0.SMK的長度而且如果沒有發現檔案,eax將被賦值0,檔案如果找到,EAX就是2B465C(檔案長度的十六進位制)!你自己看一看吧,2836060
= 2B465C。
唉..我們經歷了艱難而漫長的道路..現在我們知道做那些修補了.
:0044587E E8FD330900 - call 004D8C80 改成 -> B801000000 - mov eax, 00000001
:004458B2 E8C9330900 - call 004D8C80 改成 -> B801000000 - mov eax, 00000001
:004458C1 E89A360900 - call 004D8F60 改成 -> B85C462B00 - mov eax, 002B465C
ok,任務完成,收工。
Static Vengeance