ME精简教程
说在前面的话:
部分主板(比如华擎b150 gaming k4/hyper)点亮QL3X需要使用cor版本的me,而官方BIOS自带的me为con版本的me,留给me的空间为2m左右;cor版本的me大小为7m左右,经过me cleaner处理后大小为2.5m左右仍无法正常进行me的替换,所以需要对这2.5m的me进行进一步精简才能正常替换。
本文所涉及的内容仅有自己少量测试,仅供参考,自行测试有效性。
废话就说这么多了,下面开始正题。
一、使用me cleaner精简me
所需工具:me cleaner(me cleaner运行需要Python环境)
下载链接(解压后使用):https://lanzoux.com/iwhn3ffxbla
使用方法:将7m左右cor版本的me重命名为me.rgn放入mecleaner-1.2文件夹,运行start.bat得到me_new.bin。
我们以11.8.65.3590_COR_H_DA_PRD_RGN.bin为例,可见me_new.bin仅保留了FTPR与MFS分区,其他分区均被移除,如下图
me_new.bin大小仍然显示为7M左右,我们使用Flash Image Tool打开me_new.bin后关闭Flash Image Tool,在Flash Image Tool的根目录下会生成me_new文件夹,里面是me的解包文件,Decomp文件夹里面的ME Region.bin便是经过me cleaner处理过后真实大小的me文件,一般为2.5m左右大小。
二、使用ME Analyzer分析ME Region.bin
所需工具:ME Analyzer
下载链接(解压后使用):https://lanzoux.com/ihDfJge971c
我们将ME Region.bin直接拖到MEA.exe上面,在弹出界面中的"Option(s):"后输入-dfpt,然后回车得到输出结果,如下图
输出结果下方是me的基本信息,自己可以自行了解学习下;上方的Flash Partition Table(me的分区表)中每个分区start列、size列、end列的内容是我们重点要关注的数据。
Flash Partition Table中start列、size列、end列分别代表分区的起始位置、大小和结束位置,数据均为十六进制数据,可以转换成十进制方便后续操作,方法如下
注:这里我们使用Win10 2004版本自带的计算器来进行进制转换,也可以自行寻找其他工具进行转换。
打开计算器后点击左上角的三条横线,选择程序员,如下图
在计算器-程序员界面,hex代表十六进制,dec代表十进制,oct代表八进制,bin代表二进制;
我们选择需要转换的进制,比如选中hex,输入十六进制的数据或者进行运算,便会计算出不同进制的结果。我们以十六进制的加法"E+1"为例如下图
"E+1"的结果十六进制为F,十进制为12,八进制为17,二进制为1111。
下面我们回归正题,我们把FTPR与MFS的分区数据转换为十进制,如下
start | size | end | |
FTPR | 4096 | 1241088 | 1245184 |
MFS | 1245184 | 1302528 | 2547712 |
接下来我们需要记录FTPR与MFS分区起始位置的关键字以供后续使用
所需工具:wxMEdit
下载链接:https://lanzoux.com/inCcdfipnta
使用wxMEdit打开ME Region.bin,点击上方的查找-转到文件位置...,输入1245184后确定定位至MFS分区的起始位置,记录下关键字
87 78 55 AA 01 00 00 00 01 00 00 00 01 00 00
复制十六进制数据方法:选择需要复制的数据右键选择高级-复制为十六进制字符串(含空格),如下图
三、精简FTPR分区
在FTPR分区后半部分大多以FF填充,我们可以删除这些无用数据来精简FTPR分区。删除FF的数量的多少以实际情况为准,调整至你需要的me大小即可。这里以华擎b150 gaming k4/hyper为例,所需me的大小为2093056字节,用uefitool打开官方BIOS即可查看所需me的大小,如下图
FF数据删除方法:
点击wxMEdit上面的查找-查找...,查找页面勾上查找十六进制字符串,输入上方已经记录下来关键字定位到MFS分区的起始位置,然后删除MFS分区起始位置前面连续的FF即可,如下图
FF数据删除完成后,wxMEdit的字节统计应该与所需me的大小保持一致,如下图
四、修复Flash Partition Table
因为我们删除了FTPR分区后半部分的FF数据,导致的FTPR分区大小的改变以及MFS分区起始位置的改变,如果我们直接使用Flash Image Tool替换me会报错,如下图
我们需要修复Flash Partition Table来使每个分区得到正确的识别。
删除FF数据后已知正确的分区表数据
FTPR起始位置:4096
MFS大小:1302528
MFS结束位置:2093056
由上述数据可以计算出:
MFS起始位置=MFS结束位置-MFS大小=2093056-1302528=790528
FPTR结束位置=MFS起始位置=790528
FPTR大小=FPTR结束位置-FTPR起始位置=790528-4096=786432
修复Flash Partition Table需要每个分区的起始位置和大小,我们将其转化为十六进制数据:
start | size | |
FTPR |
1000 | C0000 |
MFS | C1000 | 13E000 |
Flash Partition Table在me文件的前几行,如下图
分区数据填列方式为两个数字为一组从右往左填列,所以应这样填写
start | size | |
FTPR | 00 10 00 | 00 00 0C |
MFS | 00 10 0C | 00 E0 13 |
修改后如下图
最后保存文件即可,此时me已经可以正常替换。
注1:视删除FF数据的多少,有时候修改完成后的me在Flash Image Tool中会有报错,如下图
目前少量测试可知此报错不影响使用。
注2:本文中分区数据将十六进制转换为十进制,然后又转换回十六进制的操作主要为便于理解,实际操作中可直接使用十六进制数据提升效率。
本文主要的参考资料和软件来源:
http://www.smxdiy.com/thread-1297-1-1.html
https://github.com/corna/me_cleaner
https://github.com/platomav/MEAnalyzer
http://blog.ptsecurity.com/2017/08/disabling-intel-me.html
感谢各位大佬的无私奉献!