From a4d38808aa0e4a861b9d42faa5ed72c1ac65d781 Mon Sep 17 00:00:00 2001 From: Plato Mavropoulos Date: Sat, 5 May 2018 20:34:56 +0300 Subject: [PATCH] MEA v1.51.2 r121 v1.51.2 Improved CSME 12 Stepping detection Fixed crashes under rare circumstances r121 CSME 12.0.0.1069_COR_H_B_PRD_FWU CSSPS 04.00.04.143_HA_SKU3_PRD_REC CSSPS 04.00.04.143_HA_SKU3_PRD_OPR ME 9.5.63.3002_5MB_PRD_RGN --- Changelog DB.txt | 7 +++++++ Changelog MEA.txt | 5 +++++ MEA.dat | 15 ++++++++++++--- MEA.py | 24 +++++++++++++----------- README.md | 2 +- 5 files changed, 38 insertions(+), 15 deletions(-) diff --git a/Changelog DB.txt b/Changelog DB.txt index f23be61..15ed418 100644 --- a/Changelog DB.txt +++ b/Changelog DB.txt @@ -1,3 +1,10 @@ +r121 + +CSME 12.0.0.1069_COR_H_B_PRD_FWU +CSSPS 04.00.04.143_HA_SKU3_PRD_REC +CSSPS 04.00.04.143_HA_SKU3_PRD_OPR +ME 9.5.63.3002_5MB_PRD_RGN + r120 CSME 11.7.0.3307_COR_H_D0_PRD_RGN diff --git a/Changelog MEA.txt b/Changelog MEA.txt index 62615d7..b28eaf9 100644 --- a/Changelog MEA.txt +++ b/Changelog MEA.txt @@ -1,3 +1,8 @@ +v1.51.2 r121 + +Improved CSME 12 Stepping detection +Fixed crashes under rare circumstances + v1.51.0 r120 Added CSE PMC unpacking & size validation diff --git a/MEA.dat b/MEA.dat index 6a60846..323b73a 100644 --- a/MEA.dat +++ b/MEA.dat @@ -1,5 +1,5 @@ *** ME Analyzer Engine Firmware Repository Database *** -*** Revision r120 (2018-04-18 , 22:37) *** +*** Revision r121 (2018-05-04 , 14:12) *** *** Converged Security Management Engine (CSME) *** @@ -7,13 +7,16 @@ *** 11 LP: Version_SKU_Stepping_Release_PDM_Type_FTPR-RSASIG-SHA256 *** 12.0.0.1069_CON_H_B_PRD_FWU_93CCF1C009833026583B72B433B1E5990FB5FC043C7FA54C1A13BF5F67440742 +12.0.0.1069_COR_H_B_PRD_FWU_4A7C6FE2211293192517DF9D9029800423064343783596DB7D8D33199A026C03 12.0.0.1062_CON_H_B_PRD_RGN_A0D154336EC76A703A4D3AD943AD654A4F98A2DFE2EFB687F23969A4B7AEECD8 12.0.0.1062_CON_LP_B_PRD_RGN_3F9E7A7EC0073DFB23E605410607BDA313687FC1E3EF43CB19F923295556DD14 12.0.0.1059_CON_H_B_PRD_EXTR_28E5178B8C42FC077A5382F8827549935ABBBD51447EADA52262423E01C27FF9 -12.0.0.1046_CON_H_B_PRD_EXTR_5DBD89037027C5E56A0FCEEDFFD08476FFDD82B24E246145D55D7CD440145F35 +12.0.0.1046_CON_H_A_PRD_EXTR_5DBD89037027C5E56A0FCEEDFFD08476FFDD82B24E246145D55D7CD440145F35 +12.0.0.1046_COR_H_A_PRD_RGN_BE2B7068691169EB15D636397C8266CF927B3454E9CFC19B8A0DD7FF50F27A77 12.0.0.1062_CON_H_B_PRE_RGN_E3A35530A780BF0D987546135049EC414AC416E5175F02AFE2CA981047530886 12.0.0.1062_CON_LP_B_PRE_RGN_40BE86EEB55473D02DBCFAF0076F9C929DE941E45779C4A60FB597B0D542B22D +12.0.0.1046_COR_H_A_PRE_RGN_81ED862EA5DD84216EF9DD15D3DDEBFD79048B19015CA8AB6D3A7F2D4C0BEB2E 12.0.0.1033_COR_H_A_PRE_RGN_F15512E065CA006801262BE0A1044DFF1EEB164FF10CC72A4F1A0E9713CCB0E4 12.0.0.1021_COR_H_A_PRE_RGN_B215BAD7C6A3C070DECC829735BAB8213DB79DA21485FD6D88FD9048FA73CB97 12.0.0.1020_CON_H_A_PRE_EXTR_67A76CBB3A43DE71ACAEDECE03CD3DE2E181FF2735DE35651026046504E82A00 @@ -524,6 +527,7 @@ 10.0.25.1048_1.5MB_PRE_RGN_685B98098A50F53A989ADEAFD1D3190F545EC70E6C24CE32F2EECB937EE639DD 10.0.25.1048_1.5MB_BYP_RGN_D2208DCEF784B64807DE606697262557DB6FCD0CFAD82011C3648455A87AB761 +9.5.63.3002_5MB_PRD_RGN_0963BD37BE734E23D92A774B777FA1FBADCEDE8D277AF2F8ECFD70B7A1F9C525 9.5.62.3002_5MB_PRD_RGN_4234E34764F722F2A3AF3B37930591BA35246386AB53D0FB664589630F00B9D7 9.5.61.3012_5MB_PRD_RGN_61C6AB020C06AD532442E382558A99C4B19305804080350BC5B7719297B2FB3C 9.5.60.1952_5MB_PRD_RGN_2C198B2727E0EDB3EC3EC027EE3ECD915BE60E5ACE8CB5DDC266D877DC12CCDB @@ -1400,6 +1404,8 @@ 04.00.04.294_PU_SKU3_PRD_OPR_D90582F06EBCB8D379997C0C7D876A6597E3CAC2F60128A49E5BCC3A784341A3 04.00.04.288_PU_SKU3_PRD_REC_E5A9B3F16A7EF50227F72EFC915BE20DD6693DE2370F828DC4D9CE1515C48953 04.00.04.288_PU_SKU3_PRD_OPR_09E0E40DC4B57299348ED58D6342921834DEB0E466AC1717E6FC88E22502E8D4 +04.00.04.143_HA_SKU3_PRD_REC_B091DA5B3ADAC527CB10623E595F10C847B96E2C5401FD5C022AA29E2BDDF0D1 +04.00.04.143_HA_SKU3_PRD_OPR_B6BCB3CC4A3F3F5D7F00ED68E32CB45CB84C2CD3F77121A5470A93E38898BBA2 04.00.04.139_HA_SKU3_PRD_REC_D820EE9386AA1BAB2AA5DD3B7466652A3090D357AD13021B42BCBCE99BBDB919 04.00.04.139_HA_SKU3_PRD_OPR_A2239435B17390B5FA0B299F96E4B43CD439ACB81072749613C0045F61A18182 04.00.03.235_PU_SKU3_PRD_REC_7D8BCC59C9CEB1B3803C476EC98BC42F639671C83650B6634A6C2B966103F1C7 @@ -1464,6 +1470,7 @@ 04.00.04.313_PU_SKU3_PRD_EXTR_A1D600AF22E25A48F5B6C4CDBCB56B59F473BA8A698B910C606FABEC72113480 04.00.04.294_PU_SKU3_PRD_EXTR_D90582F06EBCB8D379997C0C7D876A6597E3CAC2F60128A49E5BCC3A784341A3 04.00.04.288_PU_SKU3_PRD_EXTR_09E0E40DC4B57299348ED58D6342921834DEB0E466AC1717E6FC88E22502E8D4 +04.00.04.143_HA_SKU3_PRD_EXTR_B6BCB3CC4A3F3F5D7F00ED68E32CB45CB84C2CD3F77121A5470A93E38898BBA2 04.00.04.139_HA_SKU3_PRD_EXTR_A2239435B17390B5FA0B299F96E4B43CD439ACB81072749613C0045F61A18182 04.00.03.235_PU_SKU3_PRD_EXTR_5A1760B268D48CBEB53FFD3D220057907A727800FD19EDDE644126BAA438CB95 04.00.03.219_PU_SKU3_PRD_EXTR_A1012BD3B69C4DE121FB6BE6DF1EEA4CE60499AE36967042B4870A3708A4D4E8 @@ -1767,9 +1774,11 @@ 300.2.11.1008_H_B1_PRD_IUP_PMC_BF1BDC6FCA580635949FA2141B2A30AA4EFA89BE808C816940DA122CB84A05E5 300.2.11.1003_H_B1_PRD_IUP_PMC_F7544DDA21705B11CF9185CA3C73904BD6CA085860CB5EF3F5E3297B36F727A4 300.2.1.1012_H_A1_PRD_IUP_PMC_41C3578A436632CB8D359FB673EBE767DE8E0EA1207801B372F6F0CD03D8DE42 +300.2.1.1009_H_A1_PRD_IUP_PMC_C857C63C5F62D05B73931279A634152E1909FA1038D2A41E8F572C8E721FCA38 300.1.11.1013_LP_B1_PRD_IUP_PMC_BABE98303BD24EF1CACCAD28CEAD52C5D0401E77BEB043B1B7E3C5557A252C9F 300.2.11.1008_H_B1_PRE_IUP_PMC_2D24B10A5181A1356B1A6CD552759BEE826614250647596A1DE6303AFE0DA3EC +300.2.11.1003_H_B1_PRE_IUP_PMC_7C683402F47575869426A43AA5498EF2E9267592BB0628A2CAF57B2688923781 300.2.1.1012_H_A1_PRE_IUP_PMC_5D2614AAA1373D6A57EF9C1AB29619283CB890B7D2D5446B5A13A92279D82E30 300.2.1.1009_H_A1_PRE_IUP_PMC_378771C097967D7ED25F17319B80AFFFEDF486FD4D03368A1DCBC17E1A58F48D 300.1.11.1013_LP_B1_PRE_IUP_PMC_5CD7A891D4F5D8365C12A5DDEB7965E4CC1BBBFAE69864E10110869B066AF1D6 @@ -1838,7 +1847,7 @@ Latest_ME_100_1.5MB__10.0.55.3000 Latest_ME_100_5MB__10.0.57.3000 Latest_ME_100_SLM__10.0.35.1012 Latest_ME_95_1.5MB__9.5.60.1952 -Latest_ME_95_5MB__9.5.62.3002 +Latest_ME_95_5MB__9.5.63.3002 Latest_ME_95_SLM__9.5.4.1856 Latest_ME_91_1.5MB__9.1.37.1002 Latest_ME_91_5MB__9.1.43.3004 diff --git a/MEA.py b/MEA.py index f63f5ae..4c3d0b0 100644 --- a/MEA.py +++ b/MEA.py @@ -6,7 +6,7 @@ Copyright (C) 2014-2018 Plato Mavropoulos """ -title = 'ME Analyzer v1.51.0' +title = 'ME Analyzer v1.51.2' import os import re @@ -1140,7 +1140,7 @@ def ext_print(self) : pt.title = col_y + 'Extension 3, Module Information' + col_e pt.add_row(['Name', self.Name.decode('utf-8')]) - pt.add_row(['Type', ['Process','Shared Library','Data','OEM'][self.Type]]) + pt.add_row(['Type', ['Process','Shared Library','Data','OEM/IUP'][self.Type]]) pt.add_row(['Compression', ['Uncompressed','Huffman','LZMA'][self.Compression]]) pt.add_row(['Reserved', '0x%X' % self.Reserved]) pt.add_row(['Metadata Size', '0x%X' % self.MetadataSize]) @@ -1863,7 +1863,7 @@ def ext_print(self) : pt.title = col_y + 'Extension 15, Entry' + col_e pt.add_row(['Name', self.Name.decode('utf-8')]) - pt.add_row(['Type', ['Process','Shared Library','Data','OEM'][self.Type]]) + pt.add_row(['Type', ['Process','Shared Library','Data','OEM/IUP'][self.Type]]) pt.add_row(['Hash Algorithm', ['None','SHA-1','SHA-256'][self.HashAlgorithm]]) pt.add_row(['Hash Size', '0x%X' % self.HashSize]) pt.add_row(['Metadata Size', '0x%X' % self.MetadataSize]) @@ -5705,6 +5705,7 @@ def mass_scan(f_path) : # Parse IFWI/BPDT Starting Offsets for ifwi_bpdt in range(len(bpdt_matches)): + ifwi_exist = True # Set IFWI/BPDT detection boolean (start_fw_start_match, end_fw_start_match) = bpdt_matches[ifwi_bpdt].span() # Store BPDT range via bpdt_matches index @@ -5768,7 +5769,7 @@ def mass_scan(f_path) : x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,pmc_mn2_ver = ext_anl('$CPD', p_offset_spi, file_end, ['NaN', -1, -1, -1, -1]) - if p_type == 5 and p_empty == 'No' and p_offset_spi < file_end : # Secondary BPDT (S-BPDT) + if p_type == 5 and p_empty == 'No' and p_offset_spi < file_end and reading[p_offset_spi:p_offset_spi + 0x2] == b'\xAA\x55' : # Secondary BPDT (S-BPDT) init_s_bpdt_ver = int.from_bytes(reading[start_fw_start_match + 0x6:start_fw_start_match + 0x8], 'little') # BPDT Version if init_s_bpdt_ver == 2 : s_bpdt_hdr = get_struct(reading, p_offset_spi, BPDT_Header_2) else : s_bpdt_hdr = get_struct(reading, p_offset_spi, BPDT_Header) @@ -5801,7 +5802,8 @@ def mass_scan(f_path) : if s_p_type in bpdt_dict : s_p_name = bpdt_dict[s_p_type] else : s_p_name = 'Unknown' - cse_in_id,x1,x2 = cse_part_inid(reading, s_p_offset_spi, ext_dict) + if s_p_empty == 'No' and s_p_offset_spi < file_end : + cse_in_id,x1,x2 = cse_part_inid(reading, s_p_offset_spi, ext_dict) # Store BPDT Partition info for -dfpt if param.fpt_disp : @@ -6745,8 +6747,7 @@ def mass_scan(f_path) : sku_db, upd_found = sku_db_upd_cse(sku_init_db, sku_result, sku_stp, upd_found, False) # Store DB SKU and check Latest version if minor == 0 : platform = 'SPT' # Skylake, Sunrise Point - elif minor in [5,6] : platform = 'SPT/KBP' # Skylake/Kabylake, Sunrise/Union Point - elif minor in [7,8] : platform = 'SPT/KBP/CNP' # Skylake/Kabylake(R)/Coffeelake, Sunrise/Union/Cannon Point + elif minor in [5,6,7,8] : platform = 'SPT/KBP' # Skylake/Kabylake(R)/Coffeelake, Sunrise/Union Point elif minor in [10,11] : platform = 'BSF' # Skylake-X/Kabylake-X, Basin Falls elif minor in [20,21] : platform = 'LBG' # Skylake-SP, Lewisburg @@ -6814,7 +6815,8 @@ def mass_scan(f_path) : if sku_stp == 'NaN' : # Adjust Production PCH/SoC Stepping from known values - if release == 'Production' : sku_stp = 'B' + if release == 'Production' and (minor > 0 or (minor == 0 and hotfix > 0 or (hotfix == 0 and build >= 1062))) : + sku_stp = 'B' #else : sku_stp = 'A' # <= 12.x.x.xxxx # Detected stitched PMC firmware @@ -7167,10 +7169,10 @@ def mass_scan(f_path) : if pmc_mn2_signed == 'Production' : msg_pt.add_row(['PMC Firmware Latest', [col_g + 'Yes' + col_e, col_r + 'No' + col_e][pmcp_upd_found]]) if ((variant == 'CSME' and major >= 12) or (variant == 'CSTXE' and major >= 3)) and not wcod_found : - msg_pt.add_row(['OEM/ODM Configuration', ['No','Yes'][int(oem_config)]]) - msg_pt.add_row(['OEM/ODM RSA Signature', ['No','Yes'][int(oem_signed)]]) + msg_pt.add_row(['OEM Configuration', ['No','Yes'][int(oem_config)]]) + msg_pt.add_row(['OEM RSA Signature', ['No','Yes'][int(oem_signed)]]) - if (rgn_exist or ifwi_exist) and variant in ('CSME','CSTXE','CSSPS','TXE') : msg_pt.add_row(['OEM/ODM Unlock Token', ['No','Yes'][int(utok_found)]]) + if (rgn_exist or ifwi_exist) and variant in ('CSME','CSTXE','CSSPS','TXE') : msg_pt.add_row(['OEM Unlock Token', ['No','Yes'][int(utok_found)]]) if variant == 'CSME' and major >= 12 and not wcod_found : msg_pt.add_row(['FWUpdate Support', ['No','Yes'][int(pmcp_fwu_found)]]) diff --git a/README.md b/README.md index e224028..58e916c 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ ME Analyzer is developed using Python 3.6 and can work under Windows, Linux and #### **C1. Compatibility** -ME Analyzer should work at all Windows, Linux or macOS operating systems which have Python 3.6 support. Any latter v3.x releases might work depending on whether MEA's prerequisites are also compatible. Windows users who plan to use the already built/frozen/compiled binaries must make sure that they have the latest Windows Updates installed which include all required "Universal C Runtime (CRT)" libraries. Windows users who plan to use console redirection must first "set PYTHONIOENCODING=UTF-8". +ME Analyzer should work at all Windows, Linux or macOS operating systems which have Python 3.6 support. Any latter v3.x releases might work depending on whether MEA's prerequisites are also compatible. Windows users who plan to use the already built/frozen/compiled binaries must make sure that they have the latest Windows Updates installed which include all required "Universal C Runtime (CRT)" libraries. #### **C2. Code Prerequisites**