+------軟體蛀蟲------+       軟體保護只能防君子   :: 保護智慧財產權
    |  拷貝心得第 20 集  |       不能防小人及玩家 ,   :: 比軟體保護還重
    +--------------------+       所以........         :: 要。

  *************************************************************************
  ┌─────────┐
  │1-1 常駐程式的威力│
  └─────────┘
    從前面幾集內容中 ,我們發現軟體保護的去除過程中 ,常駐軟體扮演了一個很重
    要的角色 ,如 SAVE、LOAD、IO、以及其它軟體 ,使得除錯較易。
    也因此 軟X世界的人最近的軟體大多禁止載入常駐軟體。

    所以這集筆者就稍微對常駐軟體稍做解釋。

  ┌────────┐
  │2-1 何謂常駐程式│
  └────────┘
    常駐程式聽名字就知道是一種能夠在程式結束後仍續留在記憶體中 ,直到某些條
    件出現 ,又繼續工作 ,例如電腦病毒即為最可惡的一例。

    一般而言常駐軟體大多喜歡攔截中斷向量(INT) , 其中較常見的有:

    INT_08h ┬─ (時鐘、電玩剋星、等等需計時的軟體適用)
    INT_1Ch ┘  每秒電腦自動會產生 18.2 次的此二中斷。


    INT_09h --- (電玩剋星、中文系統、所有常駐有HOT-KEY的軟體。)
                按鍵時會觸動本中斷 ,然後判定是否特定組合 ,來決定是否執行

    INT_13h --- (軟硬碟防寫、解保護利器 LOAD、SAVE)
                因為所有 DOS 提供的讀寫程式都會透過它來讀寫磁碟機 , 所以只
                要攔截它 ,判定是否寫入動做 ,給予適當的反應 ,即是防寫程式。
    INT_21h --- (網路設定等級)
                一般區域網路可設定某些等級可看到那些檔 ,就是因為此中斷被攔
                截 ,當要開啟某檔 ,就先比對等級 ,不夠就傳回錯誤代碼。


 ┌────────┐
 │2-2 何謂常駐程式│
 └────────┘
   談了這麼多的常駐軟體的功用 ,程式到底該怎麼寫呢 ?
   A.
     開始時的寫法:
     保存欲修改的向量位置 ---> 修改向量指向自己的程式  ---> 結束並常駐
   B.
     自己的程式內容:
     保存所有暫存器值 ---> 做自己的事 ---> 還原暫存器 --->  呼叫原向量來
                                                            結束作用程式

   C.範例:攔截INT_1C 在營幕右上角畫個" LOCK20 " ,永不消失
             請參考所附  SOURCE

       (ALARM.COM 單色適用 , ALARMC.COM 彩色適用)

  ┌──────────────────┐
  │ 3-1 如何防止 DEBUG 的單步追蹤功能 ?│
  └──────────────────┘

   玩過組合的人都知道電腦有個旗標 ,俗稱 TF 旗標 ,將此旗標關掉 ,就不會有
   單步執行的功能了。
   因為當此位元為 1 時 ,電腦每執行一個指令都會觸動 INT_01 ,而 DEBUG 就
   是利用它來達到單步執行 ,在 BIOS 內無法下中斷點(INT_03) ,所以在要偵錯
   BIOS 下只能靠 TF 來追蹤程式執行過程了。

   如何關閉此旗標呢 ?
   我們知道旗標有 16Bit , Bit8即為TF旗標 :

        PUSHF      ┐將旗標狀態傳回到 AX 內
        POP     AX ┘
        AND     AX,0FEFFh ─ 清掉 TF 旗標
        PUSH    AX ┐將新旗標寫回
        POPF       ┘

  ┌─────────────────┐
  │ 3-2  如何防止被偵測出有常駐軟體 ?│
  └─────────────────┘
    一般常駐軟體的結束是利用 INT_27h or INT_21h 來結束 ,於是殘留一個FCB
    (程式配置表) 給MEM-MAP偵測到 ,因此我們必需正常結束程式 ,又要常駐起
    來 ,那根本是不可能的 ....
    所以咱家想到用 Hi-MEM 來放咱們的軟體 ,那就不必配置 MEM 給常駐軟體 ,
    更不可能偵測的出來 ,於是達到咱們的目的。