关于Microsoft Virtual PC 添加SLIC表及修改过程中的分析资料
向BIOS 添加SLIC表的方式有两种,分为静态和动态。静态方法比较简单,相对安全些,不需要进行反汇编操作,但是被微软的几率远大于动态方法。因为静态方法SLIC表在内存中的地址是0FFF00000H ~ 0FFFFFFFFH(静态2)和 0000FF200H(静态3)左右,所以只要微软一个补丁就可以全面的。前些日子用静态工具修改过一些AMI BIOS ,发现Vista OEM Business 死活激活不了,痛下决心决定好好研究下动态的修改方法。毕竟已经有很多前辈修改成功过了。参考借鉴了作者NopWorld的《给AMI BIOS 添加SLIC表及修改过程中的分析资料》
下面以Microsoft Virtual PC 2007 BIOS为例,分析一些修改的内容。
1) 先用EXESCOPE 导出Virtual PC.exe 里bios->13500->1033模块,保存为“BIOS.ROM”。
2) 运行MMTOOL v2.22.1,点击“Load ROM”,选“BIOS.ROM”。选择Extract标签,然后选中ID中的1B(Single Link Arch BIOS)模块。“Extract Module”要选中“In uncompressed form”,否则会以压缩的形式解压。点击“Browse”选择模块的保存路径,这里是“D:\OEMSLIC\1b.bin”,然后按“Extract”按钮解压。
3) 用UltraEdit打开1b.bin,将RSDT表偏移4H的长度从28改成2C。复制XSDT总共2C字节的数据,覆盖到RSDT表的40H偏移处。修改RSDT表和XDST表。
4) 再打开lenovo或者其他牌子的SLIC文件,复制其总共176H(374)字节的内容,覆盖到RSDT表的80H偏移处,刚刚好可以放下。然后保存。修改后如下图所示
前期的准备工作到此结束。
用HIEW32打开1b.bin,修改以下地方:
(1) 0002AC66: 662EA36400 mov cs:[0064],eax
(2) 0002AD80: 662E8B3E4400 mov edi,cs:[0044]
(3) 0002AD86: 67662E898740000000 mov cs:[edi][00000040],eax
(4) 0002AD8F: 662E8306440004 add d,cs:[0044],004 ;" "
(5) 0002AD96: 665F pop edi
(6) 0002AD98: C3 retn
以上部分修正XSDT表,去除了“mov cs:edi,0000”
(7) 0002AD99: B88000 mov ax,00080 ;"