一. SLP技术简介
微软从Windows XP 开始引入了SLP(System-Locked Preinstallation)技术, 用于OEM产品的辅助激活。SLP仅用于OEM产品,不会在零售版或批量授权产品中出现。Windows XP采用的是SLP 1.0版,其原理是检测BIOS中是否存在由OEM硬件厂家设置的特定SLP字串,如果有,则认为软件为OEM合法授权,成为激活状态;否则,则要求用户输入OEM硬件附带的COA号码,并通过网络或电话激活软件。由于原理简单,很快被熟悉BIOS原理及相关软件操作的人破解,随意在非OEM硬件-DIY的兼容机上实现了一样的效果。普遍流行的做法是使用DMI编辑软件,在BIOS的DMI数据区加入SLP字串,使Windows XP认为OEM授权合法,成为激活状态。
在微软新推出的Windows Vista操作系统中,升级了SLP技术为2.0版。SLP 2.0根据1.0的不足,加强了验证的技术,使其由简单的验证字串,变为验证BIOS中的SLP证书、标志以及硬件相关的特征。SLP 2.0在BIOS的ACPI中扩展出了一个新表-SLIC,用于储存SLP证书公钥(SLP PubKey)以及SLP授权标志(SLP Marker)。
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验证失败,要求进行产品激活。
4. ACPI_SLIC BIOS表中也包含SLP标志。通过OEM公钥验证SLP标志,如通过,SLP验证过程继续。否则,SLP验证失败,要求进行产品激活。
5. SLP标志中包括OEMID字串和OEMTableID字串,与ACPI_RSDT和ACPI_XSDT的OEMID和OEMTableID比较,若其中之一与SLP标志中的字串完全相符,则SLP验证通过。否则,SLP验证失败,要求进行产品激活。
二. SLP技术弱点
大家看过了以上的介绍文字,应该对SLP 2.0验证有了初步的理解。对于DIY的兼容机而言,BIOS中是不存在ACPI_SLIC表的,故无法通过SLP 2.0验证。但是,SLP 2.0技术存在着弱点,我们可以使用从OEM硬件-各种品牌机中获取的信息,将SLP 2.0的各项验证的数据移植到DIY的兼容机中。
对于购买了预装Windows Vista OEM硬件的人,SLP产品密钥、OEM证书、SLP证书公钥和SLP标志都是已知的。SLP产品密钥和OEM证书通常存在不Windows Vista系统恢复盘中。SLP证书公钥和SLP标志存储OEM硬件的BIOS的ACPI_SLIC表中。
DIY的兼容机无法满足SLP 2.0验证主要是BIOS中缺少ACPI_SLIC表。其他的东西都可以通过分离OEM硬件中的相关数据来获得。所以,最重要的是为BIOS添加SLP 2.0支持-在无BIOS源码的情况下,添加一个包含SLP证书公钥和SLP标志的ACPI_SLIC表到BIOS中。要实现真正的添加,是有困难的,我目前使用的方法是替换现有的、功能较小的ACPI表。虽然可能造成一定的问题,但用于试验和技术演示,是完全足够的。
再者,SLP 2.0验证了SLP标志中的OEMID和OEMTableID字串不系统BIOS的ACPI_RSDT和ACPI_XSDT对应字串的一致性。所以,我们必须要修改兼容机BIOS中的ACPI_RDST和ACPI_XSDT的OEMID和OEMTableID,以便与SLP标志中的字串相符。尽管,这种强行修改OEMID和OEMTableID的做法,从技术角度讲,是丌规矩的做法,可能产生问题。但经过试验,这种修改可以在绝大多数BIOS上迚行,没有产生任何可察觉的问题。
综上所述,SLP 2.0的技术弱点,就是兼容机可以通过某种手法在BIOS中添加包含特定数据的ACPI_SLIC表,并修改ACPI_RSDT戒ACPI_XSDT的OEMID及OEMTableID,来欺骗SLP 2.0验证,使其认为所使用的硬件为合法的OEM硬件,从而不要求进行产品激活。