破解Windows 9X屏幕保护程序的密码 忘记了Windows 9X的屏幕保护密码是一件非常要命的事情，如果你能进入Windows还好说，要是你设置了进入Windows就运行屏幕保护，那就有得你头痛了。不过，有矛就有盾，Windows 9X的屏幕保护程序密码是可以破解的。 废除屏幕保护程序的密码 让屏幕保护程序的密码作废，然后再重新设置是对付屏幕保护程序密码最好的方法，下面提供了几种方法供大家参考： 一、在“屏幕保护程序”下重新设置
由于更改屏幕保护程序不须要对旧的密码进行验证，所以用新的密码覆盖旧的密码，就能破解掉以前的屏幕保护密码，其做法是：点击“我的电脑/控制面板/显示/屏幕保护程序/更改”在出现的“更改密码”窗口中两次输入新密码就行了。

二、在Windows的安全模式下破解密码
如果你的计算机设置有开机后自动进入屏幕保护程序，而你又忘了屏幕保护密码，你只须在启动计算机的时候按F5键进入Windows的安全模式，在安全模式下你设置的开机后自动进入屏幕保护就不起作用了，此时你重新设置一下密码或将开机自动进入屏幕保护去掉（你怎么设置的就怎么去掉），问题就解决了。

三、在注册表下废除屏幕保护程序的密码
Windows 9X的屏幕保护程序密码实际上是通过加密算法加密后保存在注册表里的，因此只要我们找到其注册表子键的相应位置并将之删除，就不用输入屏幕保护密码也能进入系统了，具体做法：
（1）在“开始/运行”下输入“regedit”命令进入注册表编辑器；
（2）找到“HKEY_CURRENT_USER\Control Panel\desktop\ScreenSave_Data”并将之删除，退出注册表编辑器，下次在屏幕保护状态下进入系统就不需要再输入密码了。

注意：此方法对于设置有开机自动进入屏幕保护程序，而又禁止了进入Windows安全模式的计算机特别有效，你可以在DOS状态下使用“regedit /e fyy.reg HKEY_CURRENT_USER\Control Panel\desktop” 命令导出注册表相应的子键，并用edit命令对 fyy.reg文件进行编辑（删除“ScreenSave_Data”），再用“regedit ffy.reg”命令将修改好的注册表重新导入，就废除了屏幕保护程序的密码。

读出屏幕保护程序的密码

前面我们提到只要删除注册表里的“HKEY_CURRENT_USER\Control Panel\desktop\ScreenSave
Data”子键就能废除屏幕保护程序的密码，由此可见此处就是系统存放屏幕保护程序密码的地方，我们可不可以用什么方法把经过加密算法的键值读出来，得到系统原来的密码呢？
运行 “Regedit” 查看“\HKEY_CURRENT_USER\Control Panel\desktop\ScreenSave_Data”子键，会发现 “ScreenSave_Data”注册项有如下特征：

（１）以 0x00 空结束符收尾；
（２）长度为我们所输入的口令长度的两倍加一（ 0x00 空结束符）；
（３）除了 0x00 空结束符外，所有数值都在字符“0”到“9”和“A”到“F”间变化（即　0x30～0x39，0x41～0x46）；
（４）最大长度为 257 （ 含 0x00 空结束符）

对于 Windows 9X 屏幕保护程序的口令，有三点是需要首先明白的：
（1）口令的有效字符为从 0x20 到 0xff 的可打印字符共计224 个；
（2）允许的口令最大长度为 128 个字节；
（3）对于26个英文字母，大小写等效。
上述第一点，说明 ScreenSave_Data 注册项保存的实际上是一个字符串。而第二点和第三点，正是我们需要处理的部分。事实上，将这些字符两两一组合并再转换成相应的 ASCII 数值就得到了经过 Windows 9X 加密的数据。具体的转换规则是：
字符“O”（ ASCII 值 0x30 ）---->　0x00
字符“1”（ ASCII 值 0x31 ）---->　0x01
……
字符“9”（ ASCII 值 0x39 ）---->　0x09
字符“A”（ ASCII 值 0x41 ）---->　0x0a
字符“B”（ ASCII 值 0x42 ）---->　0x0b
……
字符“F”（ ASCII 值 0x46 ）---->　0x0f
例如：
加密字符串：“09FCD68C23”
对应ASCII值：0x30 0x39 0x46 0x43 0x44 0x36 0x38 0x43 0x32 0x33 0x00
转换得的值：0x09 0xfc 0xd6 0x8c 0x23
现在的问题是：Windows 9X 对我们的口令做了哪些变换后得到的上述转换值？
事实上，Windows 9X 只是用了一个简单的数组对我们的口令中的每一字符进行了逐字节异或运算而已。这一点可以这样来验证：我们先设定口令为“ABCD”，这时系统注册表中的 ScreenSave_Data 注册项的值假定是“09AC3559”（ 对应的 ASCII 值分别为：0x30, 0x39, 0x41, 0x43, 0x33, 0x35, 0x35, 0x39, 0x00 ；对应的转换值为： 0x09, 0xac, 0x35, 0x59 ）；再将口令更改为“ALCD”，查看系统注册表的注册项，我们会发现值变成了“09A23559”，这表明字符串中“A”，“C”，“D”的转换值都没改变，进一步来说，就是整个口令字符串中的每一个字节都是在与一个相应的固定值在运算。而之所以在这里说 Windows 9X 对字节的运算是异或运算，这一点正是破解 Windows 9X 屏幕保护程序的口令的关键所在。
至于这个用以对字节异或运算的数组（也就是所谓的密钥）的获得，至少可以有两个办法。
第一种办法是基于上述研究心得的最直接的办法，这里给出简单描述，有兴趣的朋友可以自行编程来加以验证：先输入一个 128 字节长的口令并确定，再读出系统注册表中 ScreenSave_Data 键的值并转换后，和我们刚才输入的口令字符串逐字节异或，就得到了这个 Windows 9X 的所谓密钥。
第二种办法是基于另一个研究心得上的。在对 Windows 9X 本身加解密口令字串执行机制的跟踪分析过程中，笔者发现 Windows 9X 本身在生成密钥时（尤其是在屏幕保护程序激活后对用户的输入做比较检验时）使用的主要是一个随机交换算法，下面是经笔者简化后效果完全相同的生成算法：
设定一个四字节长的增效器数组，值分别为 0xb2,0xdc,0x90,0x8f。
设定一个 256 字节长的运算数组和一个 128 字节长的密钥数组。
设定上一次运算的增效值并赋初值 0。
首先将运算数组中各元素的下标值赋各元素（256次循环）。
从运算数组的首元素开始循环：计算出要运算数组中要交换元素值的元素下标（也就是有规律的所谓随机值）并与当前元素交换；记下本次运算中用到的增效值以供下次循环时使用（256次循环）；
再一个 128 次循环，只是要交换的元素的开始下标是从第二个元素开始的，交换法则也稍有不同，同时从运算数组中按一定法则取值赋密钥数组。
至此密钥数组生成完成。
(张韵涛)