问题2:还原精灵之类的软件原理是什么?
问题3:怎样用软件实现硬盘保护卡的功能?
问题4: 应用程序怎样抗删除?
问题5:实现这些技术需要哪方面的知识?我好去找资料看书。
问题6:这些技术要不要驱动方面的知识?钩子方面的知识?
问题7: 学习驱动应该从哪方面入手?
问题8: 我该怎样感谢这些帮助我的朋友?
版主能否考虑将此帖置顶?谢谢.
今天是元旦,大家新年好.
44 个解决方案
#1
up
你跟南京远志有仇啊?一定要研究他们的还原系列产品?
你跟南京远志有仇啊?一定要研究他们的还原系列产品?
#2
当然不是,我选的毕业设计跟这些都有关。是怎样用软件实现硬盘保护技术,防毒技术。
谢谢关注。
谢谢关注。
#3
这样啊,还原精灵的原理是利用驱动程序在系统核心层拦截对硬盘的操作,并且把对FAT的操作纪录到分区的最后一个扇区。
你要了解的是Win9X下的VXD驱动程序和Win2000下的WDM驱动程序拦截技术,至于HOOK,在还原技术中没有运用。
另外,学习一下分区的MBR设计。
建议你学驱动程序先吧
好了我回答完了,给分!
你要了解的是Win9X下的VXD驱动程序和Win2000下的WDM驱动程序拦截技术,至于HOOK,在还原技术中没有运用。
另外,学习一下分区的MBR设计。
建议你学驱动程序先吧
好了我回答完了,给分!
#4
好的,谢谢。结帖时候肯定给分。如果不够,再发帖子放分。在此谢谢。
#5
另外请问,学习2000下的驱动应该从哪里入手?
#6
硬盘保护卡:
在起机的时候,保护卡先于操作系统获得控制权,修改了INT 13中断,在内存的
0000:004CH处把地址指向了另外的一段由保护卡写的程序段,该程序段实现了对硬盘的保护功能,有兴趣可以看一下。
DOS实模式下:
debug
a 100
xor ax,ax
int 13
int 3
按T单步执行,
找到类似于:f000:****的地址,它后面有一条语句
mov dl,80
这个地址是真正的INT 13 的地址
若想破解保护卡,在0:004C处改写如下:(例如:地址为:f000:1234)
e 0:004c 34 12 00 f0
OK!
在起机的时候,保护卡先于操作系统获得控制权,修改了INT 13中断,在内存的
0000:004CH处把地址指向了另外的一段由保护卡写的程序段,该程序段实现了对硬盘的保护功能,有兴趣可以看一下。
DOS实模式下:
debug
a 100
xor ax,ax
int 13
int 3
按T单步执行,
找到类似于:f000:****的地址,它后面有一条语句
mov dl,80
这个地址是真正的INT 13 的地址
若想破解保护卡,在0:004C处改写如下:(例如:地址为:f000:1234)
e 0:004c 34 12 00 f0
OK!
#7
对了,还有:
按q
退出debug
试着向硬盘写点东西看看!!!
按q
退出debug
试着向硬盘写点东西看看!!!
#8
以前我看过一点破解己方硬盘保护卡的资料。也是用汇编在debug下修改一些数据。现在想在vc环境下写一段程序,使显影盘保护的功能。
另外,谁能提供mbr的学习资料及方法。谢谢各位。
另外,谁能提供mbr的学习资料及方法。谢谢各位。
#9
我以前做过几个月,往事不堪回首啊
烦死了
烦死了
#10
To glacierrr(冰河纪的怪鸟) :
做过的话给兄弟讲一点经验之谈好么?
谢谢.
做过的话给兄弟讲一点经验之谈好么?
谢谢.
#11
学习ing
#12
hehe,你怎么跟我去年毕业设计的题目一模一样?你不会是苏大的吧?我们做的是NT/2000下的硬盘保护技术。建议你还是不要选这个课题,成功的希望很渺茫。我们当时反汇编了3万多行源码,看懂了大部分,但是好多涉及到系统底层,比如IDE端口读写,纠错环,等等等等,最后还是没有成功,还好答辩老师因为难度而没有卡我们。
#13
不是吧?我怎么会选择了这样的课题?我知道挺难的,但不至于有这么难吧?我还想两个月左右处效果呢。
#14
呵呵,那恭喜你能早日出效果:)
至少我是没有那个本事,呵呵:)
至少我是没有那个本事,呵呵:)
#15
不过我想,无论如何,两个月出成功,都绝对是impossible mission
#16
To codewarrior(会思考的草) :
能介绍一下你去年的经过么?或是给我提一下大致的思路.谢谢.我想知道都有哪些方法.需要哪些知识.我的信箱wzq150@163.com QQ 22438603。交个朋友如何?
能介绍一下你去年的经过么?或是给我提一下大致的思路.谢谢.我想知道都有哪些方法.需要哪些知识.我的信箱wzq150@163.com QQ 22438603。交个朋友如何?
#17
问题:怎样更改int 13h指针,使其指向一个用户自己编写的内存驻留程序。
#18
To codewarrior(会思考的草) :
我并不是要拿出一个像摸象样的商业软件,功能齐全,界面美观。小弟只要是能够实现这些具体功能就好了。
我并不是要拿出一个像摸象样的商业软件,功能齐全,界面美观。小弟只要是能够实现这些具体功能就好了。
#19
这个要视平台而定。如果只需要针对9x,那技术已经很旧了,就是改写int13而已。去网上能搜到一堆源码。
#20
你要知道如今好多公司都拿这个赚钱,比如promagic,还原精灵,硬盘保护神,这些软件售价都不菲,所以基本上你在网上问,是问不出个所以然的,没有哪个公司会公开这个技术——要公开也要等到这项技术无利可图之时。你要想做,就得一切靠自己从头来。
#21
简单提几个建议吧。
第一,你先明确你要实现哪些功能?如果仅仅是做一个写保护,就是干脆不让用户去写,那是比较easy的事情,98可以用修改int13实现,2000可以写个ifs过滤驱动——但是这样不能防止用户从软驱启动对硬盘进行破坏。如果你想实现还原的功能,就是允许用户写,但是重启动之后恢复,那难度就要上好几个档次,你得对os读写磁盘的具体过程和各种文件系统格式有非常深刻的了解,然后才能考虑如何去实现这个假写的动作。比如promagic是在整个硬盘的最末尾开辟一块空间(大约1G),来备份被写的文件,而还原精灵是直接利用分区上未使用的空间。
第二,保护的强度大概有多大?如果仅仅考虑Windows加载后的保护,那可以使用ifs过滤驱动或者vxd,但这样显然无法防止用户从软盘启动对重要数据进行破坏。如果要彻底保护,那必须从bios级开始考虑,包括在os引导之前和引导之后,都要考虑。
第三,是否允许用户来做一个多点的存储和还原?就是可以把系统能够还原到之前的多个状态,例如在安装了你的软件之后有一个状态,保存下来StatusA,之后安装了一个软件,保存状态StatusB,删除了一些不使用的软件StatusC,安装了新的软件StatusD,对于这种情况,是否可以做到把这四种状态都可以还原呢!
当然,如果只是你做的一个毕业设计课题,那么可以不用做到这么的深层次,因为这个已经远远的超出了一个毕业设计的内容要求了。
PS:我当时的思路是这样的:
写磁盘的操作可分为三个层次:写文件->写扇区->写I/O端口。如果要在文件层次上对磁盘操作进行拦截,显然要针对不同的文件系统编写相应的IFS过滤驱动程序,不仅耗时,而且运行效率相当低,用户会感觉到延迟,所以,初步设想,在扇区层次上对写盘操作进行拦截。具体实现起来是:
在操作系统加载之前,对整个磁盘按簇(或扇区?)建立一个R/W表,每个簇(扇区?)在整个表中都有一个bit。在Windows2000后,把磁盘中的一部分空余空间标记为坏簇,这样文件系统不会访问之,我们就可以利用这个空间来作为映射空间,记录每次写盘操作的详情。然后我们使用程序截取每次写文件操作的目的扇区(关键是这个功能用什么方法实现?做成磁盘过滤驱动程序还是做成保护模式下的内存驻留程序呢?),拦截到目的扇区后,进行判断,如果是对受保护的扇区进行写操作,那么就应该映射到我们预先留下的那段临时空间的扇区中去(至于映射算法,可以选择Hash函数或者其他算法),通过映射函数的计算,找到真正施行写操作的扇区,然后将用户此次写操作在临时空间的扇区中执行之,同时我们要在R/W表中,把刚才写操作原目的扇区标记为1(这就表示,如果用户下次要读取该扇区,我们应该到临时区中去读取)。如果要读文件,也要先截获此次读操作的目的扇区,再判断此扇区是否被写过,判断的方法仍然是读取对应R/W表中的位,为0,则不必映射,直接读取,为1,则必须先进行映射,然后才能读取。
考虑到现在的硬盘都比较大,因此相应的R/W表也很大,如果把这样一张R/W表放在内存中进行维护,十分不现实,因此借鉴Cache的镜象原理,保留R/W表的一部分在内存中,余下的仍放在磁盘上,再用一个算法实现映射(这个算法完全可以照搬目前计算机结构教科书上介绍的算法)。这样能效率和速度兼顾。
另外,为了能让用户在重启动之后恢复,可以在MBR中插入一段代码,这样能在操作系统加载之前,给用户一个机会,能把上次写在临时空间中的数据转储到他们本来应该在的那些扇区中去。执行之后,清空R/W表,清空临时空间,以便下次操作。
第一,你先明确你要实现哪些功能?如果仅仅是做一个写保护,就是干脆不让用户去写,那是比较easy的事情,98可以用修改int13实现,2000可以写个ifs过滤驱动——但是这样不能防止用户从软驱启动对硬盘进行破坏。如果你想实现还原的功能,就是允许用户写,但是重启动之后恢复,那难度就要上好几个档次,你得对os读写磁盘的具体过程和各种文件系统格式有非常深刻的了解,然后才能考虑如何去实现这个假写的动作。比如promagic是在整个硬盘的最末尾开辟一块空间(大约1G),来备份被写的文件,而还原精灵是直接利用分区上未使用的空间。
第二,保护的强度大概有多大?如果仅仅考虑Windows加载后的保护,那可以使用ifs过滤驱动或者vxd,但这样显然无法防止用户从软盘启动对重要数据进行破坏。如果要彻底保护,那必须从bios级开始考虑,包括在os引导之前和引导之后,都要考虑。
第三,是否允许用户来做一个多点的存储和还原?就是可以把系统能够还原到之前的多个状态,例如在安装了你的软件之后有一个状态,保存下来StatusA,之后安装了一个软件,保存状态StatusB,删除了一些不使用的软件StatusC,安装了新的软件StatusD,对于这种情况,是否可以做到把这四种状态都可以还原呢!
当然,如果只是你做的一个毕业设计课题,那么可以不用做到这么的深层次,因为这个已经远远的超出了一个毕业设计的内容要求了。
PS:我当时的思路是这样的:
写磁盘的操作可分为三个层次:写文件->写扇区->写I/O端口。如果要在文件层次上对磁盘操作进行拦截,显然要针对不同的文件系统编写相应的IFS过滤驱动程序,不仅耗时,而且运行效率相当低,用户会感觉到延迟,所以,初步设想,在扇区层次上对写盘操作进行拦截。具体实现起来是:
在操作系统加载之前,对整个磁盘按簇(或扇区?)建立一个R/W表,每个簇(扇区?)在整个表中都有一个bit。在Windows2000后,把磁盘中的一部分空余空间标记为坏簇,这样文件系统不会访问之,我们就可以利用这个空间来作为映射空间,记录每次写盘操作的详情。然后我们使用程序截取每次写文件操作的目的扇区(关键是这个功能用什么方法实现?做成磁盘过滤驱动程序还是做成保护模式下的内存驻留程序呢?),拦截到目的扇区后,进行判断,如果是对受保护的扇区进行写操作,那么就应该映射到我们预先留下的那段临时空间的扇区中去(至于映射算法,可以选择Hash函数或者其他算法),通过映射函数的计算,找到真正施行写操作的扇区,然后将用户此次写操作在临时空间的扇区中执行之,同时我们要在R/W表中,把刚才写操作原目的扇区标记为1(这就表示,如果用户下次要读取该扇区,我们应该到临时区中去读取)。如果要读文件,也要先截获此次读操作的目的扇区,再判断此扇区是否被写过,判断的方法仍然是读取对应R/W表中的位,为0,则不必映射,直接读取,为1,则必须先进行映射,然后才能读取。
考虑到现在的硬盘都比较大,因此相应的R/W表也很大,如果把这样一张R/W表放在内存中进行维护,十分不现实,因此借鉴Cache的镜象原理,保留R/W表的一部分在内存中,余下的仍放在磁盘上,再用一个算法实现映射(这个算法完全可以照搬目前计算机结构教科书上介绍的算法)。这样能效率和速度兼顾。
另外,为了能让用户在重启动之后恢复,可以在MBR中插入一段代码,这样能在操作系统加载之前,给用户一个机会,能把上次写在临时空间中的数据转储到他们本来应该在的那些扇区中去。执行之后,清空R/W表,清空临时空间,以便下次操作。
#22
太难了!
我只能给你精神上的支持。寒假可以不用回家了。
我只能给你精神上的支持。寒假可以不用回家了。
#23
回复人: codewarrior(会思考的草) ( ) 信誉:113 2004-01-03 09:44:00 得分:0
你要知道如今好多公司都拿这个赚钱,比如promagic,还原精灵,硬盘保护神,这些软件售价都不菲,所以基本上你在网上问,是问不出个所以然的,没有哪个公司会公开这个技术——要公开也要等到这项技术无利可图之时。你要想做,就得一切靠自己从头来。
其实,小弟只是想做一些简单的功能。比如说是在2000下实现用户可写,但是重启后恢复这一项就行。另外,软件我想短期内是作不出来成型的作品的。我想弄其原理,实现部分功能。
再次谢谢大家。
你要知道如今好多公司都拿这个赚钱,比如promagic,还原精灵,硬盘保护神,这些软件售价都不菲,所以基本上你在网上问,是问不出个所以然的,没有哪个公司会公开这个技术——要公开也要等到这项技术无利可图之时。你要想做,就得一切靠自己从头来。
其实,小弟只是想做一些简单的功能。比如说是在2000下实现用户可写,但是重启后恢复这一项就行。另外,软件我想短期内是作不出来成型的作品的。我想弄其原理,实现部分功能。
再次谢谢大家。
#24
对于保护的层次,我想先做简单一点的吧。先做进入windows之后的保护技术。至于从软盘引导进系统进行破坏,呵呵呵,先保护好windows下再说吧。
谢谢各位。
谢谢各位。
#25
这个就必须要用到驱动。你还是去反汇编一下ProMagic找找思路吧,呵呵。最好找5.0版的,比较简单一些。
#26
还有没有高手提供点建议。
#27
谢谢codewarrior(会思考的草) ,很高兴得到你的帮助.
#28
呵呵,新年好!学习!
#29
呵呵,老实说我到现在对这个东西的原理依然一知半解:)
#30
继续学习
#31
既是UP有分﹐那我就.....
#32
樓主,fzd999他就是南京遠志的還原部的,沒想到竟然能踫到同仁,我是lzj
#33
up
#34
我看了就要晕了,不过好象有点趣,HOOK是做不到的,学习驱动程序也有点郁闷。
#35
另外还原精灵我觉得做得不是很好,来来回回拷几个大文件(>1G),保护空间就上升得很快。
#36
up
#37
我不知道,只是路过。
如果我把FAT备份,每次开机时还原就OK了。平时写时还是让你写,我只要把FAT用原来的换掉,你写的内容就没用。
NTFS我想也是一样吧。
见笑!
如果我把FAT备份,每次开机时还原就OK了。平时写时还是让你写,我只要把FAT用原来的换掉,你写的内容就没用。
NTFS我想也是一样吧。
见笑!
#38
FAT表备份当然是需要的。NTFS主要针对$Bitmap做手脚。
#39
好几天每上网,谢谢大家了。
#40
TO liotion(一只迷路的小青蛙) :
抱歉,我没有删除的能力。
谢谢各位的关心。
抱歉,我没有删除的能力。
谢谢各位的关心。
#41
呵呵,是没有删除的权力。
#42
关注!!!
#43
关注
#44
关注
#1
up
你跟南京远志有仇啊?一定要研究他们的还原系列产品?
你跟南京远志有仇啊?一定要研究他们的还原系列产品?
#2
当然不是,我选的毕业设计跟这些都有关。是怎样用软件实现硬盘保护技术,防毒技术。
谢谢关注。
谢谢关注。
#3
这样啊,还原精灵的原理是利用驱动程序在系统核心层拦截对硬盘的操作,并且把对FAT的操作纪录到分区的最后一个扇区。
你要了解的是Win9X下的VXD驱动程序和Win2000下的WDM驱动程序拦截技术,至于HOOK,在还原技术中没有运用。
另外,学习一下分区的MBR设计。
建议你学驱动程序先吧
好了我回答完了,给分!
你要了解的是Win9X下的VXD驱动程序和Win2000下的WDM驱动程序拦截技术,至于HOOK,在还原技术中没有运用。
另外,学习一下分区的MBR设计。
建议你学驱动程序先吧
好了我回答完了,给分!
#4
好的,谢谢。结帖时候肯定给分。如果不够,再发帖子放分。在此谢谢。
#5
另外请问,学习2000下的驱动应该从哪里入手?
#6
硬盘保护卡:
在起机的时候,保护卡先于操作系统获得控制权,修改了INT 13中断,在内存的
0000:004CH处把地址指向了另外的一段由保护卡写的程序段,该程序段实现了对硬盘的保护功能,有兴趣可以看一下。
DOS实模式下:
debug
a 100
xor ax,ax
int 13
int 3
按T单步执行,
找到类似于:f000:****的地址,它后面有一条语句
mov dl,80
这个地址是真正的INT 13 的地址
若想破解保护卡,在0:004C处改写如下:(例如:地址为:f000:1234)
e 0:004c 34 12 00 f0
OK!
在起机的时候,保护卡先于操作系统获得控制权,修改了INT 13中断,在内存的
0000:004CH处把地址指向了另外的一段由保护卡写的程序段,该程序段实现了对硬盘的保护功能,有兴趣可以看一下。
DOS实模式下:
debug
a 100
xor ax,ax
int 13
int 3
按T单步执行,
找到类似于:f000:****的地址,它后面有一条语句
mov dl,80
这个地址是真正的INT 13 的地址
若想破解保护卡,在0:004C处改写如下:(例如:地址为:f000:1234)
e 0:004c 34 12 00 f0
OK!
#7
对了,还有:
按q
退出debug
试着向硬盘写点东西看看!!!
按q
退出debug
试着向硬盘写点东西看看!!!
#8
以前我看过一点破解己方硬盘保护卡的资料。也是用汇编在debug下修改一些数据。现在想在vc环境下写一段程序,使显影盘保护的功能。
另外,谁能提供mbr的学习资料及方法。谢谢各位。
另外,谁能提供mbr的学习资料及方法。谢谢各位。
#9
我以前做过几个月,往事不堪回首啊
烦死了
烦死了
#10
To glacierrr(冰河纪的怪鸟) :
做过的话给兄弟讲一点经验之谈好么?
谢谢.
做过的话给兄弟讲一点经验之谈好么?
谢谢.
#11
学习ing
#12
hehe,你怎么跟我去年毕业设计的题目一模一样?你不会是苏大的吧?我们做的是NT/2000下的硬盘保护技术。建议你还是不要选这个课题,成功的希望很渺茫。我们当时反汇编了3万多行源码,看懂了大部分,但是好多涉及到系统底层,比如IDE端口读写,纠错环,等等等等,最后还是没有成功,还好答辩老师因为难度而没有卡我们。
#13
不是吧?我怎么会选择了这样的课题?我知道挺难的,但不至于有这么难吧?我还想两个月左右处效果呢。
#14
呵呵,那恭喜你能早日出效果:)
至少我是没有那个本事,呵呵:)
至少我是没有那个本事,呵呵:)
#15
不过我想,无论如何,两个月出成功,都绝对是impossible mission
#16
To codewarrior(会思考的草) :
能介绍一下你去年的经过么?或是给我提一下大致的思路.谢谢.我想知道都有哪些方法.需要哪些知识.我的信箱wzq150@163.com QQ 22438603。交个朋友如何?
能介绍一下你去年的经过么?或是给我提一下大致的思路.谢谢.我想知道都有哪些方法.需要哪些知识.我的信箱wzq150@163.com QQ 22438603。交个朋友如何?
#17
问题:怎样更改int 13h指针,使其指向一个用户自己编写的内存驻留程序。
#18
To codewarrior(会思考的草) :
我并不是要拿出一个像摸象样的商业软件,功能齐全,界面美观。小弟只要是能够实现这些具体功能就好了。
我并不是要拿出一个像摸象样的商业软件,功能齐全,界面美观。小弟只要是能够实现这些具体功能就好了。
#19
这个要视平台而定。如果只需要针对9x,那技术已经很旧了,就是改写int13而已。去网上能搜到一堆源码。
#20
你要知道如今好多公司都拿这个赚钱,比如promagic,还原精灵,硬盘保护神,这些软件售价都不菲,所以基本上你在网上问,是问不出个所以然的,没有哪个公司会公开这个技术——要公开也要等到这项技术无利可图之时。你要想做,就得一切靠自己从头来。
#21
简单提几个建议吧。
第一,你先明确你要实现哪些功能?如果仅仅是做一个写保护,就是干脆不让用户去写,那是比较easy的事情,98可以用修改int13实现,2000可以写个ifs过滤驱动——但是这样不能防止用户从软驱启动对硬盘进行破坏。如果你想实现还原的功能,就是允许用户写,但是重启动之后恢复,那难度就要上好几个档次,你得对os读写磁盘的具体过程和各种文件系统格式有非常深刻的了解,然后才能考虑如何去实现这个假写的动作。比如promagic是在整个硬盘的最末尾开辟一块空间(大约1G),来备份被写的文件,而还原精灵是直接利用分区上未使用的空间。
第二,保护的强度大概有多大?如果仅仅考虑Windows加载后的保护,那可以使用ifs过滤驱动或者vxd,但这样显然无法防止用户从软盘启动对重要数据进行破坏。如果要彻底保护,那必须从bios级开始考虑,包括在os引导之前和引导之后,都要考虑。
第三,是否允许用户来做一个多点的存储和还原?就是可以把系统能够还原到之前的多个状态,例如在安装了你的软件之后有一个状态,保存下来StatusA,之后安装了一个软件,保存状态StatusB,删除了一些不使用的软件StatusC,安装了新的软件StatusD,对于这种情况,是否可以做到把这四种状态都可以还原呢!
当然,如果只是你做的一个毕业设计课题,那么可以不用做到这么的深层次,因为这个已经远远的超出了一个毕业设计的内容要求了。
PS:我当时的思路是这样的:
写磁盘的操作可分为三个层次:写文件->写扇区->写I/O端口。如果要在文件层次上对磁盘操作进行拦截,显然要针对不同的文件系统编写相应的IFS过滤驱动程序,不仅耗时,而且运行效率相当低,用户会感觉到延迟,所以,初步设想,在扇区层次上对写盘操作进行拦截。具体实现起来是:
在操作系统加载之前,对整个磁盘按簇(或扇区?)建立一个R/W表,每个簇(扇区?)在整个表中都有一个bit。在Windows2000后,把磁盘中的一部分空余空间标记为坏簇,这样文件系统不会访问之,我们就可以利用这个空间来作为映射空间,记录每次写盘操作的详情。然后我们使用程序截取每次写文件操作的目的扇区(关键是这个功能用什么方法实现?做成磁盘过滤驱动程序还是做成保护模式下的内存驻留程序呢?),拦截到目的扇区后,进行判断,如果是对受保护的扇区进行写操作,那么就应该映射到我们预先留下的那段临时空间的扇区中去(至于映射算法,可以选择Hash函数或者其他算法),通过映射函数的计算,找到真正施行写操作的扇区,然后将用户此次写操作在临时空间的扇区中执行之,同时我们要在R/W表中,把刚才写操作原目的扇区标记为1(这就表示,如果用户下次要读取该扇区,我们应该到临时区中去读取)。如果要读文件,也要先截获此次读操作的目的扇区,再判断此扇区是否被写过,判断的方法仍然是读取对应R/W表中的位,为0,则不必映射,直接读取,为1,则必须先进行映射,然后才能读取。
考虑到现在的硬盘都比较大,因此相应的R/W表也很大,如果把这样一张R/W表放在内存中进行维护,十分不现实,因此借鉴Cache的镜象原理,保留R/W表的一部分在内存中,余下的仍放在磁盘上,再用一个算法实现映射(这个算法完全可以照搬目前计算机结构教科书上介绍的算法)。这样能效率和速度兼顾。
另外,为了能让用户在重启动之后恢复,可以在MBR中插入一段代码,这样能在操作系统加载之前,给用户一个机会,能把上次写在临时空间中的数据转储到他们本来应该在的那些扇区中去。执行之后,清空R/W表,清空临时空间,以便下次操作。
第一,你先明确你要实现哪些功能?如果仅仅是做一个写保护,就是干脆不让用户去写,那是比较easy的事情,98可以用修改int13实现,2000可以写个ifs过滤驱动——但是这样不能防止用户从软驱启动对硬盘进行破坏。如果你想实现还原的功能,就是允许用户写,但是重启动之后恢复,那难度就要上好几个档次,你得对os读写磁盘的具体过程和各种文件系统格式有非常深刻的了解,然后才能考虑如何去实现这个假写的动作。比如promagic是在整个硬盘的最末尾开辟一块空间(大约1G),来备份被写的文件,而还原精灵是直接利用分区上未使用的空间。
第二,保护的强度大概有多大?如果仅仅考虑Windows加载后的保护,那可以使用ifs过滤驱动或者vxd,但这样显然无法防止用户从软盘启动对重要数据进行破坏。如果要彻底保护,那必须从bios级开始考虑,包括在os引导之前和引导之后,都要考虑。
第三,是否允许用户来做一个多点的存储和还原?就是可以把系统能够还原到之前的多个状态,例如在安装了你的软件之后有一个状态,保存下来StatusA,之后安装了一个软件,保存状态StatusB,删除了一些不使用的软件StatusC,安装了新的软件StatusD,对于这种情况,是否可以做到把这四种状态都可以还原呢!
当然,如果只是你做的一个毕业设计课题,那么可以不用做到这么的深层次,因为这个已经远远的超出了一个毕业设计的内容要求了。
PS:我当时的思路是这样的:
写磁盘的操作可分为三个层次:写文件->写扇区->写I/O端口。如果要在文件层次上对磁盘操作进行拦截,显然要针对不同的文件系统编写相应的IFS过滤驱动程序,不仅耗时,而且运行效率相当低,用户会感觉到延迟,所以,初步设想,在扇区层次上对写盘操作进行拦截。具体实现起来是:
在操作系统加载之前,对整个磁盘按簇(或扇区?)建立一个R/W表,每个簇(扇区?)在整个表中都有一个bit。在Windows2000后,把磁盘中的一部分空余空间标记为坏簇,这样文件系统不会访问之,我们就可以利用这个空间来作为映射空间,记录每次写盘操作的详情。然后我们使用程序截取每次写文件操作的目的扇区(关键是这个功能用什么方法实现?做成磁盘过滤驱动程序还是做成保护模式下的内存驻留程序呢?),拦截到目的扇区后,进行判断,如果是对受保护的扇区进行写操作,那么就应该映射到我们预先留下的那段临时空间的扇区中去(至于映射算法,可以选择Hash函数或者其他算法),通过映射函数的计算,找到真正施行写操作的扇区,然后将用户此次写操作在临时空间的扇区中执行之,同时我们要在R/W表中,把刚才写操作原目的扇区标记为1(这就表示,如果用户下次要读取该扇区,我们应该到临时区中去读取)。如果要读文件,也要先截获此次读操作的目的扇区,再判断此扇区是否被写过,判断的方法仍然是读取对应R/W表中的位,为0,则不必映射,直接读取,为1,则必须先进行映射,然后才能读取。
考虑到现在的硬盘都比较大,因此相应的R/W表也很大,如果把这样一张R/W表放在内存中进行维护,十分不现实,因此借鉴Cache的镜象原理,保留R/W表的一部分在内存中,余下的仍放在磁盘上,再用一个算法实现映射(这个算法完全可以照搬目前计算机结构教科书上介绍的算法)。这样能效率和速度兼顾。
另外,为了能让用户在重启动之后恢复,可以在MBR中插入一段代码,这样能在操作系统加载之前,给用户一个机会,能把上次写在临时空间中的数据转储到他们本来应该在的那些扇区中去。执行之后,清空R/W表,清空临时空间,以便下次操作。
#22
太难了!
我只能给你精神上的支持。寒假可以不用回家了。
我只能给你精神上的支持。寒假可以不用回家了。
#23
回复人: codewarrior(会思考的草) ( ) 信誉:113 2004-01-03 09:44:00 得分:0
你要知道如今好多公司都拿这个赚钱,比如promagic,还原精灵,硬盘保护神,这些软件售价都不菲,所以基本上你在网上问,是问不出个所以然的,没有哪个公司会公开这个技术——要公开也要等到这项技术无利可图之时。你要想做,就得一切靠自己从头来。
其实,小弟只是想做一些简单的功能。比如说是在2000下实现用户可写,但是重启后恢复这一项就行。另外,软件我想短期内是作不出来成型的作品的。我想弄其原理,实现部分功能。
再次谢谢大家。
你要知道如今好多公司都拿这个赚钱,比如promagic,还原精灵,硬盘保护神,这些软件售价都不菲,所以基本上你在网上问,是问不出个所以然的,没有哪个公司会公开这个技术——要公开也要等到这项技术无利可图之时。你要想做,就得一切靠自己从头来。
其实,小弟只是想做一些简单的功能。比如说是在2000下实现用户可写,但是重启后恢复这一项就行。另外,软件我想短期内是作不出来成型的作品的。我想弄其原理,实现部分功能。
再次谢谢大家。
#24
对于保护的层次,我想先做简单一点的吧。先做进入windows之后的保护技术。至于从软盘引导进系统进行破坏,呵呵呵,先保护好windows下再说吧。
谢谢各位。
谢谢各位。
#25
这个就必须要用到驱动。你还是去反汇编一下ProMagic找找思路吧,呵呵。最好找5.0版的,比较简单一些。
#26
还有没有高手提供点建议。
#27
谢谢codewarrior(会思考的草) ,很高兴得到你的帮助.
#28
呵呵,新年好!学习!
#29
呵呵,老实说我到现在对这个东西的原理依然一知半解:)
#30
继续学习
#31
既是UP有分﹐那我就.....
#32
樓主,fzd999他就是南京遠志的還原部的,沒想到竟然能踫到同仁,我是lzj
#33
up
#34
我看了就要晕了,不过好象有点趣,HOOK是做不到的,学习驱动程序也有点郁闷。
#35
另外还原精灵我觉得做得不是很好,来来回回拷几个大文件(>1G),保护空间就上升得很快。
#36
up
#37
我不知道,只是路过。
如果我把FAT备份,每次开机时还原就OK了。平时写时还是让你写,我只要把FAT用原来的换掉,你写的内容就没用。
NTFS我想也是一样吧。
见笑!
如果我把FAT备份,每次开机时还原就OK了。平时写时还是让你写,我只要把FAT用原来的换掉,你写的内容就没用。
NTFS我想也是一样吧。
见笑!
#38
FAT表备份当然是需要的。NTFS主要针对$Bitmap做手脚。
#39
好几天每上网,谢谢大家了。
#40
TO liotion(一只迷路的小青蛙) :
抱歉,我没有删除的能力。
谢谢各位的关心。
抱歉,我没有删除的能力。
谢谢各位的关心。
#41
呵呵,是没有删除的权力。
#42
关注!!!
#43
关注
#44
关注