设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 3216|回复: 0
收起左侧

BIOS Marker(LENOVO)研究专题

[复制链接]
发表于 2009-11-13 09:41:21 | 显示全部楼层 |阅读模式
本文由ZHAOLIANG大侠编写! (转自BIOS之家)
特点:
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 ,
如果不是,你就用 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
seg000E9A        push  eax
seg000E9C        push  ecx
seg000E9E        push  edx
seg000EA0        push  edi
seg000EA2        push  esi
seg000EA4        push  ds
seg000EA5        push  es
seg000EA6        mov  ecx, 0B6h ; '? ;
seg000EAC        push  1
seg000EAE        push  large 0FFFFFFFFh
seg000EB4        push  ecx
seg000EB6        push  0
seg000EB8        call  far ptr 41A5h:485Dh
seg000EBD        add  sp, 0Ch
seg000EC0        shl  edx, 10h
seg000EC4        mov  dx, ax
seg000EC6        or  edx, edx
seg000EC9        stc
seg000ECA        jz  short loc_DF16
seg000ECA
seg000ECC        xor  ax, ax
seg000ECE        mov  ds, ax
seg000ED0        mov  es, ax
seg000ED2        mov  esi, 0FFFB0000h
seg000ED8        mov  edi, edx
seg000EDB        mov  ecx, 0B6h ; '? ;
seg000EE1        cld
seg000EE2        rep movs byte ptr es:[edi], byte ptr [esi]
seg000EE5        mov  esi, edx
seg000EE8        mov  ecx, 0B6h ; '? ;
seg000EEE        call  far ptr 41A5h:2DB8h
seg000EF3        jb  short loc_DF08
seg000EF3
seg000EF5        mov  ecx, 0B6h ; '? ;
seg000EFB        mov  edi, ebx
seg000EFE        sub  edi, ecx
seg000F01        mov  ebx, edi
seg000F04        rep movs byte ptr es:[edi], byte ptr [esi]
seg000F07        clc
seg000F07
seg000F08
seg000F08 loc_DF08:              ; CODE XREF: sub_DE9A+59j
seg000F08        pushf
seg000F09        push  edx
seg000F0B        push  2
seg000F0D        call  far ptr 41A5h:485Dh
seg000F12        add  sp, 6
seg000F15        popf
seg000F15
seg000F16
seg000F16 loc_DF16:              ; CODE XREF: sub_DE9A+30j
seg000F16        pop  es
seg000F17        pop  ds
seg000F18        pop  esi
seg000F1A        pop  edi
seg000F1C        pop  edx
seg000F1E        pop  ecx
seg000F20        pop  eax
seg000F22        retn
seg000F22
seg000F22 sub_DE9A    endp
seg000F22
seg000F23
seg000F23 ; *************** S U B R O U T I N E ***************************************
seg000F23
seg000F23
seg000F23 sub_DF23    proc near      ; CODE XREF: seg000E75p
seg000F23        push  ax
seg000F24        push  edx
seg000F26        mov  ax, 3
seg000F29        mov  dx, 4Ah ; 'J' ;
seg000F2C        shl  dx, 8
seg000F2F        call  far ptr 0F000h:0E38Bh
seg000F34        jb  short loc_DF5D
seg000F34
seg000F36        shl  edx, 10h
seg000F3A        mov  dx, ax
seg000F3C        cmp  edx, 9Ch ; '? ;
seg000F43        stc
seg000F44        jnz  short loc_DF5D
seg000F44
seg000F46        sub  ebx, edx
seg000F49        mov  ax, 4Ah ; 'J' ;
seg000F4C        shl  ax, 8
seg000F4F        push  ebx
seg000F51        push  ax
seg000F52        push  5
seg000F54        call  far ptr 0F000h-A75h
seg000F59        add  sp, 8
seg000F5C        clc
seg000F5C
seg000F5D
seg000F5D loc_DF5D:              ; CODE XREF: sub_DF23+11j
seg000F5D                    ; sub_DF23+21j
seg000F5D        pop  edx
seg000F5F        pop  ax
seg000F60        retn
seg000F60
seg000F60 sub_DF23    endp
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-1-23 04:59 , Processed in 0.053216 second(s), 9 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表