拷貝心得第三集
               ┌─┐  ┌─┐  ┌─┐  ┌─┐  ┌∞
           └─┘  └─┘  └─┘  └─┘  └─┘
        ┌────────────────────┐
        │ 軟體蛀蟲站資料填寫 ,請勿修改其內容     │
        │  90 網之 2 ----> 597-1306   24Hr       │
        └────────────────────┘
               ====  第五章  保護法  ====

    ┌─────────┐
    │  5-1  無縫鎖介紹 │
    └─────────┘

    方法 : 因為一個磁軌無法容納 N=6 ,所以會格式化出壞軌(BAD CRC)
           同時利用磁碟機無法正確寫入索引孔附近資料,因此拷貝卡等
           硬體拷被工具也無法拷貝,但如果仍要讀該軌時,磁碟就會順便
           將索引孔的資料讀出,只要比對其資料即可知是否原版。
    流程 :           ┌────────┐
                     │  Reset Driver  │
                     └───┬────┘
                     ┌───┴────┐
                     │  Read a Track  │
                     └───┬────┘
                     ┌───┴────┐  不是  →
                     │  比對是否壞軌  ├──────┐
                     └───┬────┘            │
                             │  是                  │
                     ┌───┴────┐ 非預設資料 │
                     │   比對資料區   ├──────┤
                     └───┬────┘        →  ├───────┐
                     ┌───┴────┐            │   失敗結束   │
                     │   成功的執行   │            └───────┘
                     └────────┘

    [[[  FORMAT A磁碟第29h軌,第零面,第1個磁區  ]]]
      *****  FORMAT UTILITY  *****

              MOV AX,0000  ; 重置磁碟
              INT 13       ;
              MOV AX,0501   ;
              MOV BX,200    ; FORMAT 參數
              MOV CX,2901   ; 請查 DOS 手冊
              MOV DX,0000   ;
              INT 13
              JB  'FORMAT ERROR'
              JMP 'FORMAT COMPLETE'
       ES:200 29 01 01 06    (ID 欄值,請看第二集)

      *****  TRACK DATA  *****

              MOV AX,0000
              INT 13
              MOV BX,0000     ; ┐
              MOV DS,BX       ; │ 磁碟參數表,放在 0000:0525
              MOV BX,0525     ; ┘
              MOV AL,06       ; N=6
              MOV [BX],AL     ; 將 0000:0525 磁碟參數改為可讀 N=6 的磁區
              MOV AX,0201      ; ┐
              MOV BX,300       ; │ 讀取 29h 軌,第 0 面,第一號磁區
              MOV CX,2901      ; │ 讀到的資料放到 ES:BX
              MOV DX,0000      ; │ 請查 DOS 手冊
              INT 13           ; ┘
              CMP AL,10        ;    是否 BAD CRC
              JZ  'TEST OK'    ;    如果是則跳越到比對資料
              JMP 'ERROR'

          由於 N=6 已超過一個磁區所能容納的範圍,因此變成 BAD CRC
          AL 的返回代碼請參考 DOS 技術手冊。

      ┌──────────┐
      │  5-2  雷射保護     │
      └──────────┘
         方法 : 將磁片上某一軌用雷射將之破壞,使得該軌原磁片特性全毀
                雷射準確性高,可100%破壞特定軌,而一般使用者不會有雷
                射,也不會花錢買,而造成無法拷貝。
         流程 :
                        ┌───────────┐
                        │ 格式化該磁軌(Format) ├──┐ 格式化失敗
                        └─────┬─────┘    │
                            ┌───┴────┐      │
                            │  寫入該軌資料  ├───┤ 防寫保護
                            └───┬────┘      │ 或寫入失敗
                            ┌───┴────┐      │
                            │  讀取該軌資料  │      │
                            └───┬────┘      │
                        ┌─────┴───────┐│
                        │  比對是否與寫入資料相同  ├┤ 完全相同
                        └─────┬───────┘│
                            ┌───┴───┐    ┌─┴─┐
                            │   Test OK    │    │ 失敗 │
                            └───────┘    └───┘


            *****  TEST PROGRAM  *****

                    MOV AX,0000
                    INT 13
                    MOV AX,0509     ;
                    MOV BX,0200     ;
                    MOV CX,XXXX     ; Format a Track
                    MOV DX,XX00     ;
                    INT 13          ;
                    JB  'ERROR'
                    MOV AX,0201     ;
                    MOV BX,0200     ;
                    MOV CX,XXXX     ; Read a Track
                    MOV DX,XX00     ;
                    INT 13          ;
                    JNB 'ERROR'
                    JMP 'Compare DATA'

        ┌─────────┐
        │  5-3  Weak Bits  │
        └─────────┘

     方法 : 使用微弱的寫入信號,造成磁片上有介於0與1之間的訊號
            磁碟機每次讀取時會讀到不同資料,一般磁碟機無法寫入
            介於0與1的訊號,只能利用寫入時突然 Reset 造成 Weak
            Bit ,旦準確度不高,只能靠外來硬體拷貝程式(拷貝卡)

     流程 :
               ┌──────────┐
               │  讀取該軌放入"A"區 │
               └────┬─────┘
               ┌────┴─────┐
               │  再讀一次放入"B"區 │
               └────┬─────┘
               ┌────┴─────┐
               │ 比對"A"與"B"的資料 ├─┐
               └────┬─────┘  │  資料完全相同
                         │              │┌───┐
                     ┌─┴──┐        └┤ 失敗 │
                     │  成功  │          └───┘
                     └────┘

            *****  Weak Bit Test  *****

                MOV AX,0000
                INT 13
                MOV AX,0201       ┐
                MOV BX,0200       │
                MOV CX,0000       │ 讀資料到 ES:200
                MOV DX,0000       │
                INT 13            ┘
                MOV AX,0000
                INT 13
                MOV AX,0201       ┐
                MOV BX,0400       │
                MOV CX,0000       │ 讀資料到 ES:400
                MOV DX,0000       │
                INT 13            ┘
        LOOP:   MOV BX,200           ┐
                MOV AL,ES:[BX]       │ 比對是否相同
                CMP AL,ES:[BX+200]   │ 若相同則 LOOP
                JZ  LOOP             ┘
                CMP BX,3FF           ┐ 是否比對完畢
                JZ  'ERROR'          ┘
                JMP 'TEST OK'        ; TEST OK

     以上的保護都是從軟體上抄下的,將之簡化後登出,不過上述例子都是使用
     磁碟 I/O (INT 13h) 方式讀取保護,因此很容易被攔截而破解,所以最好的
     方法就是將 ROM (BIOS) SAVE 到程式內,如果須要使用到 INT 13h 時,就
     呼叫自己程式內的 BIOS ,這樣就沒有問題了,但是由於 ROM 有 32K ,請自
     行抓出可用的程式,擺在自己程式內,這樣就算有XX防寫程式也不能防止被
     寫入資料,但由於此方法必需考慮程式是否過大、版權問題,所以少有人用
     之,例如目前市面常見的 SoftGard 2.00~3.01 都是自己寫磁碟 I/O ,所以
     程式龐大,因此將其功能分成三個小檔,分別工作之。

     SoftGard 3.00 保護簡介 :
       被 SoftGard 保護住的磁片有兩個隱藏檔,分別為 CML0300.HCL 以及
     VDF0300.VDF。首先由一個主檔啟動磁片,經過自我偵測程式,然後再把
     把 DEBUG 要 TRACE 用的 INT 0~INT 3 全部換成 SoftGard 所用的程式
     使得 DEBUG 等程式完全當掉,然後再讀取 CML0300.HCL 將自己程式完全
     解碼,使得SoftGard有正確程式可繼續執行(防單步執行),然後將保護軌
     資料與解碼後的 VDF0300.VDF 資料比對,若正確的話就將原主檔解碼,並
     還原各中斷向量,然後執行該檔。
       對於該種保護的強度可能只有那些真正解過的人才知道了,但是不管保
     護如何強勁,都有其致命傷,就是不管何時都禁止按 Ctrl-Break ,因此如
     果你在 DEBUG 下執行原版的軟體,那就在鍵入"G"後,連打 Ctrl-Break,
     因為就在它解開密碼的那一點,就會將程式中斷向量還原,然後執行其真正
     的程式,而因為它是最後一個步驟才還原中斷向量,因此您可以中斷其程式
     也就代表它正執行到保護與正確程式的交接點,就被你的快手中斷掉了,此
     時記憶體只留下來真正的程式,再寫回磁片就破解了,說穿就是這麼詐。

     由於筆者手上有一個類似被 SoftGard 保護的軟體,相當強撼,將在下一集
     為您大略說明,想寫一些防止被 TRACE 的保護,不能錯過。
                好啦,本篇講古到此為止,請稍待繼續觀賞....