正版“盟軍敢死隊”密匙光碟加密破解實錄 (7千字)

看雪資料發表於2000-10-19

正版“盟軍敢死隊”密匙光碟加密破解實錄

        Write By liangs

宣告:本文不是叫你怎麼去盜版,而僅僅是作為一種Crack技術交流。
使用工具:Trw2000; W32Dasm; UltraEdit

好久沒寫點什麼了,只因為最近家裡剛剛添了個小Baby,忙的要死。
就把前不久剛剛破解的盟軍敢死隊光碟加密的記錄整理了一下,
權且充當一篇文章吧。

  在看這篇文章之前,建議大家先好好看看看雪兄整理的“論壇精華2”
中關於CD-CHECK的兩篇譯文,對大家會有很大的幫助,那裡面介紹的
光碟加密方式很有通用性。

  先用資源管理器檢視原光碟,發現光碟容量居然有3.05GB!
其中光碟根目錄下的Bbvn.afp,Btbw.afp,Etao.afp,Tbtp.afp
等四個檔案個個都有680MB以上,不用說可能又是SafeDisk之類的光碟
加密方式。

  對付上述光碟加密方式,我們通常都從盤上的那幾個680MB以上的檔案
入手,這裡是Tbtp.afp,Bbvn.afp,Btbw.afp,Etao.afp等四個檔案。

首先執行Comandos.exe,再執行Trw2000,下bpx GetDriveTypeA指令,
回到遊戲中,選擇遊戲選單中New Game下的Single Player選項。

* Reference To: KERNEL32.GetDriveTypeA, Ord:00CEh
                                  |
:00494A01 8B3514266600            mov esi, dword ptr [00662614]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00494A8C(C)
|
:00494A07 8D44240C                lea eax, dword ptr [esp+0C]
:00494A0B 885C240C                mov byte ptr [esp+0C], bl
:00494A0F 50                      push eax
:00494A10 FFD6                    call esi
GetDriveTypeA指令返回時我們停在這。

:00494A12 83F805                  cmp eax, 00000005
這條指令是不是很眼熟啊!

:00494A15 7570                    jne 00494A87
如果沒放光碟,將跳走。

* Possible StringData Ref from Data Obj ->"rb"
                                  |
:00494A17 68900F5F00              push 005F0F90
:00494A1C 881D10266000            mov byte ptr [00602610], bl

* Possible StringData Ref from Data Obj ->"d:\TBTP.AFP"

大家注意了,看見上面的"d:\TBTP.AFP"沒有,下面的判斷就是關於它的。
                                  |
:00494A22 6810266000              push 00602610
:00494A27 881D20266000            mov byte ptr [00602620], bl
:00494A2D 881D30266000            mov byte ptr [00602630], bl
:00494A33 881D40266000            mov byte ptr [00602640], bl
:00494A39 E8D2A81300              call 005CF310
檢查光碟是否有“TBTP.AFP”這個檔案
:00494A3E 83C408                  add esp, 00000008
:00494A41 8BF8                    mov edi, eax
:00494A43 85FF                    test edi, edi
:00494A45 750A                    jne 00494A51
如果光碟有“TBTP.AFP”這個檔案,就跳到下一個地址繼續檢查

:00494A47 C744241000000000        mov [esp+10], 00000000
:00494A4F EB2E                    jmp 00494A7F

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00494A45(C)
|
:00494A51 6A00                    push 00000000
:00494A53 6800A08329              push 2983A000
儲存偏移地址“2983A000”

:00494A58 57                      push edi
:00494A59 E8C2AD1300              call 005CF820
指標指向檔案中的偏移地址

:00494A5E 83C40C                  add esp, 0000000C
:00494A61 57                      push edi
:00494A62 E879AD1300              call 005CF7E0
取偏移地址處的檔案資料

:00494A67 83C404                  add esp, 00000004
:00494A6A 33C9                    xor ecx, ecx
:00494A6C 83F829                  cmp eax, 00000029
檔案偏移地址“2983A000”處的值是否等於“00000029”

:00494A6F 0F94C1                  sete cl
:00494A72 894C2410                mov dword ptr [esp+10], ecx
:00494A76 57                      push edi
:00494A77 E8F4A71300              call 005CF270
:00494A7C 83C404                  add esp, 00000004

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00494A4F(U)
|
:00494A7F 8B442410                mov eax, dword ptr [esp+10]
:00494A83 85C0                    test eax, eax
:00494A85 7514                    jne 00494A9B
如果檢查條件滿足,就跳走。

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00494A15(C)
|
:00494A87 FEC3                    inc bl
:00494A89 80FB5A                  cmp bl, 5A
:00494A8C 0F8E75FFFFFF            jle 00494A07
:00494A92 33C0                    xor eax, eax
EAX標誌清0,表示沒有放光碟

:00494A94 5F                      pop edi
:00494A95 5E                      pop esi
:00494A96 5B                      pop ebx
:00494A97 83C408                  add esp, 00000008
:00494A9A C3                      ret

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00494A85(C)
|
:00494A9B B801000000              mov eax, 00000001
EAX標誌置1,表示放入了光碟,並透過了“TBTP.AFP”檔案的檢查。

:00494AA0 5F                      pop edi
:00494AA1 5E                      pop esi
:00494AA2 5B                      pop ebx
:00494AA3 83C408                  add esp, 00000008
:00494AA6 C3                      ret

-------------------------------------------------------------------

從上面的ret返回後,我們來到0044CB04處,

* Referenced by a CALL at Addresses:
|:00447E9C  , :00448015 
|
:0044CAF0 83EC0C                  sub esp, 0000000C
:0044CAF3 A1980A5F00              mov eax, dword ptr [005F0A98]
:0044CAF8 85C0                    test eax, eax
:0044CAFA 90                      nop
:0044CAFB 53                      push ebx
:0044CAFC 56                      push esi
:0044CAFD 7413                    je 0044CB12

:0044CAFF E8EC7E0400              call 004949F0
這就是上面的光碟及“TBTP.AFP”檔案檢查判斷

:0044CB04 85C0                    test eax, eax
:0044CB06 740A                    je 0044CB12
跳就完蛋了!

:0044CB08 C705980A5F0000000000    mov dword ptr [005F0A98], 00000000

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0044CAFD(C), :0044CB06(C)

下面是光碟上那幾個*.AFP檔案的判別,與上面“TBTP.AFP”檔案的
分析一樣。

......部分相同程式碼略

* Possible StringData Ref from Data Obj ->"rb"
                                  |
:0044CB59 68900F5F00              push 005F0F90

* Possible StringData Ref from Data Obj ->"d:\BBVN.AFP"
對“BBVN.AFP”檔案的檢查
                                  |
:0044CB5E 6820266000              push 00602620
:0044CB63 E8A8271800              call 005CF310
:0044CB68 83C408                  add esp, 00000008
:0044CB6B 8BF0                    mov esi, eax
:0044CB6D 85F6                    test esi, esi
:0044CB6F 750A                    jne 0044CB7B
:0044CB71 C744241000000000        mov [esp+10], 00000000
:0044CB79 EB2E                    jmp 0044CBA9

......部分相同程式碼略

按F12返回更上一級Call,來到如下地址:

:00448015 E8D64A0000              call 0044CAF0
上面所有的判斷都在這個Call裡面
:0044801A 85C0                    test eax, eax
:0044801C 7418                    je 00448036

我們的目的就是要使,eax=1,使je 00448036不跳轉,
因此,只要將0044801C處的je 00448036改為NOP就可以了。

重新執行遊戲,New Game下的Single Player選項已經可以玩了,
不再需要光碟。不要以為這樣就已經破解完了,如果你再試試Load Game,
就會發現還要提示插入光碟,說明還沒破解乾淨。

在按下Load Game選單前再下bpx GetDriveTypeA指令
中斷後,我們還是會回到上面的00494A12處,
按F12返回上一級呼叫,來到0044CB06處
再按F12返回更上一級呼叫,來到00447EA3處
只要再將00447EA3的跳轉都改成NOP就可以了,至此,“盟軍敢死隊”
密匙光碟加密就完全破解完了。

相關文章