三角洲部隊之大地勇士光碟版的破解 (3千字)

看雪資料發表於2001-08-24

三角洲部隊之大地勇士光碟版的破解

前幾天到電腦市場買了這個遊戲,沒光碟也能玩,不過只能玩Multiplayer的join模式,不插光碟毫無提示,破解頗費了一番周折,首先檢視了安裝目錄下的檔案,發現DFLW.CD裡面有光碟機的磁碟機代號G:,先下斷BPX GETDRIVETYPE,執行遊戲......,怎麼?沒攔住?用W32DASM反彙編DFLW.EXE,發現並沒加殼,檢視輸入的函式,KERNEL32裡沒有此函式,難怪沒攔住。但看到GETVOLUMEINFORMATIONA,雙擊它,來到:

* Reference To: KERNEL32.GetVolumeInformationA, Ord:01DEh  ----------------讀取卷資訊
                                  |
:0042E7E9 FF1544524E00            Call dword ptr [004E5244]
:0042E7EF 6A0B                    push 0000000B
:0042E7F1 8D8424B4000000          lea eax, dword ptr [esp+000000B4]

* Possible StringData Ref from Data Obj ->"DELTAFORCELW"    -----------------這不是光碟的卷名嗎?有戲!
                                  |
:0042E7F8 682C834E00              push 004E832C
:0042E7FD 50                      push eax
:0042E7FE E89DA60800              call 004B8EA0
:0042E803 83C40C                  add esp, 0000000C
:0042E806 85C0                    test eax, eax
:0042E808 7549                    jne 0042E853
:0042E80A 53                      push ebx

* Possible StringData Ref from Data Obj ->"CDFS"        -------------------  光碟的標誌
                                  |
:0042E80B BE24834E00              mov esi, 004E8324
:0042E810 8D8424B4010000          lea eax, dword ptr [esp+000001B4]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042E839(C)
|
:0042E817 8A10                    mov dl, byte ptr [eax]
:0042E819 8A1E                    mov bl, byte ptr [esi]
:0042E81B 8ACA                    mov cl, dl
:0042E81D 3AD3                    cmp dl, bl
:0042E81F 751E                    jne 0042E83F
:0042E821 84C9                    test cl, cl
:0042E823 7416                    je 0042E83B
:0042E825 8A5001                  mov dl, byte ptr [eax+01]
:0042E828 8A5E01                  mov bl, byte ptr [esi+01]
:0042E82B 8ACA                    mov cl, dl
:0042E82D 3AD3                    cmp dl, bl
:0042E82F 750E                    jne 0042E83F
:0042E831 83C002                  add eax, 00000002
:0042E834 83C602                  add esi, 00000002
:0042E837 84C9                    test cl, cl
:0042E839 75DC                    jne 0042E817

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042E823(C)
|
:0042E83B 33C0                    xor eax, eax
:0042E83D EB05                    jmp 0042E844

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0042E81F(C), :0042E82F(C)
|
:0042E83F 1BC0                    sbb eax, eax
:0042E841 83D8FF                  sbb eax, FFFFFFFF

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042E83D(U)
|
:0042E844 85C0                    test eax, eax
:0042E846 5B                      pop ebx
:0042E847 750A                    jne 0042E853
:0042E849 C705CCD9CD0000000000    mov dword ptr [00CDD9CC], 00000000

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0042E775(C), :0042E808(C), :0042E847(C)
|
:0042E853 5E                      pop esi
:0042E854 81C4AC020000            add esp, 000002AC
:0042E85A C3                      ret
試著將上述的幾個跳轉改一下,均未成功,苦思冥想時,覺得:0042E849  mov dword ptr [00CDD9CC], 00000000有點問題,試著改為mov dword ptr [00CDD9CC], 00000001,再執行遊戲,哇!成功了。原來光碟檢測函式的返回值是個全域性變數,在DS:00CDD9CC處,當它為0時表示無光碟,為1時表示有光碟。
用HIEW32t開啟DFLW.EXE找到:
                      C705CCD9CD0000000000
                  改為:
                      C705CCD9CD0001000000
搞定!

大波羅
2001.8.24
轉載請保持完整,謝謝

相關文章