64位Windows以及32位Windows Vista及更高版本
在这些版本的Windows里,画蓝屏的函数叫KiDisplayBlueScreen。输入“u kidisplaybluescreen”然后一直输入“u”命令显示函数的内存页,直到你找到对InbvSolidColorFill函数的调用为止。 在32位Windows上,你可以按上一节给出的方法来编辑颜色值。在64位系统上,InvbSolidColorFill前的那个指令是传递颜色的指 令,所以复制它的地址并输入“eb <地址>+4”进行编辑。调试器会进入内存编辑模式,然后你就可以修改它的值(比如1是红色,2是绿色):
查看结果
你现在可以准备让系统蓝屏了。如果你用的是64位系统,那可能已经蓝屏了。这是因为Kernel Patch Protection会发现这些修改,然后使系统蓝屏。这样做可以避免一些第三方软件厂商考虑用修改内核代码的方式实现某些功能。不过,系统最多可能会延迟7分钟才蓝屏。要想随时蓝屏,可以运行Notmyfault工具(你可以从《Windows Internals》的相关页面中下载到),然后按下“Do Bug”按钮(为避免数据丢失,请确保你保存了所有文件并关闭了其它程序):
然后你就会得到一个自选颜色的蓝屏了,比如我选的红屏:
节日蓝屏
为了增添节日气氛,我还要生成一个节日主题的蓝屏:不仅要修改背景色,还要修改文字颜色。在64位Windows Vista及更高版本下,找到紧跟InvbSolidColorFill函数调用的InvbSetTextColor,并找到将文字颜色传给该函数的指令 “move ecx, 0Fh”:
0Fh参数表示白色,但你可以用同样的方法改成别的颜色。使用“eb”命令,传入该指令的地址加1。在下图中我设置成了红色(也就是1):
这就是我弄出的很有喜庆气氛的蓝屏:
节日快乐!
FlowerCode 译自 Mark's Blog