📄 siceg.txt
字号:
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. 第四种改法... 自己去想吧!!
--------------------------------------------------------------------------
【 S-ICE 修改密技二 】 - 软蛀 -
==========================================================================
当应用程式触动 INT_1 的指令时 ,有时候 S-ICE 会发出 BEEP 声 ,并因此延迟
了一秒左右 ,这个问题将会造成使用者除错时的困扰 ,虽然可以使用 "Break ON" 的
命令来克服此问题 ,但是遇到 "DB F1" 的指令时 ,一定会哔哔叫 ,没有办法解决 ,
除非修改指令码....嘿嘿嘿...不信可写个小程式试试看 !!
本例是使用 386DEBUG 与 S-ICE v2.64 为例..
C:\>DXDEBUG S-ICE.EXE
-u DS:4377
382D:00004377 6A00 PUSH Word Ptr 0
382D:00004379 E9F4D6 JMP 1A70
382D:0000437C 6A01 PUSH Word Ptr 1
382D:0000437E E9C7D8 JMP 1C48
382D:00004381 6A02 PUSH Word Ptr 2
382D:00004383 E98ADC JMP 2010
382D:00004386 6A03 PUSH Word Ptr 3
382D:00004388 E9D6DC JMP 2061
382D:0000438B 6A04 PUSH Word Ptr 4
382D:0000438D E9E0D6 JMP 1A70
382D:00004392 E9DBD6 JMP 1A70
382D:00004395 6A06 PUSH Word Ptr 6
382D:00004397 E943DF JMP 22DD
-u DS:1c48 (观看 INT_1 的程式码)
382D:00001C48 6655 PUSH EBP
382D:00001C4A 06 PUSH ES
382D:00001C4B 06 PUSH ES
382D:00001C4C 1E PUSH DS
382D:00001C4D 1E PUSH DS
382D:00001C4E 6650 PUSH EAX
382D:00001C50 6653 PUSH EBX
382D:00001C52 6651 PUSH ECX
382D:00001C54 6652 PUSH EDX
382D:00001C56 6656 PUSH ESI
382D:00001C58 6657 PUSH EDI
382D:00001C5A 668BEC MOV EBP,ESP
382D:00001C5D B80800 MOV AX,0008
382D:00001C60 8ED8 MOV DS,AX
382D:00001C62 8B462A MOV AX,[BP+2A]
382D:00001C65 A33F02 MOV [023F],AX
382D:00001C68 8B4626 MOV AX,[BP+26]
382D:00001C6B A34102 MOV [0241],AX
382D:00001C6E 8B462E MOV AX,[BP+2E]
382D:00001C71 A34302 MOV [0243],AX
382D:00001C74 B82000 MOV AX,0020
382D:00001C77 8EC0 MOV ES,AX
382D:00001C79 F746300200 TEST Word Ptr [BP+30],0002
382D:00001C7E 0F850000 JNE 1C82
382D:00001C82 0F21F0 MOV EAX,DR6 ;
382D:00001C85 6650 PUSH EAX ;
382D:00001C87 6633C0 XOR EAX,EAX ;将DR6清0
382D:00001C8A 0F23F0 MOV DR6,EAX ;
382D:00001C8D 6658 POP EAX ;
382D:00001C8F A26401 MOV [0164],AL
382D:00001C92 A90040 TEST AX,4000 ;是否因'T'产生中断
382D:00001C95 0F859700 JNE 1D30 ;是则 JMP
382D:00001C99 A80F TEST AL,0F ;是否因DRx产生中断
382D:00001C9B 0F852B02 JNE 1ECA ;是则 JMP
382D:00001C9F 8D1EC20A LEA BX,[0AC2]
382D:00001CA3 B90400 MOV CX,0004 ;四个断点
382D:00001CA6 807F1100 CMP Byte Ptr [BX+11],00 ;比较程式
382D:00001CAA 0F840800 JE 1CB6 ;
382D:00001CAE 807F1104 CMP Byte Ptr [BX+11],04 ;
382D:00001CB2 0F851C00 JNE 1CD2 ;
382D:00001CB6 668B7F05 MOV EDI,[BX+5] ;
382D:00001CBA 660FB7462A MOVZX EAX,Word Ptr [BP+2A];
382D:00001CBF 66C1E004 SHL EAX,04 ;
382D:00001CC3 660FB77626 MOVZX ESI,Word Ptr [BP+26];
382D:00001CC8 6603C6 ADD EAX,ESI ;
382D:00001CCB 663BC7 CMP EAX,EDI ;
382D:00001CCE 0F840503 JE 1FD7 ;
382D:00001CD2 83C316 ADD BX,16 ;
382D:00001CD5 E2CF LOOP 1CA6 ;
382D:00001CD7 50 PUSH AX ;都不是上面的
382D:00001CD8 51 PUSH CX ;原因 ,就打开
382D:00001CD9 B90300 MOV CX,0003 ;喇叭叫几声
382D:00001CDC B003 MOV AL,03 ;
382D:00001CDE E661 OUT 61,AL (喇叭ON) ;
382D:00001CE0 51 PUSH CX ;
382D:00001CE1 33C9 XOR CX,CX ;
382D:00001CE3 E2FE LOOP 1CE3 (DELAY) ;
382D:00001CE5 E2FE LOOP 1CE5 ;
382D:00001CE7 E2FE LOOP 1CE7 ;
382D:00001CE9 E2FE LOOP 1CE9 ;
382D:00001CEB E2FE LOOP 1CEB ;
382D:00001CED E2FE LOOP 1CED ;
382D:00001CEF E2FE LOOP 1CEF ;
382D:00001CF1 E2FE LOOP 1CF1 ;
382D:00001CF3 E2FE LOOP 1CF3 ;
382D:00001CF5 E2FE LOOP 1CF5 ;
382D:00001CF7 E2FE LOOP 1CF7 ;
382D:00001CF9 E2FE LOOP 1CF9 ;
382D:00001CFB E2FE LOOP 1CFB ;
382D:00001CFD E2FE LOOP 1CFD ;
382D:00001CFF E2FE LOOP 1CFF ;
382D:00001D01 B000 MOV AL,00 ;
382D:00001D03 E661 OUT 61,AL (喇叭OFF) ;
382D:00001D05 E2FE LOOP 1D05 ;
382D:00001D07 E2FE LOOP 1D07 (DELAY) ;
382D:00001D09 E2FE LOOP 1D09 ;
382D:00001D0B E2FE LOOP 1D0B ;
382D:00001D0D E2FE LOOP 1D0D ;
382D:00001D0F E2FE LOOP 1D0F ;
382D:00001D11 E2FE LOOP 1D11 ;
382D:00001D13 E2FE LOOP 1D13 ;
382D:00001D15 E2FE LOOP 1D15 ;
382D:00001D17 59 POP CX ;
382D:00001D18 E2C2 LOOP 1CDC ;
382D:00001D1A B80200 MOV AX,0002 ;
382D:00001D1D E2FE LOOP 1D1D ;
382D:00001D1F 48 DEC AX ;
382D:00001D20 75FB JNE 1D1D ;
382D:00001D22 59 POP CX ;
382D:00001D23 58 POP AX ;
382D:00001D24 EB13 JMP 1D39 ;
因此你必需想办法让 S-ICE 认识发生此中断的原因 ,或是叫它闭嘴...真残忍
---------------------------------------------------------------------------
有些烂程式会故意用一些 CPU 不认识的指令来产生 INT_6 ,例如 FFFF.FEF4 之类的
指令码 ,此时 S-ICE 会秀出 Gxxxxxx Pxxxxxx Exxxxx
(R)eturn (C)ountinue
万一程式大量使用此指令 ,你岂不是要按键按到爽 ,追究原因是 S-ICE 不认识它 ,
所以才会停下来让使用者确定是否写错程式啦 ,可惜就有保护故意使用它 ,使得它
反而是除错过程的困扰 ,因此我们得想办法让 S-ICE 认识它 ,或是让它的眼睛瞎掉
(让它没看到)....毒瞎它的眼睛啦....
-U DS:23F4
382D:000023F4 80FBF0 CMP BL,F0
382D:000023F7 0F841300 JE 240E
382D:000023FB 26678B5FFE MOV BX,ES:[EDI-2] ;
382D:00002400 81FBCD06 CMP BX,06CD ;是否因为INT_6
382D:00002404 0F840600 JE 240E ;产生中断
382D:00002408 B80006 MOV AX,0600 ;
382D:0000240B E8D712 CALL 36E5 ;秀出视窗并请按
382D:0000240E B80600 MOV AX,0006 ;C.R.键
382D:00002411 E98DF6 JMP 1AA1 ;
382D:00002414 6655 PUSH EBP ;
-U DS:36E5
382D:000036E5 50 PUSH AX ;打开视窗的副程式
382D:000036E6 56 PUSH SI ;
382D:000036E7 51 PUSH CX ;※注一
382D:000036E8 33C0 XOR AX,AX ;
382D:000036EA B9AA00 MOV CX,00AA ;
382D:000036ED 8D364A01 LEA SI,[014A] ;
382D:000036F1 2E1304 ADC AX,CS:[SI] ;
382D:000036F4 46 INC SI ;
382D:000036F5 E2FA LOOP 36F1 ;
382D:000036F7 150000 ADC AX,0000 ;
382D:000036FA 2E3B06F501 CMP AX,CS:[01F5] ;
382D:000036FF 0F840200 JE 3705 ;
382D:00003703 EBFE JMP 3703 ;
382D:00003705 59 POP CX ;
注一: 打开视窗的程式开头刚好就是 S-ICE 检查序号是否被篡改的保护程式.
若序号被篡改 ,则会当在 3703 的地方.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -