看到不是蓝色的蓝屏还是挺让人震惊的,就连我也一样。就目前TechEd听众的反应来看,我估计你们一会就要去弄出各种颜色的蓝屏向你的朋友炫耀去了。我最早在几年前看到Dave Solomon和Dan Pearson在一次分析崩溃转储的会议上这么搞过,这次我在Case of the Unexplained演讲结束的时候还让观众选蓝屏的颜色。不过注意了,我接下来要说的改颜色的方法是手动的,只在当次有效,所以很适合演示目的。不要错过我在文章结尾为大家准备的节日蓝屏图。
我们要修改内核代码,首先就是要打开修改内存中的内核代码的功能。Windows在小于2GB内存的系统上用4KB的内存页来存储内核代码,这样比较方便设置合适的页保护属性。比如内核数据页应该允许读取和写入访问,而内核代码页就只应该允许读取和执行访问。为了提高虚拟地址翻译的速度,Windows在资源充足的系统上使用大内存页(4 MB)。这就是说如果有代码和数据同时存储在一个内存页里,这个内存页就必须允许读取、写入和执行访问。所以为了确保你可以编辑内存页,你可以建议Windows使用大内存页。如果你的系统是Windows XP或者Server 2003,并且内存小于256 MB,或者是Windows Vista或更高版本且内存小于2 GB,在HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management下建立一个名为LargePageMinimum,类型为REG_DWORD,数据为1的注册表值:
为了让你不必在Windows自动重启前手忙脚乱地冲到朋友面前炫耀你的成果,你可以关闭自动重启。在Windows XP和Server 2003系统中,右键单击“我的电脑”,选择“高级”选项卡,单击“启动和故障恢复”中的“设置”按钮。在Windows Vista及更高版本中,右键单击开始菜单中的“计算机”选择“属性”,单击“高级系统设置”,选择“高级”选项卡,单击“启动和故障恢复”中的“设置”按钮。最后,取消选择“自动重新启动”复选框:
如果你在用64位 Windows Vista或更高版本,你需要用调试模式启动系统,这样才可以用内核调试器的“本地调试”模式。你可以在开机的时候按F8然后选择“调试模式启动”或者在“系统配置”工具中选择“调试”复选框:
下面重启并以管理员身份运行调试器(如果开了UAC,以管理员身份运行)。在File菜单中打开“Symbol Search Path”对话框,输入这个字符串:srv*c:\symbols*http://msdl.microsoft.com/download/symbols(c:\symbols 可以是任意本地目录,用于给调试器存放缓存的符号),这样就可以将调试器符号路径指向微软符号服务器。下面在File菜单中打开“Kernel Debugging”对话框,单击“Local”选项卡,按“确定”按钮:
接下来的步骤会因你的系统版本而有所不同。
这些系统上显示蓝屏的函数是KeBugCheck2。你要找的是这个函数把颜色值传递给填充屏幕背景的函数InbvSolidColorFill的地方。输入“u kebugcheck2”命令来显示函数开头,然后继续输入“u”命令显示更多的内存页,直到你看到对InbvSolidColorFill的调用为止。 (在输入一次“u”之后,你只要一直按回车就可以重复这个命令了)。你大概要显示30-40个内存页才能看到这个调用:
在这个调用之前,你会看到一个带有参数4的指令(“push 4”),如上图。选择地址行并按下Ctrl+C以复制这个指令的地址。接下来在调试器命令窗口中输入“eb ”,然后按Ctrl+V粘贴这个地址,然后输入“+1”,然后按回车。调试器会进入内存编辑模式,并从那个颜色代码的地址开始编辑。现在你可以选颜色了,1是红色,2是绿色,你还可以试试别的颜色。只要输入数字然后按两次回车就可以保存修改并退出编辑模式。退出后你的屏幕应该是这个样子:
欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛
https://bbs.txwb.com
关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩
|