VM启动中基于BIOS/EFI的SLP/SLIC欺骗


VM启动中基于BIOS/EFI的SLP/SLIC欺骗

什么是 SLP / SLIC

微软用SLIC来确定用户是否为OEM正版。OEM(微软为特定的 Partner 发放操作系统的 OEM 版本,以满足合作双赢的需求。这些OEM版本的操作系统随机器预安装,并采用批量许可的授权模式。这样的批量许可难以有效识别合法用户和非法用户,可能被滥用而导致版权问题。为了控制这个问题,微软规定在安装每一个操作系统时将其激活。OEM可在安装过程中根据OEM和批量许可的媒体安装映像。

一般主板是硬件升级中最不可能更换的部件,所以要识别一台机器是否为OEM合法用户,可以在每台预装操作系统的机器主板上,在BIOS里写入特定的信息,来标示这是一台OEM合法用户的机器。这样的信息就是SLIC。不同的OEM厂商的SLIC不同,所以他们的OEM操作系统不能混用。在没有预装系统的机器,即便是品牌机,也不会含有SLIC信息。这样,OEM版的操作系统就可以限定在OEM机器上使用。

SLP 1.0 (只支持 BIOS440 - OEM SLP 信息) – XP, Server 2003/2003 R2(基本上是明文存储OEM信息字符串) SLP 2.6 (BIOS.440 & EFIs - Dell 2.6 SLIC) - NT 6.0 (Vista/Server 2008), NT 6.1 (7/Server 2008 R2), NT 6.2 (Server 2012), NT 6.3 (Server 2012 R2), NT 10.0 (Server 2016/Server 2019/Server 2022)

SLIC 2.6 向后兼容所有之前的 SLIC 版本。

验证过程

  1. 安装时用户需要输入光盘盒上的序列号(CD-KEY)。对于随机购买了OEM版本Vista的用户,可以在主机上找到一个相应版本的标签,作为购买Vista OEM版的凭证。标签上面有一个带有象征意义的序列号,因为OEM版本的用户并不需要输入序列号。系统根据序列号识别Vista的不同版本,如基本家庭版、高级家庭版、商业版、旗舰版等。安装完毕后,序列号会被转换为四组字母或数字,即在“系统属性”里看到的“产品ID”。其中第二组是“OEM”的,即为OEM版本的序列号(CD-KEY)。从这里开始,产品ID代替了CD-KEY。同时,安装程序为OEM版本的安装生成一个OEM证书。

  2. 当每次系统启动时,BIOS里的信息就会被加载到内存中。

  3. 当登录Vista系统之后,系统调用SLP服务,验证操作系统的许可权,尤其是激活状态。开始根据产品ID来识别系统的授权状态。如果没有检测到产品ID或者没有检测到合法的零售版产品ID,则视为未激活。如果检测到合法的零售版产品ID,则视为成功激活。如果检测到OEM版的产品ID,则继续验证。

  4. 如果检测到OEM版产品ID,验证过程启动,并检查已安装的OEM证书是否正确。主要是用先前从BIOS加载到内存里的SLIC的公钥验证产品证书的数字签名。如果验证失败,则视为未激活。

  5. 验证ACPI里SLIC与RSDT(Root System Des cription Table,根系统描述表)的OEM ID字段比较,以及用ACPI里SLIC标志和XSDT(Extended System Des cription Table,扩展系统描述表)中的OEM ID和OEM Table ID字段比较,如果不一致,则视为未激活。

  6. 经过以上过程后,方视为正确的OEM授权,否则视为未激活并按照相关流程处理,例如要求激活。

SLP 2.0

  1. 如果检测到SLP产品密钥(SLP与用的CD-KEY),SLP验证过程启动。
  2. Windows确认其包含(导入)的OEM证书是微软签名的。如果检测到OEM证书,则SLP验证继续进行。如果未检测到OEM证书,则SLP验证失败,要求进行产品激活。 3.OEM证书将同ACPI_SLIC BIOS表中的OEM公钥做比较。如果OEM证书和BIOS中的OEM公钥匹配,则SLP验证过程继续进行。如果OEM证书和BIOS中的OEM公钥不匹配,则SLP验证失败,要求进行产品激活。
  3. ACPI_SLIC BIOS表中也包含SLP标志。通过OEM公钥验证SLP标志,如通过,SLP验证过程继续。否则,SLP验证失败,要求进行产品激活。
  4. SLP标志中包括OEMID字串和OEMTableID字串,与ACPI_RSDT和ACPI_XSDT的OEMID和OEMTableID比较,若其中之一与SLP标志中的字串完全相符,则SLP验证通过。否则,SLP验证失败,要求进行产品激活。

破解

破解SLIC一般有硬件破解和软件破解两种思路,并已经有相应的实现。

硬件修改就是所谓“刷BIOS”,将OEM机器里的BIOS信息提取出来,并复制到其它机器上。这样做的优点是,对操作系统而言,几乎无异于合法的OEM机器。但缺点也是技术难度高、风险大,如果不是老手,或刷BIOS时出现停电或读写故障,系统将无法正常启动,通常需要返厂处理。

软件修改就是利用操作系统只读取从BIOS载入内存的副本而不是BIOS本身这一弱点,在启动Vista之前,修改内存上的副本,使之无异于OEM机器。这样做的优点是,风险小。缺点是内存的信息和BIOS中的信息不同,当计算机休眠后,BIOS信息会被重新写入内存,原有的破解会被覆盖。

VMware

VMware Workstation (Desktop)

桌面端的 BIOS 替换可以采用两种思路:

  1. <VM>.vmx 指定 BIOS 文件参数
  2. 不加参数,让其 Fallback 至系统,并替换 VMware 自身的 BIOS/EFI ROM 文件

Method 1

向配置文件中加入 bios440.filename = "vmbios.ROM"

具体要换成对应的ROM文件名,ROM 文件置于 .vmx文件所在目录,使用相对路径访问;或者其他目录,使用绝对路径。

Method 2

VMware 自身的 BIOS/EFI 文件位于 ...\VMware\VMware Workstation\x64.

  • BIOS.440.ROM - BIOS
  • EFI32.ROM - UEFI x86
  • EFI64.ROM - UEFI x64

VMware vSphere Hypervisor (ESXi) (Server)

同样的,服务器可以使用如上方法,但是要注意:BIOS文件需要放置于 /vmfs/ 下的 datastore 中,并使用绝对目录。

或者使用 SMBIOS.reflectHost = "true" 将宿主机 OEM 信息直通,需要宿主机 OEM 为微软 Partner.

详见:http://kb.vmware.com/kb/1002095

向 ESXi 集成 SLIC 信息

modify-vmware-bios-with-slic

大同小异

相关附件&工具


文章作者: sfc9982
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 sfc9982 !
  目录