┌┐┌┐∞
  ┘└┘└┘
┌──────┐       軟體上保護是用來維護軟體設計師的利益
│拷貝心得34集│       過當的保護是令使用者尋求破解版的敗筆
└──────┘      --------------------------------------
=====================================================================
┌──┐
│前言│
└──┘
    自從市面上許多軟體採用壓縮密技以後 ,許多軟體修改上很不容易 ,不久
筆者也發表一種極難懂的解壓密技(大蓋沒幾人看的懂 ,寫太爛了) ,所幸陳世
明先生發表EXEWRITE這套檔案回寫的軟體 ,使得我們可以在執行檔於
解壓完那一點寫回磁片。

    不久不知那位仁兄發表了EXEWRITE解壓的範例 ,竟然該心得大受
歡迎 ,因此筆者在取裁無題下 ,決定效仿這種『使用心得』。

    很多遊戲軟體在國外都是沒保護的 ,因為國外的人不像國人拷貝風氣如此
盛行 ,可是一但引進台灣 ,雖然軟體也是盜拷為主 ,但是卻為這套軟體加上一
層外衣......拷貝保護 ,如今有了EXEWRITE以後 ,要去掉這層外衣已
不再是夢想 ,底下便是去除保護的方法。
---------------------------------------------------------------------
┌────┐
│中斷向量│
└────┘
    學過組合語言的人都知道什麼是中斷向量 ,由於任何組合語言的書籍多有
紹 ,故不再多言 ,但是請特別留意INT_0 ─ INT_3的作用。















---------------------------------------------------------------------
┌────────────┐
│CRAZY CLUB KEY! 防拷軟體│
└────────────┘
    筆者是在烏茲衝鋒槍(軟世版)上發現這個保護 ,這個保護防破能力極強 ,
一開始就當掉INT_0 ─ INT_3 ,使得除錯程式當掉 ,然後再利用所用到的中斷
向量來解碼 ,所以破解手續十分煩雜。


┌────┐
│實例解說│
└────┘
    底下是程式的追蹤過程:

-u 5b1 5d5
2AE5:05B1 5D             POP    BP          ┐
2AE5:05B2 8C46CF         MOV    [BP-31],ES  │
2AE5:05B5 8746CD         XCHG   AX,[BP-33]  │ CHKSUM
2AE5:05B8 59             POP    CX          │
2AE5:05B9 03467F         ADD    AX,[BP+7F]  │
2AE5:05BC 45             INC    BP          │
2AE5:05BD E2FA           LOOP   05B9        ┘
2AE5:05BF FA             CLI

-g 5bf
AX=C8B4  BX=0000  CX=0000  DX=0000  SP=0202  BP=05C3  SI=0000  DI=0000
DS=23B5  ES=23B5  SS=2AE5  CS=2AE5  IP=05BF   NV UP EI PL NZ NA PE NC
2AE5:05BF FA             CLI

    由於我們在下達"G 5BF"給除錯程式時 ,除錯程式便會在 5BF 處放下一個
"CC"碼(INT_03) ,當程式執行到此時 ,除錯程式就可取到控制權 ,並將原修改
的程式碼放回去 ,使得詐看下程式執行無誤 ,其實上面那一段CHKSUM的程式已
經發覺程式錯誤之處了 ,因為執行到05BF處時 ,AX暫存器應該是F6E2 ,而非C8B4
 ,如果你不將它改回來 ,下面的解碼手續便會出錯 ,結果當機。

---------------------------------------------------------------------
2AE5:05BF FA             CLI
2AE5:05C0 5C             POP    SP      ;SP=0210.
2AE5:05C1 1F             POP    DS      ;DS=0000.
2AE5:05C2 59             POP    CX      ;CX=0403.0216.0598
2AE5:05C3 5B             POP    BX      ;BX=0004.0000.000C
2AE5:05C4 8CCA           MOV    DX,CS
2AE5:05C6 870F           XCHG   CX,[BX]
2AE5:05C8 875702         XCHG   DX,[BX+02]
2AE5:05CB 52             PUSH   DX
2AE5:05CC 51             PUSH   CX
2AE5:05CD 83EC04         SUB    SP,+04
2AE5:05D0 83FB0C         CMP    BX,+0C
2AE5:05D3 75ED           JNZ    05C2
2AE5:05D5 CC             INT    3

-d ss:sp
2AE5:0200        10 02 00 02 00 00-00 01 98 05 0C 00 16 02
2AE5:0210  00 00 03 04 04 00 A0 11-48 11 21 C1 1C 30 9A 6B
2AE5:0220  5C E4 6D 8C D7 F0 EF FF-A3 6D AA B3 24 58 53 45
2AE5:0230  3F E2 C4 DD 56 ED C1 74-4A 7A D8 8B 77 50 6D 18

    這段程式使用堆疊將INT_0 ─ INT_3當掉 ,其中它故意把堆疊指向程式區
 ,如果有程式在執行中中斷(如時間計數器,除錯程式) ,那麼堆疊區將被破壞
 ,使得抓取的資料也不正確(指行號 5C2 & 5C3) ,如果執行無誤的話 ,在第三
次的迴圈中便會跳到INT_3那一行 ,而跳到 CS:0598。

-u 598 5b0
2AE5:0598 FB             STI
2AE5:0599 5D             POP    BP
2AE5:059A 07             POP    ES
2AE5:059B 5A             POP    DX
2AE5:059C 5F             POP    DI
2AE5:059D 8B3D           MOV    DI,[DI]
2AE5:059F 8B4E05         MOV    CX,[BP+05]
2AE5:05A2 33C7           XOR    AX,DI
2AE5:05A4 33C1           XOR    AX,CX
2AE5:05A6 D1C0           ROL    AX,1
2AE5:05A8 263105         XOR    ES:[DI],AX
2AE5:05AB 47             INC    DI
2AE5:05AC E2F4           LOOP   05A2
2AE5:05AE 06             PUSH   ES
2AE5:05AF 55             PUSH   BP
2AE5:05B0 CF             IRET

    剛才我們已知CHKSUM傳回到AX ,正確值應該為F6E2 ,然後利用它來解碼行
號為 3FC ─ 436。
  ┌────────┐
  │原未解碼的程式:│
  └────────┘
2AE5:03FC 0461           ADD    AL,61
2AE5:03FE F1             DB     F1
2AE5:03FF 20612F         AND    [BX+DI+2F],AH
2AE5:0402 2C19           SUB    AL,19
2AE5:0404 CE             INTO
2AE5:0405 62E9           BOUND  BP,CX
2AE5:0407 13F3           ADC    SI,BX
2AE5:0409 7146           JNO    0451
2AE5:040B D9C4           FLD    ST(4)
2AE5:040D A12CFD         MOV    AX,[FD2C]
2AE5:0410 FA             CLI
2AE5:0411 5C             POP    SP
2AE5:0412 B7D9           MOV    BH,D9
2AE5:0414 2C58           SUB    AL,58
2AE5:0416 1A3B           SBB    BH,[BP+DI]
2AE5:0418 64             DB     64
2AE5:0419 34F4           XOR    AL,F4
2AE5:041B 2607           POP    ES
2AE5:041D 9A82ED152F     CALL   2F15:ED82
2AE5:0422 DF97A077       FIST   Word Ptr ES:[
2AE5:0426 F1             DB     F1
2AE5:0427 63             DB     63
2AE5:0428 CD91           INT    91
2AE5:042A F7E6           MUL    SI
2AE5:042C 75DD           JNZ    040B
2AE5:042E 3EFD           STD    DS:
2AE5:0430 85A70F6A       TEST   [BX+6A0F],SP
2AE5:0434 028FF835       ADD    CL,[BX+35F8]

    ┌──────┐
    │解碼後的程式│
    └──────┘(INT_1指向本程式)
-u 3fc 436
2AE5:03FC 2EFF060402     INC    Word Ptr CS:[0204]
2AE5:0401 CC             INT    3
2AE5:0402 CF             IRET
2AE5:0403 FB             STI
2AE5:0404 2E8706E903     XCHG   AX,CS:[03E9]
2AE5:0409 95             XCHG   AX,BP
2AE5:040A 8B46FE         MOV    AX,[BP-02]
2AE5:040D D1C8           ROR    AX,1
2AE5:040F 314600         XOR    [BP+00],AX
2AE5:0412 2BC5           SUB    AX,BP
2AE5:0414 314602         XOR    [BP+02],AX
2AE5:0417 2E8B2E0402     MOV    BP,CS:[0204]
2AE5:041C 8B46FE         MOV    AX,[BP-02]
2AE5:041F D1C8           ROR    AX,1
2AE5:0421 314600         XOR    [BP+00],AX
2AE5:0424 2BC5           SUB    AX,BP
2AE5:0426 314602         XOR    [BP+02],AX
2AE5:0429 8B4600         MOV    AX,[BP+00]
2AE5:042C 3CCA           CMP    AL,CA
2AE5:042E 95             XCHG   AX,BP
2AE5:042F 2E8706E903     XCHG   AX,CS:[03E9]
2AE5:0434 74C6           JZ     03FC
2AE5:0436 CF             IRET

【執行到 5B0 處暫停一下】
AX=6869  BX=000C  CX=0000  DX=0046  SP=0204  BP=05D6  SI=0000  DI=0597
DS=0000  ES=2AE5  SS=2AE5  CS=2AE5  IP=05B0   NV UP EI PL NZ NA PO NC
2AE5:05B0 CF             IRET
-D SS:SP
2AE5:0204              D6 05 E5 2A-00 01 AB 2C B4 1A 8A 10
                       ^^^^^ ^^^^^ ^^^^^
                        IP    CS    FLAG

    不知道您是否注意到解碼程式IRET返回時 ,偷偷的打開"T"旗標 ,也就是說
以後每執行一個指令碼 ,就會觸動一次INT_01的中斷 ,而INT_1又是另一道解碼
程式 ,為了將INT_1保留給保護程式 ,所以我們必須修改DEBUG程式 ,使得INT_1
不會被除錯程式使用(除錯程式單步執行功能刪除 ,不得使用單步執行 ,以免當
機。(請使用備份來改)

C:\>DEBUG SYMDEB.COM
Microsoft (R) Symbolic Debug Utility  Version 4.00
Copyright (C) Microsoft Corp 1984, 1985.  All rights reserved.

Processor is [80286]
-u 2b02

1443:2B02 0E             PUSH   CS
1443:2B03 33C0           XOR    AX,AX
1443:2B05 8ED8           MOV    DS,AX
1443:2B07 C7060400BC2C   MOV    Word Ptr [0004],2CBC ┐int_01
1443:2B0D 8C0E0600       MOV    [0006],CS            ┘
1443:2B11 C7060C00AB2C   MOV    Word Ptr [000C],2CAB ┐int_03
1443:2B17 8C0E0E00       MOV    [000E],CS            ┘
1443:2B1B FA             CLI
1443:2B1C C7068C00992B   MOV    Word Ptr [008C],2B99 ┐int_23
1443:2B22 8C0E8E00       MOV    [008E],CS            ┘
1443:2B26 1F             POP    DS
1443:2B27 E83401         CALL   2C5E
1443:2B2A E82900         CALL   2B56
1443:2B2D BCB17E         MOV    SP,7EB1
1443:2B30 58             POP    AX
-f cs:2b07 2b10 90                ── 將int_1程式塗成NOP
-w
write 37021 bytes
-q

---------------------------------------------------------------------
  ┌────┐  ┌────────┐
  │解碼程式├→│DEBUG的INT_1程式├→ 單步執行
  └────┘  └────────┘
    由於我們已將INT_01保留給保護程式 ,所以我們無法使用除錯程式的"T"指 ,
所以筆者提出一個變通的辦法 ,就是將解碼程式最後的IRET指令稍做修改。

   解碼程式最後一行IRET指令改成 JMP DEBUG of INT_01 ADDRESS ,也就是寫
成JMP XXXX:XXXX ,指向位址為除錯程式的INT_01位址 ,以後你便可以用單步執
行來追縱程式了。

    int_1 指向之位址 ,請用未修改過的除錯程式來看 ,其中CS值會隨記憶體變
動 ,請與int_3比較就可知道了。

---------------------------------------------------------------------
                以下是Crazy Club Key追蹤過程
---------------------------------------------------------------------

c:\>symdeb opwolf.exe   (用修改過的SYMDEB載入保護程式主檔)
Microsoft (R) Symbolic Debug Utility  Version 4.00
Copyright (C) Microsoft Corp 1984, 1985.  All rights reserved.

Processor is [80286]
-g 5b9
AX=263E  BX=0000  CX=0440  DX=0000  SP=0202  BP=0183  SI=0000  DI=0000
DS=3E6E  ES=3E6E  SS=459E  CS=459E  IP=05B9   NV UP EI PL NZ NA PO NC
459E:05B9 03467F         ADD    AX,[BP+7F]   ;
-u                                           ; 將 SS:202 到 SS:642
459E:05BC 45             INC    BP           ; 的程式碼相加 ,結果放
459E:05BD E2FA           LOOP   05B9         ; 到 AX (CHKSUM)

-g 5bf
AX=C8B4  BX=0000  CX=0000  DX=0000  SP=0202  BP=05C3  SI=0000  DI=0000
DS=23A4  ES=23A4  SS=2AD4  CS=2AD4  IP=05BF   NV UP EI PL NZ NA PE NC
2AD4:05BF FA             CLI

                     ┌──────────────────┐
-rax                 │因為除錯程式會在中斷點寫下 "CC" 碼 ,│
AX C8B4              │所以會造成CHKSUM不正確 ,我們要改回來│
:f6e2                └──────────────────┘

-d 0:0 f

0000:0000  8A 10 16 01 F4 06 70 00-16 00 F6 09 AB 2C A3 1A  ....t.p...v.+,#.
-e 0:204 ab 2c a3 1a     ; 將INT_3拷貝一份至INT_81

-u 5ae
2AD4:05AE 06             PUSH   ES
2AD4:05AF 55             PUSH   BP
2AD4:05B0 CF             IRET
-a 5ae
2AD4:05AE int 81         ; 修改程式以變取得控制權

-g
AX=6869  BX=000C  CX=0000  DX=0046  SP=0208  BP=05D6  SI=0000  DI=0597
DS=0000  ES=2AD4  SS=2AD4  CS=2AD4  IP=05AF   NV UP EI PL NZ NA PO NC
2AD4:05AF 81CF5D8C       OR     DI,8C5D
-rip ip-1

-a ip
2AD4:05AE push es
2AD4:05AF push bp

-g 5b0
AX=6869  BX=000C  CX=0000  DX=0046  SP=0204  BP=05D6  SI=0000  DI=0597
DS=0000  ES=2AD4  SS=2AD4  CS=2AD4  IP=05B0   NV UP EI PL NZ NA PO NC
2AD4:05B0 CF             IRET           ; 返回程式 ,並偷偷打開"T"旗標
                                        ; 以後每執行一個指令都會觸動
                                        ; 一次 INT_01 中斷

-d ss:sp
2AD4:0200              D6 05 D4 2A-00 01 AB 2C A3 1A 8A 10      V.T*..+,#...
                                   ^^^^^返回旗標是開啟"T"旗標

-u 403  (INT_01的解碼程式)
2AD4:0403 FB             STI
2AD4:0404 2E8706E903     XCHG   AX,CS:[03E9]
2AD4:0409 95             XCHG   AX,BP
2AD4:040A 8B46FE         MOV    AX,[BP-02]
2AD4:040D D1C8           ROR    AX,1
2AD4:040F 314600         XOR    [BP+00],AX
2AD4:0412 2BC5           SUB    AX,BP
2AD4:0414 314602         XOR    [BP+02],AX
2AD4:0417 2E8B2E0402     MOV    BP,CS:[0204]
2AD4:041C 8B46FE         MOV    AX,[BP-02]
2AD4:041F D1C8           ROR    AX,1
2AD4:0421 314600         XOR    [BP+00],AX
2AD4:0424 2BC5           SUB    AX,BP
2AD4:0426 314602         XOR    [BP+02],AX
2AD4:0429 8B4600         MOV    AX,[BP+00]
2AD4:042C 3CCA           CMP    AL,CA
2AD4:042E 95             XCHG   AX,BP
2AD4:042F 2E8706E903     XCHG   AX,CS:[03E9]
2AD4:0434 74C6           JZ     03FC
2AD4:0436 CF             IRET

-d 0:0 f
0000:0000  16 02 D4 2A 03 04 D4 2A-16 00 F6 09 AB 2C A3 1A  ..T*..T*..v.+,#.

-a 434                   ┐
2AD4:0434 jmp 9000       │將解碼程式最後一行指向除錯程式的INT_1
                         │
-a 9000                  │
2AD4:9000 jz 9005        │
2AD4:9002 jmp 1aa3:2cbc  │JMP DEBUG INT_01
2AD4:9007 jmp 3fc        ┘

-r
AX=6869  BX=000C  CX=0000  DX=0046  SP=0204  BP=05D6  SI=0000  DI=0597
DS=0000  ES=2AD4  SS=2AD4  CS=2AD4  IP=05B0   NV UP EI PL NZ NA PO NC
2AD4:05B0 CF             IRET
┌──────────────────────────┐
│上面已將INT_1指向除錯程式 ,所以你可以開始用"T"指令了│
└──────────────────────────┘

-t
AX=6869  BX=000C  CX=0000  DX=0046  SP=020A  BP=05D6  SI=0000  DI=0597
DS=0000  ES=2AD4  SS=2AD4  CS=2AD4  IP=05D6   NV UP DI PL NZ NA PO NC
2AD4:05D6 FC             CLD

-t
AX=6869  BX=000C  CX=0000  DX=0046  SP=020A  BP=89E9  SI=0000  DI=0597
DS=0000  ES=2AD4  SS=2AD4  CS=2AD4  IP=05D7   NV UP DI PL NZ NA PO NC
2AD4:05D7 E989FE         JMP    0463

-t
AX=6869  BX=000C  CX=0000  DX=0046  SP=020A  BP=A126  SI=0000  DI=0597
DS=0000  ES=2AD4  SS=2AD4  CS=2AD4  IP=0463   NV UP DI PL NZ NA PO NC
2AD4:0463 26A10E02       MOV    AX,ES:[020E]

-u
2AD4:0467 022F           ADD    CH,[BX]         ; 尚未被解碼
2AD4:0469 3A31           CMP    DH,[BX+DI]
2AD4:046B 3CBD           CMP    AL,BD

-t
AX=108A  BX=000C  CX=0000  DX=0046  SP=020A  BP=00A3  SI=0000  DI=0597
DS=0000  ES=2AD4  SS=2AD4  CS=2AD4  IP=0467   NV UP DI PL NZ NA PO NC
2AD4:0467 A30000         MOV    [0000],AX       ; 解碼的程式

-u 463
2AD4:0463 89C0           MOV    AX,AX           ; ↓後面的程式便是追下去
2AD4:0465 42             INC    DX              ;   的程式碼變化情形
2AD4:0466 5F             POP    DI              ;
2AD4:0467 A30000         MOV    [0000],AX       ;   這些變化都是INT_01解
2AD4:046A 1A3C           SBB    BH,[SI]         ;   碼的傑作。

-t
AX=108A  BX=000C  CX=0000  DX=0046  SP=020A  BP=A126  SI=0000  DI=0597
DS=0000  ES=2AD4  SS=2AD4  CS=2AD4  IP=046A   NV UP DI PL NZ NA PO NC
2AD4:046A 26A11002       MOV    AX,ES:[0210]

-u 463
2AD4:0463 89C0           MOV    AX,AX
2AD4:0465 42             INC    DX
2AD4:0466 5F             POP    DI
2AD4:0467 022F           ADD    CH,[BX]
2AD4:0469 3A26A110       CMP    AH,[10A1]
2AD4:046D 02FD           ADD    BH,CH
2AD4:046F CF             IRET
2AD4:0470 F0             LOCK

-t
AX=0116  BX=000C  CX=0000  DX=0046  SP=020A  BP=02A3  SI=0000  DI=0597
DS=0000  ES=2AD4  SS=2AD4  CS=2AD4  IP=046E   NV UP DI PL NZ NA PO NC
2AD4:046E A30200         MOV    [0002],AX

-u 463
2AD4:0463 89C0           MOV    AX,AX
2AD4:0465 42             INC    DX
2AD4:0466 5F             POP    DI
2AD4:0467 022F           ADD    CH,[BX]
2AD4:0469 3A31           CMP    DH,[BX+DI]
2AD4:046B 3CBD           CMP    AL,BD
2AD4:046D 9AA3020089     CALL   8900:02A3
2AD4:0472 59             POP    CX

-t
AX=0116  BX=000C  CX=0000  DX=0046  SP=020A  BP=A126  SI=0000  DI=0597
DS=0000  ES=2AD4  SS=2AD4  CS=2AD4  IP=0471   NV UP DI PL NZ NA PO NC
2AD4:0471 26A15201       MOV    AX,ES:[0152]

-u463
2AD4:0463 89C0           MOV    AX,AX
2AD4:0465 42             INC    DX
2AD4:0466 5F             POP    DI
2AD4:0467 022F           ADD    CH,[BX]
2AD4:0469 3A31           CMP    DH,[BX+DI]
2AD4:046B 3CBD           CMP    AL,BD
2AD4:046D 9AFDCFF026     CALL   26F0:CFFD
2AD4:0472 A15201         MOV    AX,[0152]

-t
AX=23A4  BX=000C  CX=0000  DX=0046  SP=020A  BP=8F89  SI=0000  DI=0597
DS=0000  ES=2AD4  SS=2AD4  CS=2AD4  IP=0475   NV UP DI PL NZ NA PO NC
2AD4:0475 898F8000       MOV    [BX+0080],CX

          【程式一直追下去我們會看到讀KeyDisk的核心】

-u 443 462
3CF9:0443 B80102         MOV    AX,0201
3CF9:0446 53             PUSH   BX
3CF9:0447 51             PUSH   CX
3CF9:0448 52             PUSH   DX
3CF9:0449 CC             INT    3       ; int_3被指向int_13
3CF9:044A 7312           JNB    045E
3CF9:044C 50             PUSH   AX
3CF9:044D B400           MOV    AH,00
3CF9:044F CC             INT    3       ; int_3被指向int_13
3CF9:0450 58             POP    AX
3CF9:0451 80FC10         CMP    AH,10   ; 是否Bad CRC
3CF9:0454 7408           JZ     045E
3CF9:0456 5A             POP    DX
3CF9:0457 59             POP    CX
3CF9:0458 5B             POP    BX
3CF9:0459 5E             POP    SI
3CF9:045A 4E             DEC    SI
3CF9:045B 75E5           JNZ    0442
3CF9:045D C3             RET
3CF9:045E 5A             POP    DX
3CF9:045F 59             POP    CX
3CF9:0460 5B             POP    BX
3CF9:0461 5E             POP    SI
3CF9:0462 C3             RET

          【程式繼續追下去必需有極大的耐心 ,筆者由於藥列出程式 】
          【所以必需反複追蹤 ,以便列出程式 ,所以僅介紹到此。   】


---------------------------------------------------------------------
                 利用Break.com褡配Exewrite的範例
---------------------------------------------------------------------
Microsoft (R) Symbolic Debug Utility  Version 4.00
Copyright (C) Microsoft Corp 1984, 1985.  All rights reserved.

Processor is [80286]     ┐
-n break.com             │載入Break
-l                       │
-g                       ┘

Program terminated and stayed resident (0)

-n opwolf.exe
-l
-g        ;讀磁片時按[Tab]鍵

AX=0005  BX=FF00  CX=0000  DX=0000  SP=01F4  BP=0000  SI=0429  DI=0000
DS=144F  ES=144F  SS=145F  CS=1433  IP=013E   NV UP DI NG NZ AC PO NC
1433:013E CA0200         RETF   0002
-t3       ;程式執行到這會自動中斷

AX=0005  BX=FF00  CX=0000  DX=0000  SP=01FA  BP=0000  SI=0429  DI=0000
DS=144F  ES=144F  SS=145F  CS=147F  IP=15EF   NV UP DI NG NZ AC PO NC
147F:15EF 2EA2EA15       MOV    CS:[15EA],AL
AX=0005  BX=FF00  CX=0000  DX=0000  SP=01FA  BP=0000  SI=0429  DI=0000
DS=144F  ES=144F  SS=145F  CS=147F  IP=15F3   NV UP DI NG NZ AC PO NC
147F:15F3 C3             RET
AX=0005  BX=FF00  CX=0000  DX=0000  SP=01FC  BP=0000  SI=0429  DI=0000
DS=144F  ES=144F  SS=145F  CS=147F  IP=0046   NV UP DI NG NZ AC PO NC
147F:0046 E8AB15         CALL   15F4

-r ax 0    ; 將檔案長度計算出來
-r bx 0    ; 並加以存檔
-r cx 8000 ; 以便使用exewrite
-r dx 0    ;
-n 1.dat   ; 檔案長度公式不適用 ,大略猜測為8000h
-w ds:100  ;
Writing 8000 bytes
-q

---------------------------------------------------------------------
        電腦重開機 ,並載入一個長駐程式 ,然後重複上面的動作
---------------------------------------------------------------------
結果得到如下:

AX=0005  BX=FF00  CX=0000  DX=0000  SP=01FC  BP=0000  SI=0429  DI=0000
DS=1557  ES=1557  SS=1567  CS=1587  IP=0046   NV UP DI NG NZ AC PO NC
1587:0046 E8AB15         CALL   15F4
-rax 0                ;
-rbx 0                ;
-rcx 8000             ; 重複上面的動作 ,再存一次檔案
-n 2.dat              ;
-w ds:100             ;
Writing 8000 bytes    ;
-q                    ;

---------------------------------------------------------------------
         接著使用EXEWRITE來編籍

┌────────────────────────────────┐
│                        >>> EXE FILE WRITE PROGRAM <<<          │
│                              Write by Gent Chen                │
│                                                                │
│The first file is Rewrite,you best have a back file             │
│Please input first  exe file name :1.dat                        │
│Please input program DS(START PSP),SS,SP,CS,IP :                │
│(dec)&h144f,&h145f,&h1fc,&h147f,&h46                            │
│Please input second exe file name :2.dat                        │
│Please input program DS(START PSP),SS,SP,CS,IP :                │
│(dec)&h1557,&h1567,&h1fc,&h1587,&h46                            │
│Please input NEW EXE file name :opwolf.exe                      │
│                                                                │
│                        Make EXE file,please wait ....          │
│                                                                │
│                          EXE FILE MAKE SUCCESSFULL             │
└────────────────────────────────┘
                好啦 ,這樣就把Crazy Club Key去除了。


---------------------------------------------------------------------
後記:
    本篇內容非常充實吧 ,看起來好像筆者偷懶 ,其實是因為軟體要列出來
很不容易 ,稍有不慎就當機 ,所以....留一部份給讀者去作。
---------------------------------------------------------------------