再貼一篇cd-chcek破解譯文 (4千字)

看雪資料發表於2000-08-27

再貼一篇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

相關文章