发信人: Reinhard.bbs@bbs.sjtu.edu.cn (摘星的人), 信区: cnhacker
标 题: Soft-Ice 修改密技 -3 by 软蛀 -- Alex 整理(转寄)
发信站: 饮水思源站 (Fri Apr 25 19:09:04 1997)
转信站: Lilac!ustcnews!ustcnews!sjtunews!sjtubbs
出 处: bbs.sjtu.edu.cn
┌┐┌┐∞
【 S-ICE 修改密技第三集 】 ┘└┘└┘
==========================================================================
在拨陈明志写的 Decoder.COM 壳 ,萤幕常常会被保护给关掉 ,造成 S-ICE 看不
到画面 ,无法继续追纵....怎麽办呢 ?
很简单 ,因为它使用 "IN 3DA" 、"OUT 3C0,0" 的方式当掉萤幕 ,所以就可以用
"IN 3DA" 、"OUT 3C0,23" 还原画面 ,但是它不停的重复执行关掉萤幕的动作 ,如果
它一直关萤幕 ,而你一直开萤幕 ,拼命键入此命令岂不麻烦 ,所以笔者修改了 S-ICE
的部份程式码 ,让它在每次打开除错视窗时 ,自动执行上面两行指令 ,以後就不怕别
人当掉萤幕了。
很幸运的 S-ICE 每次在打开视窗的时候 ,会去检查序号的检查码 ,如果不正确
便会当机 ,既然已知每次打开视窗前就一定会检查序号保护 ,那麽你就可以修改此段
程式码 ,让它不但可以不检查序号的检查码 ,又可以帮你键入上面还原萤幕的按键动
作 ,岂不一举数得。
C:\>DXDEBUG S-ICE.EXE (以网路上的 2.64 为例)
-u ds:36e5
390A:000036E5 50 PUSH AX
390A:000036E6 56 PUSH SI
390A:000036E7 51 PUSH CX ┐
390A:000036EA B9AA00 MOV CX,00AA │ 检
390A:000036ED 8D364A01 LEA SI,[014A] │ 查
390A:000036F1 2E1304 ADC AX,CS:[SI] │ 序
390A:000036F4 46 INC SI ├ 号
390A:000036F5 E2FA LOOP 36F1 │ 的
390A:000036F7 150000 ADC AX,0000 │ 程
390A:000036FA 2E3B06F501 CMP AX,CS:[01F5] │ 式
390A:000036FF 0F840200 JE 3705 │
390A:00003703 EBFE JMP 3703 │
390A:00003705 59 POP CX ┘
390A:00003706 5E POP SI
390A:00003707 E81B00 CALL 3725
390A:0000370A 58 POP AX
390A:0000370B E85045 CALL 7C5E
390A:0000370E 33C9 XOR CX,CX
390A:00003710 BB0300 MOV BX,0003
(上面这段程式码如何找到 ,已在第二集叙述过 ,不再重复)
--------------------------------------------------------------------------
某些保护程式会使用失去相容性的方法去锁死键盘 ,其方法为 "OUT 60,F5"
解锁键盘的方法为 "OUT 60,F4" ,不过这种方法对於非 AMI KeyBoard BIOS 会产生
键盘锁死 ,也就是上锁有效、解锁无效 ,不过已有部份 PD/SW 外壳采用此法去防破
解 ,所以笔者也提出来讨论一下好了。
既然知道解锁法则 ,那麽你也可以用上面提到的方法去闪地雷 ,不过这种改法并
不是最好的选择 ,因为只要你没有下断点 ,就无法在在程式未执行完叫出 S-ICE ,这
是因为此时键盘还是被锁死 ,任何按键皆无效。所以还有其它更贱的改法 ,就是在每
次产生中断时执行本程式。
理论上如果保护程式锁死键盘後没有再使用任何中断 ,则键盘一样被锁死 ,其实
只要下 "BREAK ON" 则可以保证热键有效 ,因为程式只要执行 CLI.STI.CALL.....等
等命令就会触发保护模式下的中断 ,这个原因很难解释 ,只能说这是保护模式等级游
戏的规则 ,各位可以不去管它。
我想後者的程式码改法各位可能不知道要夹在那儿 ,我就随便列一段好了
C:\>DXDEBUG S-ICE.EXE
-u ds:1a70 (笔者随便举例列出 INT_90h 的中断处理程式)
(其实所有中断皆呼叫此段程式码)
390A:00001A70 6655 PUSH EBP
390A:00001A72 06 PUSH ES
390A:00001A73 06 PUSH ES
390A:00001A74 1E PUSH DS
390A:00001A75 1E PUSH DS
390A:00001A76 6650 PUSH EAX
390A:00001A78 6653 PUSH EBX
390A:00001A7A 6651 PUSH ECX
390A:00001A7C 6652 PUSH EDX
390A:00001A7E 6656 PUSH ESI
390A:00001A80 6657 PUSH EDI
390A:00001A82 668BEC MOV EBP,ESP
390A:00001A85 B80800 MOV AX,0008
390A:00001A88 8ED8 MOV DS,AX
390A:00001A8A 8B462A MOV AX,[BP+2A]
390A:00001A8D A33F02 MOV [023F],AX
390A:00001A90 8B4626 MOV AX,[BP+26]
390A:00001A93 A34102 MOV [0241],AX
390A:00001A96 8B462E MOV AX,[BP+2E]
390A:00001A99 A34302 MOV [0243],AX
390A:00001A9C 660FB74624 MOVZX EAX,Word Ptr [BP+24]
390A:00001AA1 C606FC0300 MOV Byte Ptr [03FC],00
390A:00001AA6 B400 MOV AH,00
390A:00001AA8 660FB7C0 MOVZX EAX,AX
390A:00001AAC C606D10C00 MOV Byte Ptr [0CD1],00
390A:00001AB1 BB2000 MOV BX,0020
390A:00001AB4 8EC3 MOV ES,BX
390A:00001AB6 660FB75E36 MOVZX EBX,Word Ptr [BP+36]
390A:00001ABB 66C1E304 SHL EBX,04
390A:00001ABF 836E3206 SUB Word Ptr [BP+32],6
390A:00001AC3 660FB77E32 MOVZX EDI,Word Ptr [BP+32]
390A:00001AC8 2667668B148500000000 MOV EDX,ES:[EAX*4]
390A:00001AD2 875626 XCHG DX,[BP+26]
390A:00001AD5 89169101 MOV [0191],DX
390A:00001AD9 266789143B MOV ES:[EBX+EDI],DX
390A:00001ADE 66C1EA10 SHR EDX,10
390A:00001AE2 83C702 ADD DI,2
390A:00001AE5 87562A XCHG DX,[BP+2A]
390A:00001AE8 89168F01 MOV [018F],DX
390A:00001AEC 266789143B MOV ES:[EBX+EDI],DX
390A:00001AF1 83C702 ADD DI,2
390A:00001AF4 8B562E MOV DX,[BP+2E]
390A:00001AF7 6681662EFFFCFEFF AND Dword Ptr [BP+2E],FFFEFCFF
390A:00001AFF 803E570100 CMP Byte Ptr [0157],00 ┐
390A:00001B04 0F841100 JE 1B19 │
390A:00001B08 F7C20001 TEST DX,0100 │
390A:00001B0C 0F840900 JE 1B19 │就
390A:00001B10 800EFA0310 OR Byte Ptr [03FA],10 │这
390A:00001B15 81E2FFFE AND DX,FEFF │一
390A:00001B19 266789143B MOV ES:[EBX+EDI],DX │段
390A:00001B1E A38D01 MOV [018D],AX │
390A:00001B21 F606FA033F TEST Byte Ptr [03FA],3F │
390A:00001B26 0F851700 JNE 1B41 ┘
390A:00001B2A 665F POP EDI
390A:00001B2C 665E POP ESI
390A:00001B2E 665A POP EDX
390A:00001B30 6659 POP ECX
390A:00001B32 665B POP EBX
390A:00001B34 6658 POP EAX
390A:00001B36 1F POP DS
390A:00001B37 5D POP BP
390A:00001B38 07 POP ES
390A:00001B39 5D POP BP
390A:00001B3A 665D POP EBP
390A:00001B3C 83C402 ADD SP,2
390A:00001B3F 66CF IRETD
诈看之下好像没有位置可以塞进我们的程式码 ,其实你可以看到 1B04.1B0C.1B26
是用 80386 指令码去编的 ,换句话说你如果把它改成 74xx (JE xxx) 岂不是行行可
省 2 Bytes ,共可省 6 Bytes ,够不够你塞解锁的程式码呢 ? 最後建议各位两种改
法都改会比较稳当。
将来如果还有其它当萤幕、当键盘的方法 ,你是不是会闪了呢 ,若有机会的话 ,
咱们下次再见。
--
沉默的人
Reinhard Young
※ 来源:·饮水思源站 bbs.sjtu.edu.cn·[FROM: 202.96.210.121]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:207.306毫秒