微软SLP2.0技术弱点及突破分析

关于OEM版本(32位)Vista,众所周知,这是惟一不需要激活的vista版本,原理如下
今天我们要说的是在一般DIY的兼容机上如何可以实现Vista产品的免激活安装。

微软SLP 2.0技术弱点分析及突破验证的演示

作者:Binbin ( [email protected])

一.           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硬件,从而不要求进行产品激活。
三.           突破验证演示

Award BIOS是DIY兼容机中最常见的BIOS之一。下面,我来用实际的操作步骤,给大家演示一下在无源码的情况下为Award BIOS 6.0添加SLP 2.0支持的全过程,使之通过SLP 2.0验证。

我们用到的工具都是从网上搜集来的,名称如下: 

1. CBROM 2.19:用户添加、替换Award BIOS模块的工具。我们用它来修改、替换ACPI数据区模块。 

2. MODBIN6 2.01.01:这个工具用于修改BIOS的一些字串和选项。我们利用该软件运行过程中的临时文件,修改Award BIOS的核心BIOS模块。因为CBROM是无法修改核心BIOS模块的。 

3. WinHex:著名的Hex Editor。我们用它来修改ACPI数据区的内容。 

4. Windows Vista:被演示的主要对象。我们的所有修改操作,都是在Windows Vista下�行的。Windows XP下也可以做。不过我们在Windows 2000下运行MODBIN6,出现了一些问题。 

除此之外,我们还需要从OEM硬件中提取相关的数据,提取过程随OEM品牌不同而不同,故不详述,有兴趣的,可以查找相关的文章。准备齐全之后,我们可以下手修改了。 

1. 先选中一款要修改主板的BIOS,将其不MODBIN6、CBROM放置在同一文件夹下。如图1
图1:工作目录概况

2. MODBIN6只认BIN扩展名的BIOS,如果你的BIOS文件丌是BIN扩展名,要先改名。 

3. 双击MODBIN6.EXE,来打开MODBIN6的主界面,选择我们要修改的BIOS文件,按ENTER键确认。如图2
图2:用MODBIN6选中要操作的BIOS

4. 这时,不要关闭MODBIN6窗口,切换回先前的文件夹窗口,MODBIN6生成了一些临时文件。其中ORIGINAL.BIN就是我们要修改的文件。如图3
图3:在MODBIN6临时文件中找修改目标

5. 用WinHex打开该文件。并搜索“RSDT”(无引号)字串。如图4。
图4:WinHex查找字串
图5:找到的字串

6. 按OK键找到如图5的结果,这是BIOS中的ACPI表的索引,每4个字节一个表名,只有表名在这个索引中的表,才会被BIOS识别,并复制到相关的内存区域中。我们必须尽量替换掉用处丌大的表,来放置SLIC表。这时有四种可能: 

a) 找到的字串比较长,形如“RSDTFACPDSDTAPICSSDTSRATFACS”。这种情况下,选择的余地比较大。我试验的结果是,SRAT可以安全的替换,因为这个表根本没有在ACPI数据区用到。这样的替换丌会损失任何ACPI相关的功能。 

b) 找到的字串比较短,形如“RSDTFACPDSDTAPICMCFGFACS”。这种情况下,选择余地较小。必须替换ACPI用到的表。我的经验是,MCFG可以被替换,替换之后,没有明显的问题产生。如果没有MCFG,但是有APIC,也可以替换,不过可能会影响到已安装操作系统的运行,需要立即重新安装操作系统,才能正常工作。这点和打开、关闭CMOS中的APIC功能时出现的现象类似。 

c) 找到更少的字串,形如“RSDTFACPDSDTFACS”。这种情况下,无法进行修改。这几个表都是ACPI的关键表,替换任何一个,都会导致Windows丌能正常运行。 

d) 没有找到字串。这种情况下,也无法�行修改。往往是新的BIOS有这种问题。应该是BIOS查找ACPI表的方式有变化。比如Gigabyte的一些新主板。不过可以尝试一下这些主板的旧版BIOS,例如我的Gigabyte M55Plus-S3G Rev1.x,最新的F9版BIOS丌可以改,而旧版的F5却可以,修改之后,降级BIOS,也获得了成功。 

7. 用“SLIC”替换选中的表名。并单击工具栏上的保存图标,来保存文件。如图6
图6:修改选中的表名

8. 切换到MODBIN6窗口,在菜单上选择Save来保存BIOS文件。如图7。
图7:在MODBIN6中保存BIOS

9. 接下来,我们要使用CBROM219来在ACPI的数据区添加SLIC表的内容,并修改RSDT表的OEMID和OEMTableID。 

10. �入命令行下,使用命令分离BIOS的ACPI数据区:cbrom219 8hmx6323.bin /acpitbl extract。在提示输入文件名时,直接按ENTER键,来使用默认的文件名。如图8。
图8:提取ACPI数据区

11. 用WinHex打开分离出来的acpitbl.bin。 

12. 修改RSDT表的OEMID和OEMTableID为SLP标志的对应字串。OEMID固定为6字节,OEMTableID固定为8字节。丌足的字符需要用空格(0x20)补齐。修改后保存文件。如图9
图9:修改RSDT的OEMID和OEMTableID

13. 追加SLIC表数据到ACPI数据区尾部。在命令行下运行命令:copy acpitbl.bin /b + acpislic.bin /b acpitbl.bin /b。acpislic.bin为SLIC表数据文件,其中包含SLP证书公钥和SLP标志。如提示覆盖,请确认。 

14. 将修改后的ACPI数据区加入到BIOS中。在命令行下运行命令:cbrom219 8hmx6323.bin /acpitbl acpitbl.bin。如图10
图10:添加修改过的ACPI数据区到BIOS中

15. BIOS文件修改完成。刷新到主板中。安装Windows Vista,戒者用现有的Windows Vista来检测结果。
四.           检测修改结果

刷新完BIOS之后,我们必须通过相应的测试软件,来检测修改的正确性。我们可以使用Everest的最新版本-EVEREST Ultimate v3.50.888 Beta来查看结果。

首先,启动Everest,展开左侧“主板”节点,单击其中的“ACPI”项。右侧屏幕会显示出ACPI的相关信息。查看其中是否有SLIC表,如图11。表的长度应为374字节。
图11:查看SLIC表的内容

然后,我们要查看RSDT表,看其中的OEMID和OEMTableID是否和SLP标志中的字串一样,是否按我们的修改,成为了正确的结果,如图12。
图12:查看RSDT表的内容

满足了这两项-有SLIC表、RSDT表修改正确-一般就可以认为是修改成功了。但最后是否能正常突破SLP 2.0,还要实际去装一个Windows Vista看看。而�D需要使用SLP产品密钥(CD-KEY)和导入对应BIOS的OEM证书。安装系统和本文的主题关系丌大,故丌详述。系统安装成功之后,应该不要求产品激活。打开“系统”属性页面,应该看到如图13的样子。
图13:Windows已激活
 

五. 写在文章最后的话

感谢我的合作人、优秀的BIOS工程师-aeno。是他从始至终协助我的技术研究,分析并提供了相关技术信息。

技术是没有正邪之分的,关键看使用的人出于什么目的使用该技术。我们分析SLP 2.0技术的弱点及公开突破验证演示,完全出于技术研讨的目的。我们认为突破验证的演示仅适用不实验室环境。我本人和合作人aeno都在使用预装Windows Vista的品牌机,从而有机会研究这项技术。Windows Vista是一个优秀的操作系统,我也是热爱微软产品的技术人员。研究微软软件技术的人士众多,如本文有任何纰漏,还请交流、指正。Binbin 2007-02-09
 
破解vista的七种方法
下面列出各种破解vista的方法,按出现的时间顺序排列

    1.替换法 
    原理:用替换vista的一些许可文件的办法来用测试版序列号激活vista,是最早出现的办法
    缺点:许可变为测试版,有时间限制,现在已经被逐渐抛弃.

    2.kms私服激活法 
    原理:不是去微软的官方服务器激活,而是去私人架设的服务器激活,也可以用vmware虚拟机自己架设激活服务器或在局域网中其它机器架设激活服务器来进行激活。
    优点:激活后跟正版软件并无区别,此法微软较难封杀。
    缺点:只适用于b版(商业版)和e版(企业版),并且隔6个月就要重新激活一次。而且私服存在不稳定性,说不定哪天就关了,而自己架设的话比较复杂。
        3.timestop(时间停止)法 
    原理:vista在激活之前有30天的试用期,此法加载一个驱动(timerstop.sys),使倒计时停止在30天,从而使你避免激活,无限试用。
    优点:操作简便,可以用于u版(旗舰版),无功能限制(自动更新,梦幻桌面等都可使用)
    缺点:vista处于未激活状态,虽然没有功能上的限制,但是对于追求完美的人来说,会感到影响美观。并且可以预见的是,微软一定会在未来的某次升级(如sp1)之后封杀此方法。
     使用方法:推荐步骤是安装vista时不输序列号,并且不勾选"联机时自动激活Windows"。装好vista后不进行任何更新,在 TimeStop.exe上点右键以管理员的身份运行TimeStop.exe,然后电脑会自动重启,完成破解。之后可以运行“slmgr.vbs -dlv”验证倒计时是否停止在30天。 
       卸载方法:删除windows\system32\timerstop.sys

    4.刷bios法 
    原理:此法是将品牌机oem信息刷入你机器bios,然后可以使用oem版的vista.
    优点:跟真正的oem正版没有区别
    缺点:由于需要改bios、刷bios,对新手来说有难度,而且有一定危险性,并且每台机器不同,并不一定都能刷成功。
    使用方法:不同主板有不同方法
    卸载方法:再把bios刷回去

    5.softmod(免刷BIOS或动态BIOS)法 
    原理:在启动vista之前,先往bios里添加slic的OEM验证数据,从而使vista认为你的机器为OEM的品牌机型。
    优点:可以达到刷bios法的效果,而又没有刷bios的危险,操作简单。激活之后跟正版的oem vista没有区别。
     缺点:每次启动时会闪过一堆字符,影响美观,也减慢启动速度(虽然只是减慢了一点点)。而且由于此法需要修改MBR来达到效果,如果你以前修改过MBR, 例如品牌机或笔记本的隐藏分区还原功能,又例如Acronis True Image的F11功能,会产生冲突导致无法启动。
  
这个东西的工作原理是这样的,在计算机引导启动的时候,它往bios里添加slic的验证数据,然后加载操作系统,以模拟硬修改bios的效果。
    6.暴力算号法(强烈不推荐) 
    原理:随机生成序列号进行验证,直到验证成功。
    优点:可能会算出真正的正版序列号。
    缺点:目前的这个算法就是纯随机,效率太低,跟本没有实用性,能算出号的概率基本为0。
    
    7.OEM BIOS Emulation Toolkit 
    原理:通过设备驱动程序ROYAL.SYS 模拟OEM BIOS ,提供ACPI_SLIC信息。
    优点:操作并不太复杂(我估计几天后一定会出现全自动傻瓜包),激活之后跟正版的oem vista没有区别。
    缺点:在windows下安装驱动,有可能导致系统稳定性降低,而且目前此法不支持64位vista。由于跟timestop一样也是加载驱动,很可能微软在未来的某次更新之后封杀此法。
   


现在已有无需刷BIOS的激活方法了。直接导入证书,修改安装OEM序列号,就成功激活了。
 

你可能感兴趣的:(职场,微软,vista,休闲)