发信人: Reinhard.bbs@bbs.sjtu.edu.cn (摘星的人), 信区: cnhacker
标  题: Soft-Ice 修改密技 -1 by 软蛀 -- Alex 整理(转寄)
发信站: 饮水思源站 (Fri Apr 25 19:04:46 1997)
转信站: Lilac!ustcnews!ustcnews!sjtunews!sjtubbs
出  处: bbs.sjtu.edu.cn



  【 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
0018:00002C4E E9C7D8                   JMP      0518
0018:00002C51 6A02                     PUSH     Word Ptr 2
0018:00002C53 E98ADC                   JMP      08E0
0018:00002C56 6A03                     PUSH     Word Ptr 3
0018:00002C58 E9D6DC                   JMP      0931
-U 18:2C29
0018:00002C29 50                       PUSH     AX
0018:00002C2A B400                     MOV      AH,00
0018:00002C2C 8BD8                     MOV      BX,AX
0018:00002C2E C1E302                   SHL      BX,02
0018:00002C31 03D8                     ADD      BX,AX
0018:00002C33 8BC3                     MOV      AX,BX
0018:00002C35 050500                   ADD      AX,0005
0018:00002C38 05472C                   ADD      AX,2C47
0018:00002C3B 2BF0                     SUB      SI,AX
0018:00002C3D 83C303                   ADD      BX,3
0018:00002C40 2689B7472C               MOV      ES:[BX+2C47],SI
0018:00002C45 58                       POP      AX
0018:00002C46 C3                       RET

最前面是 S-ICE 各中断的进入点 ,它用 PUSH 来取得中断表代号 ,然後
跳到其它处理程式去带动 REAL MODE 的程式 ,当遇到 RESET 8259 的时
候 ,就会执行下半段的程式 2C29~2C46 ,用以改掉中断进入点的 JMP
指令 ,使其跳到键盘处理程式 ,很不的S-ICE只写了"改"的程式 ,并没有
写"还原"的程式....问题出在那儿你知道了吗 ?

举例来说:
S-ICE 经过RESET 8259的洗礼後 ,S-ICE 的程式码变化如下所示:

0018:00002C4C 6A01                     PUSH     Word Ptr 1
0018:00002C4E E9C7D8                   JMP      0518
                          ↓变
0018:00002C4C 6A01                     PUSH     Word Ptr 1
0018:00002C4E E91605                   JMP      3167

┌———  测式程式  ———┐
│      CLI               │
│      OUT     20,11     │
│      OUT     21,00     │
│      OUT     21,04     │
│      OUT     21,01     │
│      OUT     21,11     │
│      OUT     21,08     │
│      OUT     21,04     │
│      OUT     21,01     │
└————————————┘

因此你有几种选择可做:

1. 将 2C40 涂成 NOP ,禁止修改 ,虽可承受上面那段测试程式的攻击 ,
   但如果遇到不改回原8259的 INT_8~INT_F 前 ,S-ICE 将永远取不到
   键盘控制权。(载入GB4就当机了)

2. 另辟一块记忆体帮它备份中断、还原中断...好难唷 ,我不会改.

3. 当遇到 RESET 8259 的手续时 ,产生硬体中断 ,你再决定要不要让执
   行修改的手断....效果不好

4. 第四种改法... 自己去想吧!!

--------------------------------------------------------------------------

--


                                                    沉默的人
                                                 Reinhard Young

※ 来源:·饮水思源站 bbs.sjtu.edu.cn·[FROM: 202.96.210.121]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:207.639毫秒