┌─────────┐
│拷貝心得第三十九集│    要有好的配備才能用好的軟體
└─────────┘    請早日提升你的電腦等級。
---------------------------------------------------------------
前言:
    拷貝心得已經連載三年餘了 ,由於筆者工作較忙 ,沒時間撰寫本心
得 ,所以出版速度已很難趕上每月一期的速度 ,請多包涵。
    底下筆者再增加一些撥殼的好用方法。
---------------------------------------------------------------
第一章  8259的設定

Q.  很多人在網路信中問到如何重設8259 ,底下先來回答這個問題。
A.  電腦內有一顆8259(AT級兩棵以上) ,是用來處理電腦的中斷向量 ,
    當電腦硬體觸動IRQ線時(介面槽某腳位),便會觸動8259 ,產生硬體
    中斷 ,再由8259產生INT_8 - INT_F的中斷 , 這些中斷是可以用軟
    體重新設定的 ,重設這些向量主要的目地很多 ,例如遊戲剋星常常
    要與遊戲軟體搶鍵盤中斷向量 ,以便獲得控制權 ,但又怕遊戲不停
    的搶鍵盤向量 ,所以便重新設定這些向量 ,比如按鍵盤改觸動INT_E1
    這樣就不必和遊戲軟體搶鍵盤控制權。所以底下就來認識它。

    書中多有介紹 IRQ0 對應 INT_08 (時間)
                 IRQ1 對應 INT_09 (鍵盤)
                        .
                        .
                        .
                 IRQ7 對應 INT_0F (LPT PORT)
                       (不多介紹了)

    但是設定中斷時 ,必需找一塊連續的八個中斷位置供人使用 ,因為
    8259是一次設定八組的。

        CLI                     ;以下均以16進制表示
        MOV     AL,11
        OUT     20,AL
        MOV     AL,E0           ;對應中斷位置
        OUT     21,AL
        MOV     AL,04
        OUT     21,AL
        MOV     AL,01
        OUT     21,AL
        MOV     AL,B8
        OUT     21,AL
        STI

    這樣就是重新設定8259 ,以後發生IRQ中斷 ,就會觸動INT_E0起的連
    續的八個中斷向量(INT_E0 - INT_E7) ,執行本程式前 ,請記得拷貝
    INT_08 - INT_0F 至 INT_E0 - INT_E7 , 因為你已把8259觸動的向
    量改到此了。


    原本 IRQ0 觸動 → 8259 觸動 INT_08
    現在 IRQ0 觸動 → 8259 觸動 INT_E0

    原本 IRQ1 觸動 → 8259 觸動 INT_09
    現在 IRQ1 觸動 → 8259 觸動 INT_E1
                     .
                     .
                     .
    原本 IRQ7 觸動 → 8259 觸動 INT_0F
    現在 IRQ7 觸動 → 8259 觸動 INT_E7

    如果你不拷貝上述中斷向量 ,那麼當你按下鍵盤 ,觸動IRQ1時...會
    怎麼樣你應該很清楚了。

---------------------------------------------------------------
Soft-ICE 介紹:
   Soft-ICE 是一套對DOS下的防破能力有極強的殺傷力 ,因為DOS所能
做的防破手段都無法當掉Soft-ICE ,例如當掉電腦內所有的中斷向量 ,
或是將堆疊指標指向程式碼 ,這些都不會造成被除錯的程式或Soft-ICE
當掉 ,操作上幾乎與SymDEB操作法一樣。

    想要玩這套軟體 ,首先你必需要有386以上機器 ,並配備2MB以上的
記憶體才玩的起 ,且你的CONFIG.SYS內不可以掛任何會使用ExtMEM的驅
動程式 ,如Himem.Sys或Qemm386 Vdisk.Sys等等會用延伸記憶體驅動程
式 ,接著才可以使用。

    你有兩種驅動的方法:
    1.在CONFIG.SYS 內加上 DEVICE=S-ICE.EXE
    2.在DOS下直接執行

    Symdeb 與 S-ice功能比較:
┌──────┬───────┬────────┐
│功能        │ SYMDEB │   S-ICE   │
├──────┼───────┼────────┤
│基本配備    │80286 /640K   │80386 /2048K    │
├──────┼───────┼────────┤
│一般指令    │有提供        │有提供          │
├──────┼───────┼────────┤
│佔主記憶體  │約36K         │0 Byte          │
├──────┼───────┼────────┤
│佔Ext.      │0 Byte        │約180K (v2.52)  │
├──────┼───────┼────────┤
│繪圖模式    │無法Trace     │文字頁/繪圖頁   │
│            │              │可兩頁切換      │
├──────┼───────┼────────┤
│保護模式    │無法使用      │某些條件下可用  │
├──────┼───────┼────────┤
│當掉中斷向量│跟著當機      │照常執行        │
├──────┼───────┼────────┤
│OUT 21,BA   │當鍵盤        │鍵盤仍可動作    │
├──────┼───────┼────────┤
│SS:SP 指向程│單步執行程式碼│仍可單步追蹤    │
│式碼        │被蓋掉        │                │
├──────┼───────┼────────┤
│"G" 的處理  │在中斷點放"CC"│硬體Break       │
│            │              │不會變動程式碼  │
├──────┼───────┼────────┤
│檔案讀寫能力│可隨時 "L" "W"│不支援          │
├──────┼───────┼────────┤
│其它        │下達任何執行命│另有其它特異功能│
│            │令時 ,會更改某│後面會再提到。  │
│            │些中斷(INT_1) │                │
└──────┴───────┴────────┘

註一:
    Symdeb 是一套類似DOS-DEBUG的軟體 ,只是可接受較多的命令 ,
例如計算功能。


註二:
    S-ICE特異功能包含 ,可利用某些條件組合適時中斷程式執行:

    讀KeyPro時 ,會對Print PORT (3BC.378)讀寫 ,你可以下"BPIO 3BC
    RW" ,意思是說當程式對此PORT做 Read/Write時就中斷程式執行。

    你想知道程式在那一段是在更改 0:C 的位址 ,只需下"BPM 0:C W"
    意思是當程式嘗試寫入 0:C 的位址 ,就會中斷程式執行。

    當你在追蹤某程式 ,想砍掉某一段秀出的文字 ,你可以下 "BPINT 21
    AH=9" ,這樣如有人用 ah=9 ,int_21h 時 ,便會中斷程式。

    最後有些程式會把int_3指向自己 ,你想在它呼叫int_3時中斷程式 ,
    只需 "I3HERE ON" ,以後遇到int_3就會停下來等你。

    BC.BE.BD ,為清除.Enabel.Disable 硬體中斷功能。
    WIN 為放大 Soft-ICE 視窗的命令。

    如果你想Load一個軟體 ,可用附屬軟體 LDR.EXE 來叫此軟體 ,這樣便
    能在軟體讀進記憶體內時 ,自動打開Soft-ICE供您除錯。

註三:
    關於撥殼一事 ,底下有個隱藏的密技 ,供您自幾發揮。

    我們知道程式載入記憶體時 ,是從 DS:100 開始載入的 ,外加保護一
    般都會把被保護的程式碼編碼 ,編碼的範圍多半是從 DS:100 至程式
    末尾 ,程式執行時會先驗證保護 ,然後將主程式解碼 ,跳到主程式去
    執行 ,如果我們能在它解碼完 ,將程式碼寫回磁片 ,便可以玩EXEWRITE
    了。也就是說你可以下 "BPM 某位址" 便可適時中斷 ,再往下執行幾
    行指令便可找到進入點。

    因為Soft-ICE並不支援檔案回寫功能 ,所以你必需要突破這道關卡 ,
    方法很多種 ,可以自己寫程式 ,或用其它方式。

    撥COPYLOCK的外殼最快速的方法:(使用母片)
    LDR 
    :BPM DS:100 RW
    :G
    AX=11B8 BX=0100 CX=0000 DX=11B5 SP=2004 BP=1FFE SI=FFFE DI=0007
    DS=166E ES=11A5 SS=166E CS=166E IP=0EF4   o d I s z a p c t
    166E:0EF4 07                POP     ES
    :U
    166E:0EF5 1F                POP     DS
    166E:0EF6 58                POP     AX
    166E:0EF7 FA                CLI
    166E:0EF8 2E8B16A71B        MOV     DX,CS:[1BA7]
    166E:0EFD 8ED2              MOV     SS,DX
    166E:0EFF 2E8B26A51B        MOV     SP,CS:[1BA5]
    166E:0F04 FB                STI
    166E:0F05 2EFF2EC11B        JMP     FAR CS:[1BC1]  (進入點)

    程式中斷後 ,再往下執行幾行命令即可進入主程式 ,接下來請讀者動腦
    筋 ,看看如何將程式碼回存 ,及參考EXEWRITE、EXESHAPE。
---------------------------------------------------------------