一个多功能的硬盘主引导程序

Author: 南 京 燕 士 海 Date: 1993-10-01

        本人自编一个新的主引导记录程序,除了保持上述全部功能外,还具备以下三个特殊功能。
        1硬盘引导成功后,利用时钟中断(18.2次/秒)对INT21向量进行监察,一旦该向量被修改,就立即蜂鸣报警,然后再修改正确,该功能将对一些以INT21中断作为传播途径的文件型病毒起到很好的免疫作用。
        2软盘启动后进不了硬盘,该功能对于通过软盘启动后将病毒传给硬盘的系统型病毒来说,是极好的防治。
        3硬盘在启动过程中,需用户输入PASSWORD,这个功能对于286以上的微机而言已算不上特殊了,但对于无CMOS设置的PC机来说是比较实用的。
        该主引导记录的编程思想是利用硬盘启动过程中必须执行0头0柱1扇区内容的特点,将原主引导记录从0头0柱1扇区搬至0头0柱3扇区,新的主引导记录保存在0头0柱1扇区,这样就保证了硬盘在设备自检完成后先执行新生引导程序,再执行原主引导程序,直至引导成功。
        (如需新主引导程序清单请来函联系)
        该主引导程序之所以能实现上述特殊功能,主要采取了三个动作。
        1通过修改时钟中断INT8(18.2次/秒)中断向量使之指向一段用户程序,程序中以INT21的向量进行判别是否被修改了,然后再跳转到原来的INT8中断入口。
        2隐藏了硬盘介质标志,软驱启动后因无法找到磁盘介质标志而不承认硬盘的存在。
        3通过修改INT13中断向量,使之也指向一段用户程序,该程序中将说明磁盘介质的存贮位置,从而使得硬盘能正确访问其主引导记录。
        需要说明的是,新的INT8和INT13部分内容必须驻留内存,本程序中的解决方案是将它们推向内存高端9000:0处(针对于640K常规内存而言最大不超过9F00:0,如果512K常规内存可为7500:0,最大不得超过7F00:0),以保证DOS在正常情况下访问不到这段内存,如果读者要稳妥起见,也可以将这段内存改为隐含,以不被DOS利用。此外程序中的部分源指针值(SI)和目标指针(DI)是根据代码偏移地址值而定的,它们将随程序偏移地址的变化而变化,各位读者务请注意。
        本程序中PASSWORD为911,也可以任意改为其它三字节数或字母,这段程序已在数台不同型号的机子上调试通过,实践证明它能有效地防止某些文件型病毒的传染和破坏。
        (南京燕士海)