引言

这样的BIOS论坛上就有得下载,为什么要自己搞那么高风险的事情呢?只要是出于两方面的考虑:一方面,某些机型的MOD BIOS论坛上没得下载,就好像我的R61i 8943机型;另一方面,论坛上下载的MOD BIOS很难全面跟得上官方更新速度。从年初开始我一直在关注R61i 8943A18 15寸普屏机型解除1802、1804和“白清单”限制的BIOS,并通过多种方式联系国内、外的高手,但到前两天为止都还没有此机型的MOD BIOS放出来。

参考forum.thinkpads.com论坛里Zender网友发表的修改BIOS资料后,决定自己动手。经过这两天日日夜夜的折腾,于今天上午终于完成了对R61i 8943机型BIOS的修改,并在我的机子上测试通过。给机子升级的联想拆机Intel WiFi Link 5100 AGN无线网卡工作完美,无须绝缘第20脚,开机无1802报错,硬件无线开关和Fn F5组合键,无线指示灯全部工作正常。

可行性研究

ThinkPad笔记本电脑自从T43起更改了BIOS对无线网卡检测机制,再也不能像之前的机型那简单“跳过”处理来解决非认证网卡使用的问题。经Zender网友的研究发现:新机型,例如我的R61i,BIOS里面对无线网卡检测代码存放在BIOSCODE区域的B.05模块里面。B.05模块的无线网卡相关内容包括两方面主要内容:1、认证的无线网卡数据,即我们所说的“白清单”或者“whitelist”;2、无线网卡检测过程及检测结果数据的传送。由此可以看出实现对非认证无线网卡的使用可以从三方面入一手:

1、把非认证的无线网卡数据加入到B.05模块中,但此方法不太实际,非认证的无线网卡实在太多了,对用户来说用哪张无线网卡就加那张卡的数据入去也不容易操作;

2、修改B.05模块中对无线网卡检测过程,这个方法看上去不错,但实际操作起来也有非常大的困难,主要因为不同此检测过程不同,而且要修改多处,例如R61i 8943就要修改50多处;

3、更改无线网卡检测结果,在B.05模块对无线网卡检测后,无论其检测结果如何都把其检测的结果更改为“是”。所以第三个方法最好,只要更改一处理论上就可以实现对所有非认证的无线网卡的正常使用。

B.05模块对无线网卡的检测首先检测miniPCI-E插槽有没有无线网卡,如果检测到有无线网卡就读取无线网卡的硬件数据。然后拿这个读取得来的数据在“白清单”查找,查找的结果存放某个状态寄存器里面。此状态寄存器被清除(即清0),表示miniPCI-E插槽上没有无线网卡或者无线网卡是通过认证的;此状态寄存器被设置(即置1),表示此无线网卡非认证的,同时给无线网卡第20脚发送一个无线传输关闭的信号(“radio disable”)。只要在B.05模块对无线网卡的检测后,人为再将这个状态寄存器清0一次即可。

实现过程设计

在总结forum.thinkpads.com论坛Zender和本论坛cayman网友的经验,并作了一些简化后得出如下实现过程:

1、获得ThinkPad BIOS的镜像文件。利用官方网站的BIOS升级文件包中WinPhlash.exe程序通过对BIOS进行备份便可以获得BIOS镜像文件。

2、从BIOS镜像文件中提取BIOSCODE区域的B.05模块。运行phnxdeco.exe后,生成的phoenix_.B5便是BIOSCODE区域的B.05模块。

3、通过修改phoenix_.B5文件实现在B.05模块对无线网卡的检测后将状态寄存器清0。此过程由phnxpatch.exe完成。

4、把修改后的phoenix_.B5压缩文件成B.05模块。prepare.exe实现对phoenix_.B5压缩。

5、把修改后的B.05模块放回BIOS镜像文件中的BIOSCODE区域。此过程由phnxmod.exe完成。

6、更新修改后的BIOS镜像文件校验码。此过程由phnxcksm.exe完成。

7、把修改后的BIOS镜像文件刷回ThinkPad中。再次利用WinPhlash.exe刷新BIOS。

详细实现过程

先到ThinkPad官方网站上下载对应最新的BIOS硬盘版升级程序,按官方说明更新BIOS。下载本贴的附件,解压后会成生一个名为bios_mod的文件夹,里面包含修改所需的程序。此过程都在此文件夹里面完成。然后开始修改BIOS。

1、获得ThinkPad BIOS镜像文件。

首先找到官方的BIOS升级程序所在的文件夹,一般在C:\DRIVERS\FLASH里面。然后运行WinPhlash.exe程序,并设置为只备份BIOS的操作模式,填入BIOS备份文件名:bios.bak,点击“Browes”按钮找到程序所在的文件夹里面扩展名FL1的BIOS文件,然后点击右下角的“Backup BIOS”按钮进行备份BIOS。程序运行完成后,便会在程序所在文件夹里生成一个名为bios.bak的BIOS镜像文件。把这个bios.bak文件复制到bios_mod的文件夹里面。

1802,1804,白清单

1802,1804,白清单

2、从BIOS镜像文件中提取BIOSCODE区域的B.05模块。

打开命令行窗口,并进入到名为bios_mod的文件夹中。

输入命令:phnxdeco bios.bak -x

回车运行。运行完毕后会在bios_mod文件夹中生成几十个文件。在生成的文件中找到名为:phoenix_.B5的文件,并复制到此目录下名为:models的文件夹里面。然后把那些生成的多余的文件删除,以防出错。

1802,1804,白清单

1802,1804,白清单

3、修改phoenix_.B5文件

在命令行窗口里面输入命令:phnxpatch patches models

回车运行。程序运行完毕后会在models文件夹中生成名为:phoenix_.B5.patched文件。

此过程不能在Windows Vista下操作。

1802,1804,白清单

4、把修改后的phoenix_.B5文件压缩成B.05模块

把models文件夹中:

phoenix_.B5文件重命名为:old.b5

phoenix_.B5.patched文件重命名为:new.b5

1802,1804,白清单

把models文件夹中old.B5和new.B5两文件复制到bios_mod文件夹中。

在命令行窗口里面输入命令:prepare old.txt

回车运行。

在命令行窗口里面输入命令:prepare new.txt

回车运行。

两次命令运行完毕后生成4个文件:OLD.LOG、OLD.MOD、NEW.LOG、NEW.MOD,其中OLD.MOD和NEW.MOD将在后面的操作过程中会用到。

1802,1804,白清单

查看OLD.MOD和NEW.MOD两文件的大小是否一样,如果大小不一样就要用HEX工具把NEW.MOD文件的最后增减“00”,直到与OLD.MOD一样大小为止,否则将无法进行下一步的工作。我的例子中,NEW.MOD文件比OLD.MOD小了7个字节,所以要在其最后增加7个“00”使两文件大小一样。

1802,1804,白清单

1802,1804,白清单

5、把修改后名为NEW.MOD文件放回到BIOS镜像文件:bios.bak中

在命令行窗口里面输入命令:phnxmod bios.bak OLD.MOD NEW.MOD

回车运行。

6、更新修改后的BIOS镜像文件校验码 在命令行窗口里面输入命令:phnxcksm bios.bak

回车运行。运行完毕后,把bios.bak文件重命名为:bios.rom

1802,1804,白清单

7、把修改后的BIOS镜像文件bios.rom刷回ThinkPad BIOS中

把bios_mod文件夹中名为:bios.rom的修改后的BIOS镜像文件复制到官方BIOS升级程序所在的文件夹,一般在C:\DRIVERS\FLASH里面。然后在此文件中运行WinPhlash.exe程序把修改后的BIOS镜像文件bios.rom刷回ThinkPad。

1802,1804,白清单

测试结果

修改BIOS后的R61i用联想拆机的Intel WiFi Link 5100 AGN无线网卡工作完美,无须绝缘第20脚,开机无1802报错,硬件无线开关和Fn F5组合键工作正常,无线指示灯工作正常。

1802,1804,白清单

总结

单从结果上看似乎已经是很久很之前的事情了,别人早就做过。可是很多事情别人都做的,看似很容易,如果没有亲身实验,始终是没办体验到那过程的艰辛和乐趣。经过此次动手不但学会了如何修改ThinkPad的BIOS来解除1802、1804和“白清单”限制,同时在前人的基础上对操作过程作了优化,减少了修改过程中两个步骤:解压缩扩展名为FL1的官方BIOS文件和压缩修改后BIOS镜像文件成为FL1文件,并使操作过程更简单一些,全新过程直接在windows XP下实现。

注:

1、附件中部分文件和程序由forum.thinkpads.com论坛里Zender网友提供,版权为Zender网友所有。

2、未经本人同意不得转载。

补充:

1、phnxdeco.exe程序无法支持大于2M的BIOS镜像文件,附件的phnxsplit.exe程序则可以,使用方法差不多。例如:X200的BIOS镜像文件为8M,则要用phnxsplit.exe来提取BIOS模块,并生成文件。

2、不同机型BIOSCODE中对无线网卡检测及“白清单”代码存放的模块不同。但一定在由phnxsplit.exe程序生成以名为:BIOSCODExx.ROM的文件中,或者由phnxdeco.exe生成以名为:phoenix_.Bx文件中。

1802,1804,白清单

只要把这些文件,全部复制入models文件夹中即可。当运行phnxpatch程序后,models文件夹中生成以patched为扩展名为破解后的文件。

1802,1804,白清单

例如X200的最新的3.03BIOS镜像为8M,只能用phnxsplit.exe来提取BIOS模块。运行phnxpatch后在models文件夹中生成了BIOSCODE06.rom.patched,表明X200的最新的3.03BIOS的BIOSCODE中对无线网卡检测及“白清单”代码存放的模块为BIOSCODE06。此时只要对BIOSCODE06处理即可,其它可以不理。

1802,1804,白清单

3、再把文件BIOSCODE06.rom重命名为:old.b5

件BIOSCODE06.rom.patched重命名为:new.b5

然后继续其它步骤即可。

1802,1804,白清单