资源描述:
《破解windows9x屏幕保护程序的口令》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、破解Windows9X屏幕保护程序的口令作者:刘起凌笔者在破解Windows9X屏幕保护程序口令的过程屮,用的是一个超强的软件调试工具:Numoga公司的Soft-ICE3.01forWindows95,鉴于Soft-TCE使用上的复杂性以及整个破解工作的枯燥和繁琐,笔者略去了对跟踪破解过程的叙述。对于Windows9X屏幕保护程序的口令,有三点是需要首先明白的:(1)口令的有效字符为从0x20到Oxff的可打印字符共计224个;(2)允许的口令最大长度为128个字节;(3)对于26个英文字母,大小写等效。值得注意的是对于Windows9X中文版
2、来说,由于在屏幕保护程序启动后屏蔽了中文输入法的激活热键,所以,尽管你可以将Windows9X屏幕保护程序的口令设置为汉字,但通常很少有人这样做。因为那样的话你将只能通过事先将口令复制到剪贴版(选屮字串再按Ctrl+C或Ctrl+X),然后再从剪贴版粘贴(Ctrl+V)的办法才能实现汉字口令的输入。这显然是比较麻烦的。对于上述的第二点,我们可以通过先复制一段长于128个字节的字串到剪贴版,再在口令输入栏将字串粘贴的办法来验证。你会发现‘Windows9X将我们字串中长于128字符后的部分截掉并忽略了。现在,我们首先要确定的一个问题就是:Windo
3、ws9X将我们输入的口令存放在什么地方?我们知道,Windows9X的用户口令保存在一个由"用户名+.PWL"的文件中;在Windows3.1和WindowsNT4.0中,屏幕保护程序的口令是存放在文件control,ini'I1的。而事实上Windows9X对屏幕保护程序口令的保存并不在上述文件中。Windows9X将我们输入的屏幕保护程序口令经过加密变换后保存到了它的系统注册表屮!具体的存放路径如下:HKEYCURRENTUSERControlPaneldesktopScreenSaveData我们可以运行Regedit来查看,会发现
4、ScrecnSave_Data注册项有如下特征:1)以0x00空结束符收尾2)长度为我们所输入的口令长度的两倍加一(0x00空结束符)3)除了0x00空结束符外,所有数值都在字符’0'至『9'和’人’到丫’间变化(即0x30^0x39,0x4广0x46)4)最大长度为257(含0x00空结束符)上述第一点,如果以一个C程序员的观点来看,说明ScreenSaveData注册项保存的实际上是一个字符串。而第二点和第三点,正是我们需要处理的部分。事实上,将这些字符两两一组合并再转换成相应的ASCII数值就得到了经过Windows9X加密(如果我们认为这
5、也算加密的话)的数据。具体的转换规则是:0x30)——>0x000x31)——>0x01,,,符符符-字字字-9AB字符'例如:FASC0x39)>0x090x41)>0x0aISCIA0x46)>0x0f0x42)——>0x0b加密字符串:"09FCD68C23"对应ASCII值:0x300x390x460x430x440x360x380x430x320x330x00转换得的值:0x09Oxfc0xd60x8c0x23经过以上论述,再看第四点,也可以证明Windows9X所承认的屏幕保护程序的口令的最大长度是128个字符。具体编程而言,我们可以
6、用以下MFC代码调Win32SDK中的API函数从系统注册表屮读出ScreenSaveData注册项的值:HKEYhkey;charstrValue[256+1];DWORDdwType,dwSize=sizoof(strValue);//打开注册表的指定键(注册项)if(RegOpenKeyEx(HKEY_CURRENT_USER,"ControlPanel\desktop",0,KEY_ALL_ACCESS,&hkey)!二ERROR_SUCCESS){MessageBox(,z无法打开系统注册表!〃,〃错误〃);return;}//取注册
7、项(键)的值if(RegQueryValueEx(hkey,"ScreenSave_Data",KULL,fedwType,(LPBYTE)strValue,fedwSize)!=ERROR_SUCCESS){MessageBox("无法取得系统注册表中的键值!〃,〃错误〃);return;}//关闭打开的指定键(注册项)RegCloseKey(hkey);而将Windows9X用字符串形式所保存的所谓加密值转换为我们所需要的ASCII数值,对于一个熟练的C程序员来说是极为简单的,下面给出MFC示范代码:CStringLockData;LockD
8、ata.GetBufferSetLength(dwSize/2);//说明:以上两句若以纯粹的C代码来写只需一句://unsignedc