上回书说到,想给 Compaq V3174TU 换个无线网卡,因为白名单挡横没能得手。但顽强的三太爷经过不屈不挠的奋斗,终于在今晚将之攻克。
先捡起来的,是上文里的第三板斧前半截。试图用 ethtool 看下能不能绕开 V3174TU 的网卡白名单,办法就是修改网卡自己 eeprom 里写定的 ID。于是直接在 Q4OS 里 apt-get 安装了 ethtool。安装后在命令行下执行提示找不到,后来发现它是安装在 sbin 目录下,但该目录并不在搜索路径列表里。这个小问题没去管它,调用时带上路经也就是了。用 lspci 之类的命令查看当前原装的 Intel 3945abg 的 ID 是 8086:4222。再用 ethtool -i wlan0 命令查看,有一行显示当前驱动是 iwl3945,还有一行显示着 support-eeprom-access: no。从网上的其他信息印证,修改网卡 ID 可能是要换驱动的,这个信息是 yes 还是 no 既取决于硬件,也取决于驱动。用百度搜索“4965 eeprom access driver”,发现 www.bubuko.com/infodetail-506920.html 里,其中一行有 compat-wireless-3.0-2/drivers/net/wireless/iwlegacy/iwl-4965-eeprom.c 这样的内容,看起来如果用 iwlegacy 驱动的话,4965 有希望能够写入(之所以没先搜 6205 是因为从时间顺序上考虑,越早的可能性越大)。预想的方案是:在某台能够使用 4965 网卡的机器上,在 Linux 下用 iwlegacy 驱动程序把网卡驱动起来,然后用 ethtool 工具修改其 ID(还需要 offset 这个关键信息),操作前最好记住原先的 ID(在 devid.info 的某个页面上看,4965 的硬件 ID 应该是 8086:11[00~07, 20~27])。至此,突然想到个问题,这样修改硬件 ID 之后,那岂不是新硬件被当成老硬件用,而并不能发挥新硬件的优势吗?看来还是修改 BIOS 白名单才更靠谱啊!!!
于是回到了第三板斧的后半截,继续想办法对付 BIOS。在 www.bios-mods.com/downloads/ 下找到了 Phoenix Bios Editor v2.2.13,比之前找到的 v2.2.6 略好,但是怀疑网卡白名单所在的模块打不开。关键此工具在打开官方 BIOS 的最后还是会报一个错误,让人不敢相信其可靠性,故转而寻找其他工具。后来发现有人提及一个叫 andy’s Phoenix tool 的工具,在 bbs.bios.net.cn/forum.php?mod=viewthread&tid=128240 里找到了较新的版本(更新于 2015.10.31),下载下来,用它打开之前下载的 BIOS 文件,果然顺利,并无任何警告或者错误。
一直怀疑白名单就在 BIOSCODE 文件夹下的文件里,挨个用 HxD 打开查找,果然在 BIOSCOD3.ROM 里找到了 86 80 22 42 的串(与上述的 8086:4222 吻合),非常高兴,但不知修改后怎样回构 BIOS。原来,界面上的 Go 按钮就是重建 BIOS。一开始执行的时候因为没有 SLIC 文件所以总是失败,选定 SLIC 文件后则又提示还需要 ACPI 的 rw 文件。这个文件需要另一个叫做 RW Everything 的工具在目标机上提取(有的地方说它的执行依赖 .net 环境,但经验证,所使用的 1.6.8.1 并不需要)。至此,Go 按钮已经可以生成新的 BIOS,但是对新 BIOS 再次解开验证,发现对于 BIOSCOD3.ROM 做的修改并没有合并入生成的文件中。
查资料得知如果要同时修改别的模块(例如 BIOSCOD3.ROM)的话,需要在 Phoenix Tool 的高级设置里选中 Allow user to modify other modules,点击 Go 按钮后执行到半中间,工具会自动停下,通知用户可以修改 DUMP 目录下的其他模块了,等修改就绪后,继续执行即可(其实连 SLIC 也是可以不添加的,在高级设置里还有个 No SLIC 的选项)。把原来 BIOSCOD3.ROM 中的 86 80 22 42、86 80 27 42、86 80 28 42 更改为 86 80 85 00(8086:0085 是 N6205 的 ID)、86 80 22 42(原装网卡的 ID,此处如果 ID 不是升序排列则生成 BIOS 文件会出错)、86 80 28 42(8086:4228 是 4965agn 的 ID),成功刷入机器后,原装网卡启动正常(说明至少没把 BIOS 搞坏),但换上其他网卡仍然是 104 错误。由于新加的这两个 ID 都是在网上根据型号查到的,而且也已经确认一个型号并不止一个 ID,由于 ID 不对机器就不能引导系统,看来只好每个可能的 ID 都试一遍以下步骤:修改 ID、生成 BIOS、更新 BIOS(好在有 WinPE 环境,但引导前要把原装网卡装上或者不安装无线网卡)、重启确认。但执行结果更令人沮丧,全部没用。心下开始起疑,难道改错了地方?于是做了想法验证:把原装网卡的 ID 抹去试一把。竟然没有影响正常引导,看来推测是对的,应该是在别的模块里有网卡 ID 白名单。只好继续查找,终于又找到一个(也是另外唯一的一个),文件名是 MOD_5100.ROM。为了保险,根据此文件名在网络上进行了搜索,找到了 http://airodump.net/hewlett-packard-bios-hacking/ 的一篇文章,可以佐证此文件确实是网卡白名单所在。
做了和之前雷同的修改,无效。仔细看那篇英文文章,发现除了硬件 ID(含厂商 ID 和设备 ID 两部分)之外,还需要修改一个子系统 ID!这个子系统 ID 在 Windows 系统下会比较方便查看,但面临的问题是,如果把要查看的网卡插入,则根本引导不了 Windows!无奈之下又注意到,这个本子的无线网卡是打开 D 壳上的一个挡板就能更换的,于是进行热交换的想法涌上心头。网上似乎也有相关信息表示曾经有人这么干过。先把原装无线网卡插上,正常引导进入 WinPE,然后依次换成 4965agn、N6205,每个都用 AIDA 把 Vendor ID、Device ID、Subsystem ID 显示出并记录下来。如此得到 4965agn 的所有 ID 为 8086:4230-8086:1114,N6205 的是 8086:0085-8086:1311,原装的 3945abg 的则是 8086:4222-103c:135d。到 MOD_5100.ROM 里查找 3c 10 5d 13,果然找到,它所在的一组 ID 和 86 80 22 42 所在的一组之间有一个 FF FF FF FF 看起来较为特别,应该是两组数据的分割符。分别把 8086:1114 和 8086:1311 也找了空隙写入,生成 BIOS 后刷入。关机,把 N6205 插入,开机后果然顺利进入了 Q4OS。
为了检查网卡工作是否正常,还特意把 4965agn 也换上去测试了一下。结果不太好,信号不稳定,打开网页时快时慢,可能是因为网卡本身是三天线设计,而只连接了机子内仅有的两根天线导致;N6205 就是双天线设计,因此表现很好。至此大功告成。