最近帮网友搞一台联想家悦机子的MARK,老提示写保护,用过了许多的方法都不行,百般无奈只能对1B模块入手进行修改。

据网友说:机子本来是预装VISTA的,有SLIC 2.0,后来想升级到2.1,按照论坛里的方法都试过了好几遍,不但没成功反而把原来的2.0搞没了,刷回原备份的BIOS一样没SLIC 2.0,只是一张LENOVOTC-03的空表,真是郁闷。

于是我就开始探索着去分析各种失败的原因,历经波折MARK还是失败。于是不得不对1B模块进行改造,因为1B模块里就已经有SLIC的信息了,只是这个SLIC信息不完整,只是个空壳,还需要MARK区域的数据来填充,既然MARK区域是写不进去了,那就移除掉从MARK区域来填充SLIC的操作。
把ACPITBL从1B模块分离出来,分析
3edd751ex7f4db9e2e6f4.jpg
3edd751ex7f4dbb17e940.jpg
可以看出SLIC表起始地址处于0440,就搜索HEX:4004,查找对SLIC的一些操作,发现了两处对SLIC的操作,如下

;清空SLIC

0001C3ED: EB0C                        jmps       00001C3FB  --- (1)
0001C3EF: 687758                      push       05877 ;'Xw'
0001C3F2: 07                          pop        es
0001C3F3: BF4004                      mov        di,00440 ;'@'
0001C3F6: 0E                          push       cs
0001C3F7: E80600                      call       00001C400  --- (2)
0001C3FA: F9                          stc
0001C3FB: 1F                          pop        ds
0001C3FC: 07                          pop        es
0001C3FD: 6661                        popad
0001C3FF: CB                          retf
0001C400: 6651                        push       ecx
0001C402: 50                          push       ax
0001C403: 6657                        push       edi
0001C405: B000                        mov        al,0
0001C407: 66B976010000                mov        ecx,000000176 ;'  v'
0001C40D: AA                          stosb
0001C40E: E2FD                        loop       00001C40D  --- (3)
0001C410: 665F                        pop        edi
0001C412: 58                          pop        ax
0001C413: 6659                        pop        ecx
0001C415: CB                          retf

 

;填充SLIC

0001C458: 665E                        pop        esi
0001C45A: 1F                          pop        ds
0001C45B: 06                          push       es
0001C45C: 1F                          pop        ds
0001C45D: 33F6                        xor        si,si
0001C45F: 687758                      push       05877 ;'Xw'
0001C462: 07                          pop        es
0001C463: BF4004                      mov        di,00440 ;'@'
0001C466: 83C724                      add        di,00024 ;'$'
0001C469: 66B952010000                mov        ecx,000000152 ;'  R'
0001C46F: FC                          cld
0001C470: F3A4                        repe       movsb
0001C472: 1F                          pop        ds
0001C473: 07                          pop        es
0001C474: 6661                        popad
0001C476: CB                          retf
 

问题就是在这两处,即便你把1B模块的SLIC补充完整了,但是一个清空SLIC和一个填充SLIC操作,就把你补充完整的SLIC给抹杀了,移除这两处对SLIC的操作,不就可以使填充的SLIC信息保全了吗?

具体修改

0001C40D: 90                          nop
0001C40E: 90                          nop
0001C40F: 90                          nop

0001C46F: 90                          nop
0001C470: 90                          nop
0001C471: 90                          nop

再把SLIC信息填充完整,用MMTOOL把1B压缩回BIOS就OK了,从此摆脱MARK区域的数据限制。

标签: none

添加新评论