拷貝心得第四集
             ┌─┐  ┌─┐  ┌─┐  ┌─┐  ┌∞
         └─┘  └─┘  └─┘  └─┘  └─┘
        ┌────────────────────┐
        │ 軟體蛀蟲站資料填寫 ,請勿修改其內容     │
        │  90 網之 2 ----> 597-1306   24Hr       │
        └────────────────────┘
               ====  第六章  某種超級鎖  ====

    ┌─────────┐
    │  6-1  四川省某檔 │
    └─────────┘
-R
AX=0000  BX=0000  CX=786E  DX=0000  SP=01FE  BP=0000  SI=0000  DI=0000
DS=4B37  ES=4B37  SS=5267  CS=5267  IP=05B1   NV UP EI PL NZ NA PO NC

-U CS:05B1 CS:05EB

5267:05B1 5D             POP    BP           ┐
5267:05B2 8C46CF         MOV    [BP-31],ES   │  將程式碼從頭加至尾
5267:05B5 8746CD         XCHG   AX,[BP-33]   │
5267:05B8 59             POP    CX           │  因為任何的單步執行
5267:05B9 03467F         ADD    AX,[BP+7F]   │  都會更改程式碼[CC]
5267:05BC 45             INC    BP           │  加完正確值是 F6E2h
5267:05BD E2FA           LOOP   05B9         ┘  將之放到 AX 暫存器
5267:05BF FA             CLI                 ┐
5267:05C0 5C             POP    SP           │  從 SS:216-20A 抓資料替換
5267:05C1 1F             POP    DS           │  INT0-3的資料 ,如途中有單
5267:05C2 59             POP    CX           │  步執行 ,就更改其SS:20A值
5267:05C3 5B             POP    BX           │  這是因為當 INT0 被改後 ,
5267:05C4 8CCA           MOV    DX,CS        │  任何單步執行一旦用到INT3
5267:05C6 870F           XCHG   CX,[BX]      │  同時也會動到 INT0  ,跟著
5267:05C8 875702         XCHG   DX,[BX+02]   │  利用此將SS:20C的0C改掉 ,
5267:05CB 52             PUSH   DX           │  造成無限迴圈 ,正常繞三圈
5267:05CC 51             PUSH   CX           │  後會跳到 INT3 那行
5267:05CD 83EC04         SUB    SP,+04       │
5267:05D0 83FB0C         CMP    BX,+0C       │
5267:05D3 75ED           JNZ    05C2         ┘
5267:05D5 CC             INT    3            ─  直接用將AX與自己資料解碼
5267:05D6 FC             CLD                         ┐
5267:05D7 8FF7           POP    DI                   │
5267:05D9 71B4           JNO    058F                 │ 保護檢查程式
5267:05DB 8103142A       ADD    Word Ptr [BP+DI],2A14│
5267:05DF E6EC           OUT    EC,AL                │ (不用 INT13h 而
5267:05E1 52             PUSH   DX                   │  直接使用自己的
5267:05E2 0830           OR     [BX+SI],DH           │  磁碟 I/O )
5267:05E4 031A           ADD    BX,[BP+SI]           │
5267:05E6 BAB467         MOV    DX,67B4              │
5267:05E9 9F             LAHF                        │
5267:05EA 5A             POP    DX                   ↓
5267:05EB F4             HLT
-D SS:220

5267:0200  40 04 10 02 00 02 00 00-00 01 98 05 0C 00 16 02  @...............
5267:0210  00 00 03 04 04 00 A0 11-48 11 21 C1 1C 30 9A 6B  ...... .H.!A.0.k
5267:0220  5C E4 6D 8C D7 F0 EF FF-A3 6D AA B3 24 58 53 45  \dm.Wpo.#m*3$XSE
5267:0230  3F E2 C4 DD 56 ED C1 74-4A 7A D8 8B 77 50 6D 18  ?bD]VmAtJzX.wPm.
5267:0240  1F 1F 54 08 3D B3 48 CC-56 31 F9 85 20 2B AF 9A  ..T.=3HLV1y. +/.
5267:0250  DC C2 5A CB F4 95 E1 E4-07 AC 66 8F 8C 4B 98 8F  \BZKt.ad.,f..K..
5267:0260  30 64 19 1A 0C 82 18 C0-33 9F 25 43 42 9F 8D DC  0d.....@3.%CB..\
5267:0270  00 CC 93 8B DA C7 24 42-C1 88 3F 7C F3 B4 41 9E  .L..ZG$BA.?|s4A.

  說明 : 該程式一開始就計算程式碼 ,如果您使用了單步執行的話 ,程式就會被
         夾上[CC]碼 ,造成計算總值不對 ,然後再殺掉 INT0-INT3 防止 DEBUG
         之類的程式追蹤 ,如您有單步執行一定會動到 INT0-INT3 ,而造成某個
         特殊旗標(SS:20C)被改掉。
               5267:05CD 83EC04         SUB    SP,+04  ┐
               5267:05D0 83FB0C         CMP    BX,+0C  │
               5267:05D3 75ED           JNZ    05C2    ┘
         一次抓四個位元 ,比對是否有個 +0C 碼,如果沒有就繼續 ,一但單步執
         行 ,這個 +0C 就會被改掉,造成無限迴圈(當機) ,最後就跳到下一行去
         執行INT3(CS:598) ,不做任何比對AX暫存器 ,直接就當做是程式解碼用
          ,若暫存器資料正確則解碼後的程式才是正確的 ,不然就無法預知後果
         解碼後 ,開始使用解碼後的程式(磁碟 I/O)資料比對 ,如程式正確就把
         真正的主程式解碼和將自己的保護程式清除掉 ,防止被人看見程式解碼
         後的重要資料 ,最後還原 INT0-INT3 執行該程式。
         換句話說 ,您可以在 DEBUG 下執行該程式 ,但不能單步執行 ,因此您
         可以在執行當中連打 Ctrl-Break ,當它還原主程式後 ,正好您也取到
         控制權 ,將它中斷掉了 ,這時您可以去找 PSP 去看主程式在那裡 ,將
         破解檔存回磁片(假如功力夠 ,但筆者功力不足 ,無法辦到 )。


    ┌────────────┐
    │  6-2  Sega 公司的遊戲  │
    └────────────┘

4B37:0100 B80000         MOV    AX,0000    ┐
4B37:0103 CD13           INT    13         │ 這是筆者寫的一個讀取
4B37:0105 B80102         MOV    AX,0201    │ 該保護軌資料的程式
4B37:0108 BB0002         MOV    BX,0200    │
4B37:010B B90000         MOV    CX,0000    │ 讀取第零軌零面第零個
4B37:010E BA0000         MOV    DX,0000    │ 額外磁區。
4B37:0111 CD13           INT    13         │
4B37:0113 80FC10         CMP    AH,10      │ 其資料放到 ES:0200
4B37:0116 75E8           JNZ    0100       │
4B37:0118 CD20           INT    20         ┘

第一次讀該軌的資料如下 :
4B37:0200  44 45 44 30 31 32 33 34-35 36 37 38 44 8A C8 E8  DED012345678D.Hh
4B37:0210  08 C0 00 06 CE 44 23 40-00 38 D0 3C 38 1B 21 DE  .@..ND#@.8P<8.!^
4B37:0220  88 C0 00 00 00 00 00 00-00 00 00 00 00 00 00 00  .@..............
4B37:0230  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
4B37:0240  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
4B37:0250  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
4B37:0260  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
4B37:0270  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
第二次讀該軌的資料如下 :
4B37:0200  44 45 44 30 31 32 33 34-35 36 37 38 44 EA 0A 0C  DED012345678Dj..
4B37:0210  26 38 84 4D 9C 8C 46 C9-3D 1C 0D 02 AE D4 03 BD  &8.M..FI=....T.=
4B37:0220  36 45 BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  6E==============
4B37:0230  BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  ================
4B37:0240  BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  ================
4B37:0250  BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  ================
4B37:0260  BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  ================
4B37:0270  BD BD BD BD BD BD BD BD-BD BD BD BD BD BD BD BD  ================

  除了標頭的 "DED0123456789D" 以外資料都不一樣 ,原來這就是著名的
  保護 Weak-Bit ,這種保護無法用磁碟介面卡製造出(運氣好可以做出)
  但是由於該公司出版的遊戲都用此法保護 ,並且使用到 INT13h 很容易
  被長駐程式騙過去。
  筆者附上 CRCEDIT.ASM 供大家參"拷"使用,可騙過該公司的遊戲保護。
  (該軟體不得販賣圖利 ,使用後有任何後遺症 ,恕不負責)。

PS : 軟體的保護是為了使軟體作者的權益受到保護 ,手上有合法軟體者 ,
     不要到處散播 ,因為國內軟體剛起步 ,也希望大家合力去保護它 ,如
     您是一位寫軟體的作者 ,就可以感覺出希望大家購買合法軟體的心情
     (筆者不出版軟體) ,當您沒有能力購買原版軟體時 ,使用拷貝版有點
     愧對於良心 ,如您有能力購買正版軟體 ,希望您早日購買 ,不但用的
     安心 ,也有助於軟體更新版本 ,讓大家有更好的軟體與更多的軟體作
     者頭入國內軟體市場。

     附上的檔案分別是 RDATA.COM : 將資料讀到 CS:200 ,請用 DEBUG 來
                                  執行這個軟體。
                    CRCEDIT.ASM : 常駐後 ,可以騙過該保護 ,製造出類似
                                  Weak-Bit 的效果,該程式沒有偵測自己
                                  是否載入過,故可能被載入兩次以上。
                                  (可以自己加減用 ,騙騙看好不好玩??)





                還有更精彩的故事等著您 ,請繼續觀看續集....