?? siceg.txt
字號:
【 S-ICE 2.64 改版大全 】 - 軟蛀 -
==========================================================================
底下程式碼是筆者研究其程式寫法後抓出的問題 ,除了手冊上有寫的部份
不再重復敘述 ,底下的程式碼是筆者認為可加強防護能力的部份 ,純粹供研究
請勿移作它用。
--------------------------------------------------------------------------
System Info : (筆者寫的小工具)
GDTR = 00C8-007CC818
IDTR = 07FF-007CC012
-DG (列出 GDT 表)
0000 00 00 00 00 00 00 00 00-FF FF 10 11 7F 93 00 00
0010 FF FF 00 6E 7D 93 00 00-FF FF 00 6E 7D 9B 00 00
0020 FF FF 00 00 00 93 CF 00-FF 7F 00 00 0B 92 00 00
0030 FF 7F 00 80 0B 93 00 00-FF FF 00 00 0C 92 00 00
0040 FF FF F0 32 7E 9B 00 00-FF FF 00 C0 7C 93 C0 00
0050 0F 00 00 C0 7B 92 C0 00-02 00 00 98 7B 92 C0 00
0060 FF 01 00 90 5B 92 C0 00-C7 06 38 89 5A 93 00 00
0070 8C 0D AB 7B 5A 92 00 00-68 20 00 00 7D 8B 00 00
0080 68 00 EA 11 7F 89 00 00-FF FF 00 6E 7D 9A 00 00
0090 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
00B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
00C0 00 00 00 00 00 00 00 00
-DI (列出保護模式下的中斷表)
0000 47 2C 18 00 00 EE 00 00-4C 2C 18 00 00 EE 00 00
0010 51 2C 18 00 00 EE 00 00-56 2C 18 00 00 EE 00 00
0020 5B 2C 18 00 00 EE 00 00-60 2C 18 00 00 EE 00 00
0030 65 2C 18 00 00 EE 00 00-6A 2C 18 00 00 EE 00 00
0040 6F 2C 18 00 00 EE 00 00-74 2C 18 00 00 EE 00 00
0050 79 2C 18 00 00 EE 00 00-7E 2C 18 00 00 EE 00 00
0060 83 2C 18 00 00 EE 00 00-88 2C 18 00 00 EE 00 00
0070 8D 2C 18 00 00 EE 00 00-92 2C 18 00 00 EE 00 00
0080 97 2C 18 00 00 EE 00 00-9C 2C 18 00 00 EE 00 00
0090 A1 2C 18 00 00 EE 00 00-A6 2C 18 00 00 EE 00 00
00A0 AB 2C 18 00 00 EE 00 00-B0 2C 18 00 00 EE 00 00
00B0 B5 2C 18 00 00 EE 00 00-BA 2C 18 00 00 EE 00 00
00C0 BF 2C 18 00 00 EE 00 00-C4 2C 18 00 00 EE 00 00
00D0 C9 2C 18 00 00 EE 00 00-CE 2C 18 00 00 EE 00 00
00E0 D3 2C 18 00 00 EE 00 00-D8 2C 18 00 00 EE 00 00
00F0 DD 2C 18 00 00 EE 00 00-E2 2C 18 00 00 EE 00 00
0100 E7 2C 18 00 00 EE 00 00-EC 2C 18 00 00 EE 00 00
.. 略
0780 F7 30 18 00 00 EE 00 00-FC 30 18 00 00 EE 00 00
0790 01 31 18 00 00 EE 00 00-06 31 18 00 00 EE 00 00
07A0 0B 31 18 00 00 EE 00 00-10 31 18 00 00 EE 00 00
07B0 15 31 18 00 00 EE 00 00-1A 31 18 00 00 EE 00 00
07C0 1F 31 18 00 00 EE 00 00-24 31 18 00 00 EE 00 00
07D0 29 31 18 00 00 EE 00 00-2E 31 18 00 00 EE 00 00
07E0 33 31 18 00 00 EE 00 00-38 31 18 00 00 EE 00 00
07F0 3D 31 18 00 00 EE 00 00-42 31 18 00 00 EE 00 00
--------------------------------------------------------------------------
A. 【 解決 ET16V-16 可以叫的出 S-ICE 】
C:\>prtdebug
┌——————————————————————┐
│ (C) SoftBugger V86/PM Debugger Tool V1.03 │
│ INTEL 80386 MICE Register │
└——————————————————————┘
-protect (使用保護模式定址方式)
-u 18:2c97 (看 INT_10 處理程式)
0018:00002C97 6A10 PUSH Word Ptr 10
0018:00002C99 E95BED JMP 19F7
0018:00002C9C 6A11 PUSH Word Ptr 11
0018:00002C9E E99FD6 JMP 0340
0018:00002CA1 6A12 PUSH Word Ptr 12
0018:00002CA3 E99AD6 JMP 0340
0018:00002CA6 6A13 PUSH Word Ptr 13
0018:00002CA8 E9D3ED JMP 1A7E
0018:00002CAB 6A14 PUSH Word Ptr 14
0018:00002CAD E990D6 JMP 0340
0018:00002CB0 6A15 PUSH Word Ptr 15
0018:00002CB2 E9C5EE JMP 1B7A
0018:00002CB5 6A16 PUSH Word Ptr 16
0018:00002CB7 E986D6 JMP 0340
-u 18:19f7 (根據 INT_10 跳到此執行)
0018:000019F7 6655 PUSH EBP
0018:000019F9 06 PUSH ES
0018:000019FA 06 PUSH ES
0018:000019FB 1E PUSH DS
0018:000019FC 1E PUSH DS
0018:000019FD 6650 PUSH EAX
0018:000019FF 6653 PUSH EBX
0018:00001A01 6651 PUSH ECX
0018:00001A03 6652 PUSH EDX
0018:00001A05 6656 PUSH ESI
0018:00001A07 6657 PUSH EDI
0018:00001A09 668BEC MOV EBP,ESP
0018:00001A0C B80800 MOV AX,0008
0018:00001A0F 8ED8 MOV DS,AX
0018:00001A11 8B462A MOV AX,[BP+2A]
0018:00001A14 A33F02 MOV [023F],AX
0018:00001A17 8B4626 MOV AX,[BP+26]
0018:00001A1A A34102 MOV [0241],AX
0018:00001A1D 8B462E MOV AX,[BP+2E]
0018:00001A20 A34302 MOV [0243],AX
0018:00001A23 807E1500 CMP Byte Ptr [BP+15],00
0018:00001A27 0F854D00 JNE 1A78
0018:00001A2B 8A4614 MOV AL,[BP+14] ;
0018:00001A2E 247F AND AL,7F ;判斷模式
0018:00001A30 A2EE01 MOV [01EE],AL ;
0018:00001A33 F606FB0301 TEST Byte Ptr [03FB],01
0018:00001A38 0F843C00 JE 1A78
0018:00001A3C 3C07 CMP AL,07
0018:00001A3E 0F842200 JE 1A64
0018:00001A42 3C03 CMP AL,03
0018:00001A44 0F841C00 JE 1A64
0018:00001A48 3C02 CMP AL,02
0018:00001A4A 0F841600 JE 1A64
0018:00001A4E F606FB0302 TEST Byte Ptr [03FB],02
0018:00001A53 0F842100 JE 1A78
0018:00001A57 8026FB03FD AND Byte Ptr [03FB],FD
0018:00001A5C B8800C MOV AX,0C80
0018:00001A5F E8C0AA CALL C522
0018:00001A62 EB14 JMP 1A78
0018:0000A64 F606FB0302 TEST Byte Ptr [03FB],02
0018:00001A69 0F850B00 JNE 1A78
0018:00001A6D 800EFB0302 OR Byte Ptr [03FB],02
0018:00001A72 B8000C MOV AX,0C00
0018:00001A75 E8AAAA CALL C522
0018:00001A78 B81000 MOV AX,0010
0018:00001A7B E9F3E8 JMP 0371
0018:00001A7E 6655 PUSH EBP
-u 18:d38e (此處的 ES=0020)
0018:0000D38E C606787501 MOV Byte Ptr [7578],01
0018:0000D393 C706E73FD403 MOV Word Ptr [3FE7],03D4
0018:0000D399 26A04904 MOV AL,ES:[0449] ;判斷顯示
0018:0000D39D A2EE01 MOV [01EE],AL ;頁.
0018:0000D3A0 26A01704 MOV AL,ES:[0417] ;
0018:0000D3A4 C0E804 SHR AL,04
0018:0000D3A7 A28C01 MOV [018C],AL
0018:0000D3AA A2BC0A MOV [0ABC],AL
0018:0000D3AD 8026BC0A06 AND Byte Ptr [0ABC],06
0018:0000D3B2 07 POP ES
0018:0000D3B3 E80900 CALL D3BF
0018:0000D3B6 33C0 XOR AX,AX
0018:0000D3B8 A3E33F MOV [3FE3],AX
0018:0000D3BB E8C30F CALL E381
0018:0000D3BE C3 RET
0018:0000D3BF 50 PUSH AX
0018:0000D3C0 51 PUSH CX
0018:0000D3C1 57 PUSH DI
0018:0000D3C2 FC CLD
0018:0000D3C3 8D3EEA4F LEA DI,[4FEA]
0018:0000D3C7 57 PUSH DI
0018:0000D3C8 8B0EF25F MOV CX,[5FF2]
0018:0000D3CC A1F45F MOV AX,[5FF4]
0018:0000D3CF F7E1 MUL CX
0018:0000D3D1 8BC8 MOV CX,AX
-real (返回真實模式)
-q (結束)
注: 由上面可知 改 1A2E 為 MOV AL,12h
就可以正常在 ET16V-16 下叫的出 S-ICE ,不過此改法并不支援 ET16V
因為 S-ICE 本身并不支援硬體卷頁 ,所以如想要支援它 ,自己去改寫吧.
至於 D399 是否要改為 MOV AL,12h 就隨你了 ,因為這里改後 ,S-ICE
會比較不穩定 ,只有使用 ET-3000 VGA 卡 ,會比較正常些。
--------------------------------------------------------------------------
B. 【 解決 S-ICE 的函式被不當叫用1 】
傳統在 DOS 下 LDR.EXE 或其它保護程式都是利用下面的程式去偵測載入
載入 S-ICE 與否,利用 SI.DI 指定數值後 ,再加一個 INT_3 的動作 ,S-ICE
便會傳回版本 ,而原來在 DOS 下的 INT_3 因此不會被執行 ,市面上已知有鎖
匠、PPIP、少許自制保護都有如此做。
DEBUG LDR.EXE
-U 54D
52AD:054D BE4746 MOV SI,4647
52AD:0550 BF5555 MOV DI,4A4D
52AD:0553 33C0 XOR AX,AX
52AD:0555 CC INT 3
52AD:0568 81FE4746 CMP SI,4647
52AD:056F 0F840E00 JE 0581
S-ICE 保護模式下的 INT_3 處理程式:
-U 18:9C1
0018:000009C1 817E044746 CMP Word Ptr [BP+4],4647
0018:000009C6 0F859D01 JNE 0B67
0018:000009CA 817E004D4A CMP Word Ptr [BP],4A4D
0018:000009CF 0F859401 JNE 0B67 ^^^^
0018:000009D3 8B4614 MOV AX,[BP+14]
0018:000009D6 0AE4 OR AH,AH
0018:000009D8 0F848301 JE 0B5F
0018:000009DC 80FC01 CMP AH,01
0018:000009DF 0F845C00 JE 0A3F
0018:000009E3 80FC10 CMP AH,10
0018:000009E6 0F846300 JE 0A4D
0018:000009EA 80FC11 CMP AH,11
0018:000009ED 0F848B2C JE 367C
0018:000009F1 80FC12 CMP AH,12
0018:000009F4 0F840A00 JE 0A02
0018:000009F8 80FC13 CMP AH,13
0018:000009FB 0F84E97A JE 84E8
0018:000009FF E92C01 JMP 0B2E
0018:00000A02 6653 PUSH EBX
因為大多數的防破程式都用 INT_3 偵測 S-ICE ,所以我把 INT_3 的程式
改掉了 ,您可以看到上面的 09C1~09CA ,不過為了避免麻煩與相容性問題 ,我
修改了程式碼所有的 "4D4A" 變成其它數字 ,例如 "1111" ,大約可找到十個。
建議您除了改 S-ICE.EXE ,最好連 LDR.EXE 一并修改....當然 SICE/W 的改法
....呵呵呵....你自己去想吧。
--------------------------------------------------------------------------
B. 【 解決 S-ICE 的函式被不當叫用2 】
用 DEVICE 方式載入 S-ICE 後 ,電腦內部會記錄一個檔案 ,用以記錄驅動
程式檔名 ,如果您使用 AH=3D INT_21 的方式 ,開啟一個 "SOFTICE1" 的檔案,
若開啟成功 ,表示有載入 S-ICE ,否則就代表未載入 S-ICE ,因此你可以搜尋
S-ICE 主檔 ,將 "SOFTICE1" 字眼改成其它名字 ,很簡單吧。
--------------------------------------------------------------------------
C. 【 S-ICE 對於 RESET 8259 的處理方式 】
-U 18:2C4C S-ICE 保護模式下的中斷向量表處理程式
0018:00002C4C 6A01 PUSH Word Ptr 1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -