BIOS Marker(LENOVO)研究专题

BIOS Marker(LENOVO)研究专题

12-20 17:13:02  浏览次数:310次  栏目:BIOS设置

本文由ZHAOLIANG大侠编写! 
特点:
BIOS文件中有“$SLP”,
DOS下用 Phlash16 刷BIOS的同时,
加参数刷入 marker文件.

注意:仅用于试验环境的技术研究以及漏洞的验证。不涉及任何有版权的内容,仅供技术交流研究之用。
XR410&E290&E680 Marker 的分析:
【暂时称这种方式为硬MARKER】

在 SETMARK.BAT 批处理中:
phlash16 LE4_SLP2.wph /prot SLP:SLP2MARK.bin /X
分析如下:
phlash16 是 Phoenix 的 DOS 下刷BIOS的软件,
LE4_SLP2.wph 是 BIOS文件
/prot SLP:    是phlash16的参数,意思是在 “$SLP”的端口处写
SLP2MARK.bin  是SLIC表的marker部分
【SLIC表 = 24h 表头 + 9Ch PUBKey + B6h Marker 】
/X          是phlash16的参数,推测意思是 SLP2MARK.bin 不经过压缩直接写到BIOS中
那么,“$SLP”的端口在哪里呢?
很简单,在 BIOS 文件的 “尾部”里,你可以在BIOS文件中搜索“$SLP”,
以 LE4_SLP2.wph 为例:
(0~100000h 是 BIOS 文件,100000h~100D85h是BIOS的芯片刷新程序)
Offset  0 1 2 3 4 5 6 7 8 9 A B C D E F
00100540 00 00 00 00 00 00 00 00 00 00 00 24 50 52 4F 54 ...........$PROT
00100550 45 43 54 24 53 4C 50 4E 05 00 00 00 03 FA FF B6 ECT$SLPN.....??
00100560 00 00 00 FF FF FF FF 01 00 64 C7 06 4C 05 00 00 ...
$PROTECT   意思是“保护”,就是说“$PROTECT”后面的端口中指定位置,
          在刷 BIOS 时,不会被刷新 !!!!!!!!!!!!!!!!
呵呵,就是说BIOS文件中包含的刷新程序设置了一段位置,这段位置在刷BIOS的时候,
是不会被刷新的,除非你加了那个端口的参数并指定文件,那里才能被刷新 !!!
这就是为什么同型号的笔记本,刷同样的BIOS,结果会不一样了 !!!
预装VISTA的BIOS,那个位置是 SLIC表的marker ,升级BIOS之后,那里位置没有被刷新,
SLIC表还在。
没有预装VISTA的BIOS,那个位置不是SLIC表的marker ,升级BIOS之后,那里位置没有被刷新,
你的BIOS就不会有SLIC表,即使有,marker部分也是错误的。
而使用上面的参数刷 BIOS 就不同了,指定的位置会被写成 SLIC表的marker !
$SLP  指定的端口 就是 $PROTECT

$SLP后面的代码分析:

4E 05 00 00    BIOS尾部的相对位置,就是把 10001Bh 当作 0h(1B是头部长度不计在内),
              “54E” 就是$PROTECT 尾部的位置,本例是 100568h处,
              (568h-1Bh+1=54Eh ,十六进制从0开始)
00 03 FA FF    指定端口的起始位置(BIOS 在内存中的地址),这里是 “FFFA0300”
              在BIOS文件中的位置 A0300h
B6 00 00 00    指定的长度 B6h ,^_^ 正好是 SLIC表marker的长度 !
这下部分人已经明白了吧 !

总结:
联想的升级BIOS中,如果有 “$SLP”,那你就看看 “$SLP”所指定的位置,
例如本例中的 “FFFA0300”【用HWDIRECT1.87.00.8 看 】,
看看你的 BIOS 的 “FFFA0300”处是不是 SLIC表的marker,
如果是,你直接更新BIOS,那么你的 BIOS 还是会激活 VISTA ,

www.nx899.com
如果不是,你就用 SETMARK.BAT 更新BIOS,那么你的 BIOS 就有SLIC了,能激活 VISTA 。

但是要注意最好先看看你的 RSDT表的 OEMID 和 OEMTABLEID,然后选择一个匹配的SLIC文件。
当然,如果RSDT表的 OEMID 和 OEMTABLEID 不是 “LENOVOT” 或 “LENOVOC”开头的话,
就自己选个联想的 SLIC就行了。


F41 Marker 的分析:
【暂时称这种方式为软MARKER】

特点:
适合的BIOS文件的尾部(描述信息)没有“$SLP”,
BIOS 中已经有374字节的SLIC表了,(有可能没有Marker部分)
但是系统中没有SLIC表,或表名不对,或SLIC表不完整。
在纯DOS环境下,运行 MARKER.EXE 加参数,
即可控制 SLIC表的去留,不需要刷 BIOS。
联想 Marker 相关程序下载:

注意:
联想SMI_MARKER 必须在纯DOS下运行 !!!
而且最好不加载类似EMM386之类的内存管理程序。

联想Marker转码模拟程序,只是我做的模拟计算程序,并不能修改BIOS。
4820313a723341a6c2453e27aa7ba9f3.rar 4820313a723341a6c2453e27aa7ba9f3.rar (581.99 KB)


联想能用MARKER的BIOS初步推断:

XR410Marker 可能是刷BIOS时,把 marker 同时刷到BIOS中
F40 Marker 可能是改SMI信息,BIOS运行时读取SMI信息,
符合一定的条件 SLIC表就是正常的,没找到标记就把SLIC改成一半。其实就是刷HOLE。

随便找了几个版本的 BIOS 文件发现一些规律:

首先 SLIC表 = 24h 表头 + 9Ch PUBKey + B6h Marker

用 Phoenix BIOS Editor 打开BIOS文件,在 TEMP 目录

1、
winhex打开 BIOSCOD1.ROM ,搜索 SLIC ,
可以找到 SLIC表的表头部分(长度24h),如下:

    53 4C 49 43 00 00 00 00 01 00 4F 45 4D  SLIC......OEM
49 44 5F 4F 45 4D 54 41 42 4C 45 00 00 00 00 20 ID_OEMTABLE....
4C 54 50 00 00 00 00              LTP....

每个BIOS中的 SLIC 的 OEM ID&Table ID都是 "OEMID_OEMTABLE"

2、
TEMP 目录中有一个 ACPIX.ROM 或 MOD_XX00.ROM 文件 ,
文件大小是 156字节(9Ch),这个文件是 SLIC表的 PUBkey 部分,

每个BIOS的这个文件内容都完全一样,因为Key是通用的,
比较 LENOVOCB-01、LENOVOTC-2P、LENOVOTC-03、LENOVOTP-79的SLIC表,
发现他们的 PUBkey 部分是完全相同的


3、
TEMP 目录中有一个 HOLEX.ROM ,文件大小是 182字节(B6h),
但是这个文件的内容全部是 “FF”,
这个文件是 SLIC表的 Marker 部分,
比较 LENOVOCB-01、LENOVOTC-2P、LENOVOTC-03、LENOVOTP-79的SLIC表,
发现他们的 Marker 部分是不相同的(包括OEMID也是不同的)。

总结:
每个联想带SLIC的BIOS,
SLIC表头基本相同,只有Creator ID有可能不同,
(注:Creator ID不影响SLIC的功能)
SLIC表的 PUBkey 部分是完全相同的,
SLIC表的 Marker 部分是空的(182个HEX“FF”)。


seg000-E9A ; *************** S U B R O U T I N E ***************************************
seg000-E9A
seg000-E9A
seg000-E9A sub_DE9A    proc near      ; CODE XREF: seg000-E70p
seg000:DE9A        push  eax
seg000:DE9C        push  ecx
seg000:DE9E        push  edx

www.nx899.com
seg000:DEA0        push  edi
seg000:DEA2        push  esi
seg000:DEA4        push  ds
seg000:DEA5        push  es
seg000:DEA6        mov  ecx, 0B6h ; '? ;
seg000:DEAC        push  1
seg000:DEAE        push  large 0FFFFFFFFh
seg000:DEB4        push  ecx
seg000:DEB6        push  0
seg000:DEB8        call  far ptr 41A5h:485Dh
seg000:DEBD        add  sp, 0Ch
seg000:DEC0        shl  edx, 10h
seg000:DEC4        mov  dx, ax
seg000:DEC6        or  edx, edx
seg000:DEC9        stc
seg000:DECA        jz  short loc_DF16
seg000:DECA
seg000:DECC        xor  ax, ax
seg000:DECE        mov  ds, ax
seg000:DED0        mov  es, ax
seg000:DED2        mov  esi, 0FFFB0000h
seg000:DED8        mov  edi, edx
seg000:DEDB        mov  ecx, 0B6h ; '? ;
seg000:DEE1        cld
seg000:DEE2        rep movs byte ptr es:[edi], byte ptr [esi]
seg000:DEE5        mov  esi, edx
seg000:DEE8        mov  ecx, 0B6h ; '? ;
seg000:DEEE        call  far ptr 41A5h:2DB8h
seg000:DEF3        jb  short loc_DF08
seg000:DEF3
seg000:DEF5        mov  ecx, 0B6h ; '? ;
seg000:DEFB        mov  edi, ebx
seg000:DEFE        sub  edi, ecx
seg000:DF01        mov  ebx, edi
seg000:DF04        rep movs byte ptr es:[edi], byte ptr [esi]
seg000:DF07        clc
seg000:DF07
seg000:DF08
seg000:DF08 loc_DF08:              ; CODE XREF: sub_DE9A+59j
seg000:DF08        pushf
seg000:DF09        push  edx

www.nx899.com
seg000:DF0B        push  2
seg000:DF0D        call  far ptr 41A5h:485Dh
seg000:DF12        add  sp, 6
seg000:DF15        popf
seg000:DF15
seg000:DF16
seg000:DF16 loc_DF16:              ; CODE XREF: sub_DE9A+30j
seg000:DF16        pop  es
seg000:DF17        pop  ds
seg000:DF18        pop  esi
seg000:DF1A        pop  edi
seg000:DF1C        pop  edx
seg000:DF1E        pop  ecx
seg000:DF20        pop  eax
seg000:DF22        retn
seg000:DF22
seg000:DF22 sub_DE9A    endp
seg000:DF22
seg000:DF23
seg000:DF23 ; *************** S U B R O U T I N E ***************************************
seg000:DF23
seg000:DF23
seg000:DF23 sub_DF23    proc near      ; CODE XREF: seg000:DE75p
seg000:DF23        push  ax
seg000:DF24        push  edx
seg000:DF26        mov  ax, 3
seg000:DF29        mov  dx, 4Ah ; 'J' ;
seg000:DF2C        shl  dx, 8
seg000:DF2F        call  far ptr 0F000h:0E38Bh
seg000:DF34        jb  short loc_DF5D
seg000:DF34
seg000:DF36        shl  edx, 10h
seg000:DF3A        mov  dx, ax
seg000:DF3C        cmp  edx, 9Ch ; '? ;
seg000:DF43        stc
seg000:DF44        jnz  short loc_DF5D
seg000:DF44
seg000:DF46        sub  ebx, edx
seg000:DF49        mov  ax, 4Ah ; 'J' ;
seg000:DF4C        shl  ax, 8
seg000:DF4F        push  ebx
seg000:DF51        push  ax
seg000:DF52        push  5
seg000:DF54        call  far ptr 0F000h-A75h
seg000:DF59        add  sp, 8
seg000:DF5C        clc

www.nx899.com
seg000:DF5C
seg000:DF5D
seg000:DF5D loc_DF5D:              ; CODE XREF: sub_DF23+11j
seg000:DF5D                    ; sub_DF23+21j
seg000:DF5D        pop  edx
seg000:DF5F        pop  ax
seg000:DF60        retn
seg000:DF60
seg000:DF60 sub_DF23    endp



,BIOS Marker(LENOVO)研究专题
Copyright © 能学网 Corporation, All Rights Reserved

1 2 3 4 a b c 5 6 7 8