发信人: 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毫秒