曾几何时,我也下载过看雪论坛精华看的津津有味。可惜一直没有动手去调试,学到的 x86 汇编指令也忘得差不多了。最近将老机器的 T4200 CPU 换成了更省电,温度更低的 P8800,为了支援新的 VT 虚拟化,特地将 Dell 1545 的 BIOS 从 A8 升级到 A14。顺带发现 SLIC 已经自动升级到 2.0 了。但是升级以后,win7 开始菜单的睡眠功能就无法使用了,于是萌生了降级刷 BIOS 的想法。

下好了 1545A13 的 BIOS,运行后发现出现了一个 warning 信息,大意就是不能降级安装,点个确定就退出了。理想情况下 warning 应该是可以忽略的啊,网上搜索了一下,有个 /forceit 的命令行开关,实际执行发现没效果,决定上调试器。之前试用过 windbg,有个功能很不错,可以在访问指定范围的内存时停下来,可惜没找到如何进入用户态。换了 ollydbg,德国人出品的共享软件,非商用不要钱,写邮件注册下就好。

围观了一下 ollydbg 的教程,基本上简单的破解就三板斧,首先搜索所有引用字符串,然后定位到代码里引用这个字符串的位置,在附近下个断点,最后实际运行下,观察代码路径,看看是哪个代码分支跳转到字符串的,然后改跳转就好。于是按部就班的修改一下 1545A13 的驱动:

查找所有字符串,然后在弹出的窗口中搜索:

然后在反汇编器里面跟踪:

于是很清晰的定位到显示 msgbox 的位置:

可以看到,显示警告信息的前面几条指令里,有个条件跳转 JLE 00422E15。我们直接将其改为强制跳转,绕过警告信息的显示和接下来的退出流程。先按下 F2 打一个断点,然后按 F9 直接运行到该条指令:

将指令改为 JMP,地址不变

于是我们就看见亲爱的降级刷 BIOS 界面了,完。