美章网 资料文库 Windows 95抖动图像范文

Windows 95抖动图像范文

Windows 95抖动图像

摘要该文剖析了Windows95的部分文件,给出了人们很感兴趣的用户定做启动徽标和关机图像的方法,并使其显示启动徽标抖动和变色。

一、引言

Windows95以更新更好的界面展现在用户面前,而给人印象最深的是表明其是"彻底"图形界面的引导及结束时的标志图形。Windows95使系统由图形引导启动并在图形界面中关闭,系统在显示微软启动徽标的同时进行初始化,在显示等待信息的同时完成系统退出并以一个图形化的提示信息结束系统工作。此外,Windows95还为旧DOS程序的运行设计了很好的图形化界面,从而使系统的整个工作过程完全可以脱离过去的命令行方式。本文介绍这些界面图形的定制和使启动封面图形抖动变色的方法。

二、Windows95的三幅界面图

Windows95用三幅图完成其初始化和关闭传递信息工作,即启动徽标(封面)、封底1(显示"Pleasewaitwhileyourcomputershutsdown")、封底2(显示"It''''snowsafetoturnoffyourcomputer")。其中封底1和封底2的图形是两个256色的位图文件,名字分别为LOGOW.SYS和LOGOS.SYS,存放在Windows的工作目录下,负责这两个图形显示的程序分别是USER.EXE和,它们在打开相应的图形文件后分别作文件格式检查。

的检查段代码为:

-u3b683b83

0AF4:3B68813F424DCMPWORDPTR[BX],4D42

0AF4:3B6CF9STC

0AF4:3B6D75B9JNZ3B28

0AF4:3B6FBBCE40MOVBX,40CE

0AF4:3B72833F28CMPWORDPTR[BX],+28

0AF4:3B7575F5JNZ3B6C

0AF4:3B77837F0C01CMPWORDPTR[BX+0C],+01

0AF4:3B7B75EFJNZ3B6C

0AF4:3B7D837F0E08CMPWORDPTR[BX+0E],+08

0AF4:3B8175E9JNZ3B6C

0AF4:3B8360DB60

寄存器BX中装的是打开成功的文件LOGOS.SYS首地址的偏移值,通过对比位图文件的首部结构,我们可以立即得到所打开的文件LOGOS.SYS是一个非压缩、位面数是1、256色的位图图像文件(关于位图文件的头部标志域可见附录1的简述)。实际上LOGOS.SYS文件确实是一个完整的位图文件,可以用Paintbrush编辑,它显示封底2的信息。因此我们可产生相应格式的位图文件取代,试验证明完全可行。

USER.EXE对LOGOW.SYS也作类似处理,只是对位图标志域检查对比的部分语句不连续,其各项检查如下:

renuser.exeuserexe

debuguserexe

-u5ada:abb8

5ADA:ABB8813F424DCMPWORDPTR[BX],4D42

-u5ada:abc4

5ADA:ABC4833F28CMPWORDPTR[BX],+28

-u5ada:abcb

5ADA:ABCB837F0C01CMPWORDPTR[BX+0C],+01

-u5ada:abd3

5ADA:ABD3837F0E08CMPWORDPTR[BX+0E],+08

其中寄存器BX中为打开的LOGOW.SYS存储首址。由此可见,可以用相应格式的位图来取代LOGOW.SYS用作封底1的显示。

值得注意的是,显示时自动按设定的屏幕分辨率来做全屏幕显示,对640×480、256色的屏幕,其位图大小最好设定为320×400像素。

三、启动徽标封面的定做方法

Windows95的封面没有独立文件形式的位图文件,这与对LOGOS.SYS的处理和USER.EXE对LOGOW.SYS的处理不同。笔者在剖析引导文件IO.SYS的过程中发现,Windows95的启动封面徽标是嵌入在引导文件IO.SYS中的,并经DBLSPACE压缩过,图像数据区长度为64KB。在笔者剖析的Windows95版本中,图像数据占据IO.SYS(文件长度223748B)217~344扇区,数据内部有多处"DS"标识,这是DBLSPACE压缩文件的标志,由于DBLSPACE是分段校验压缩文件,因此,即使此区内有一个字节的改动也会造成图像的大幅破坏。在上述IO.SYS中,图像显示执行

代码部分起始于以"DBLSBIN$\LOGO.SYS"标志的地方并占据110-112扇区。由于DBLSPACE的压缩文件很复杂并分段校验,使我们不能像对Windows3.1的那样通过改动组合文件或重编的部分代码来定做启动封面,但可以在MSDOS.SYS中以Logo=0来消隐显示。关于配置文件MSDOS.SYS的设定已有文献可查,本文附录2简述了其配置设定选择。

实际上,启动封面也是可以定做的。笔者在分析IO.SYS的过程中发现,IO.SYS在显示内部嵌入封面前先试图打开一个在引导目录下名为LOGO.SYS的文件(利用DOS功能调用INT21H,AH=3DH子功能),若打开失败(此文件不存在)则转显示内部嵌入封面(在及USER.EXE中打开文件失败时则不显示图形,而代之以文本显示有关信息),若打开成功则做文件格式检查,其要求的格式比对LOGOS.SYS的检查条件苛刻。

IO.SYS对LOGO.SYS检查的代码如下:

debugio.sys

-ude0e

12B9:DE0E813C424DCMPWORDPTR[SI],4D42

12B9:DE120FDB0F

12B9:DE13854801TESTCX,[BX+SI+01]

12B9:DE1683C60EADDSI,+0E

-ude19

12B9:DE19833C28CMPWORDPTR[SI],+28

-ude20

12B9:DE20837C0C01CMPWORDPTR[SI+0C],+01

-ude28

12B9:DE28837C0E08CMPWORDPTR[SI+0E],+08

-ude30

12B9:DE30817C044001CMPWORDPTR[SI+04],0140

-ude39

12B9:DE39817C089001CMPWORDPTR[SI+08],0190

-ude42

12B9:DE42837C1000CMPWORDPTR[SI+10],+00

从以上代码我们可以立即看出,所打开的文件是一个非压缩、幅度320×400、位面数为

1、256色的位图文件。因此,可以用Paintbrush等工具形成一个256色非压缩、320像素×400像素的位图文件并命名为LOGO.SYS,将其放在引导目录下即可。要求的LOGO.SYS格式恰好与LOGOS.SYS及LOGOW.SYS的格式一致。作为验证,可将LOGOS.SYS或LOGOW.SYS命名为LOGO.SYS并放在引导目录下,实验证明完全可行。如果引导目录下有名为LOGO.SYS的文件,但没有通过上述所有检查,则拒绝显示并且也不再显示内部嵌入的徽标封面。

四、撤销对LOGO.SYS的格式检查并形成抖动变色的徽标封面用上述方法显示的外部封面图像是静止的,而IO.SYS中的图像下面具有一个滚动的颜色条,如下的方法则可以使图像颜色变化抖动。

如果去掉引导目录下的LOGO.SYS,则IO.SYS内嵌的图像也可以做到整幅图面"彩云流动",具有很强的动感。位图的抖动变色是由IO.SYS处理的,其有关处理标志嵌入到上面对LOGO.SYS的判断语句内,因此将相关的语句作一下改动即可。方法为:用PCTOOLS或其它工具(DEBUG等)找到下面有下划线的部分,将其均改写为16进制机器代码90(nop不作任何操作的空指令),在首尾之间共60字节,其中含有一些代码在上文的反汇编中并未列出。

debugio.sys

-dde00

12B9:DE000093BA0200E8D602-0F8252018BF281

3C..........R....

12B9:DE10424D0F85480183C6-0E833C280F853E

01BM..H.....<(..>

12B9:DE20837C0C010F853601-837C0E080F852E

01.|....6..|.....

12B9:DE30817C0440010F8525-01817C0890010F

85.|.@...%..|....

12B9:DE401C01837C10000F85-14018B44241E2E

8E...|.......D$..

12B9:DE501E3E0FA2D802F6D8-04FFA2D90284E4

74.>.............

12B9:DE6006A3DA02A3DC021F-2EC606F28E0016

07...............

12B9:DE7083EC268BFCBD5F03-E84502B90080E8

E9..&..._..E.....

对IO.SYS作上述改动后,可以显示任何位图,但由于显示是根据系统显示驱动程序及屏幕调整图形大小,因此尺度上仍以原设定为好。若想做改动应先测试,结果可能会失真,但不影响显示及运行。经过上述改动后,在没有外部LOGO.SYS的情况下,内嵌的封面可以抖动和变色。若将LOGOS.SYS或LOGOW.SYS命名为LOGO.SYS并放在引导目录下即可代替内部封面而且具有变化的色彩。但若对这两个位图进行了编辑或是用Paintbrush形成的新文件一般不能变色,这是由于Paintbrush形成的文件实际用到的色彩很少,位图颜色表大部分是空的。要形成

一个新的变色徽标应该:

1.用Paintbrush等形成一个普通256色位图;

2.使形成的位图具有完全的256颜色索引表,这可以从LOGOW.SYS或LOGOS.SYS的颜色索引表中得到,即复制LOGOW.SYS或LOGOS.SYS文件偏移36H~436H的域到新文件相同的域。注意不要改动位图前0~36H字节。将新文件命名为LOGO.SYS并放在引导目录下即可。

五、撤销及USER.EXE对LOGOS.SYS和LOGOW.SYS的格式检

查方法与前面类似,此处不再一一详述。

由于引导文件非常重要,在做改动时一定要在拷贝上改动,现在DOS7用IFSHIP.SYS可以处理长达255B的文件名,而此文件名的存储是将目录项属性字节改为0FH,即系统(04)+隐藏(02)+只读(01)+卷标(08)=VFAT的文件名属性(0FH),并利用多个目录项区将长文件名连续存放。为了防止数据丢失,DOS7屏蔽了绝对磁盘写INT26H,而PCTOOLS等工具的EDIT功能是调用INT26H进行写盘的的,若在硬盘上改动会造成系统死锁而取消写盘,在软盘上则没有这个问题,因此建议对IO.SYS的修改在系统软磁盘上进行。

对DOS7的系统软盘形成很容易,在DOS7下初始化的磁盘,只将IO.SYS、MSDOS.SYS、COM-拷进即可引导Windows95,这是由于DOS7有更精巧的BOOT引导区,引导文件IO.SYS可以不连续存放、不占起始簇、文件名项不是第一目录项。

六、附录:MSDOS.SYS的配置和位图文件结构

附录1:本文涉及到的位图文件首部重要域

偏移长度(Bytes)

标识信息

00H2424DH即"BM"

0EH4位图信息头大小28H=40字节

12H4位图宽度像素数4001H=320个像素

16H4位图高度像素数9001H=400个像素

1AH2位图目标设备位面数1

1CH2位图阵列每像素所需位数,可取值为

1:单色,4:16色,8:256色,24:16G色

1EH4位图压缩标志,可取值:0:未压缩,1:行程压缩8位位图,2:4位压缩位图因此本文IO.SYS所读的位图LOGO.SYS是非压缩、位面数为1、256色、宽320像素、高400像素的位图。

附录2:MSDOS.SYS中的配置选择

[Options]

Logo=1/0;1:显示徽标,0:消隐徽标

BootGUI=1/0;1:启动后直接引导视窗,0:启动后显示DOS提示符

Network=1/0;1:网络已安装,0:未安装

BootWin=1/0;1:引导视窗系统,0:引导旧的DOS系统

BootDelay=2;1:StartingWindows95标志延迟可以改成它

值,0:不显示

BootKeys=1/0;1:激活启动控制功能键F4/F5/F8,0:屏蔽启动功

能键

DrvSpace=1/0;1/0:加载/不加载磁盘压缩程序

Dblspace=1/0;1/0:加载/不加载磁盘压缩程序

DoubleBuffer=1/0

;1:需为不兼容设备保留常规内存,0:不保留[Paths]

UninstallDir=D:\

;取消安装驱动器,其根目录上有2个用于恢复的文件

WinDir=C:\Windows

;工作目录

WinBootDir=C:\Windows;启动目录

HostWinBootDrv=C:

;所在磁盘

对不同的安装设置,上面所示可能有的没有,可以对MSDOS.SYS进行编辑。