К линуксу это имеет немного косвенное отношение, но здешним линуксоидам будет интересно. Авось информация начнёт копиться в одном месте. Немного самонадеянно с моей стороны, но прошу обратить внимание, что это не talks|general, и тред не про вопросы нужности.
Ну, из спортивного интереса и зачатков паранойи я попытался.
Сначала проверим, активен ли Boot Guard. Сделать это можно из под линукса, метод с патченной intelmetool из coreboot. У меня не сработало (error access чего-то там, запускал ессно от рута), но вы по ссылке сходите, там информация о косвенных признаках присутствия Boot Guard, который, суде по ссылке на сатью на хабр выше, может нам испортить всю малину.
В (CS)ME System Tools с форума все утилиты есть для доса и .efi, а FWUpdate и для линукса. Но FIT есть только под винду. Можно ли без неё - хз. Но все туториалы, которые я находил, все опирались на неё. Поэтому далее манипуляции проводил из под винды.
Запустил скачанную с форума под своё железо MEinfo. Она бодро рапортует. Что-то. Если что-то такое, то конкретно вам повезло.
В таком случае, если вы с помощью утилиты flash programming tool (FPT) дампните себе всё (fpt.exe -d image.bin), то всё скорее всего пройдёт без ошибок. Полученный образ будет содержать таблицу-дескриптор, дамп биоса, дамп МЕ, ещё чего-нибудь. Посмотреть на эту таблицу, кстати, можно натравив coreboot'овский ifdtool либо на образ, либо на результат выполнения команды fpt.exe -D desc.bin -DESC (на случай, если МЕ не дампается).
Этот обрах можно редактировать в flash imaging tool (FIT). Всё настраиваете (убрать бут гард, отключить МЕ, поставить HAP-бит, например). Ещё можно взять ME регион, который появляется в папке disassembly в папке с экзешником FIT, и натравить на него me_cleaner (инструкцию как всё правильно сделать находил в интернете). По отчётам, с HAP битом эта процедура не ломает загрузку.
Собственно собранный FIT'ом образ, вроде бы и нужно шить, но я боюсь, что я пропускаю тут какие-то важные нюансы, я так далеко не заходил. Так как мы всё-таки не софт ставим, а аж шьём биос, то я бы разорился на программатор с клипсой и таки снял бы дампы с чипов. Так надёжнее, ибо потенциально можно раскирпичить девайс, плюс много попыток. Правда возможно, там тоже есть свои подводные камни, нужно гуглить.
Если же на этапе проверки бут гарда не повезло, и картинка какая-то такая, то не повезло, и фиг что с ME сделаешь. Наверно. У меня картинка на ноутбуке была как раз такая.
Я не очень шарю во всём этом, могу где-то тупить. Хочу попробовать поменять что-нибудь с помощью setup_var, но никак не могу понять, какие адреса переменных использовать. IFRextract'овский файл содержит VarStoreInfo и VarStore, и я хз, какой адрес использовать. Не знаю, насколько это осмысленно, поэтому прошу не пинать.
Например, тут:
One Of: Me FW Image Re-Flash, VarStoreInfo (VarOffset/VarName): 0x2, VarStore: 0x4, QuestionId: 0x86E
Ясное дело, что нельзя просто написать setup_var 0x2|0x4 0x1, потому что на 0x2 и 0x4 - это явно не то, ведь поискав, находим и другие настройки с VarStore: 0x4 и VarStoreInfo: 0x2
Для примера дамп «скрытого меню» (я хз как в него попасть, был бы рад советам): Section_PE32_image_E6A7A1CE_5881_4B49_80BE_69C91811685C_Setup_body IFR.txt
UEFI Protocol Detected
--------------------------------------------------------------------------------
String Packages
--------------------------------------------------------------------------------
Offset: Language:
--------------------------------------------------------------------------------
0x354 en-US (0x0)
Form Sets
--------------------------------------------------------------------------------
Offset: Title:
--------------------------------------------------------------------------------
0x44E74 Platform Information Menu (0x12CB from string package 0x0)
0x45504 Intel Advanced Menu (0x12DD from string package 0x0)
Интересный кусок
0x5DB4A Ref: Firmware Update Configuration, VarStoreInfo (VarOffset/VarName): 0xFFFF, VarStore: 0x0, QuestionId: 0x864, FormId: 0x1043 {0F 0F 89 03 8A 03 64 08 00 00 FF FF 00 43 10}
0x5DB59 Gray Out If {19 82}
0x5DB5B QuestionId: 0xA17 equals value 0x1 {12 86 17 0A 01 00}
0x5DB61 QuestionId: 0xA15 equals value 0x1 {12 06 15 0A 01 00}
0x5DB67 Or {16 02}
0x5DB69 End {29 02}
0x5DB6B One Of: ME State, VarStoreInfo (VarOffset/VarName): 0x2, VarStore: 0x1108, QuestionId: 0x865, Size: 1, Min: 0x0, Max 0x1, Step: 0x0 {05 91 91 03 92 03 65 08 08 11 02 00 10 10 00 01 00}
0x5DB7C One Of Option: Disabled, Value (8 bit): 0x0 {09 07 04 00 00 00 00}
0x5DB83 One Of Option: Enabled, Value (8 bit): 0x1 (default) {09 07 03 00 30 00 01}
0x5DB8A End One Of {29 02}
0x5DB8C End If {29 02}
Про возможность писать ME:
0x5DD5A Form: Firmware Update Configuration, FormId: 0x1043 {01 86 43 10 89 03}
0x5DD60 One Of: Me FW Image Re-Flash, VarStoreInfo (VarOffset/VarName): 0x2, VarStore: 0x4, QuestionId: 0x86E, Size: 1, Min: 0x0, Max 0x1, Step: 0x0 {05 91 8B 03 8C 03 6E 08 04 00 02 00 10 10 00 01 00}
0x5DD71 One Of Option: Disabled, Value (8 bit): 0x0 (default) {09 07 04 00 30 00 00}
0x5DD78 One Of Option: Enabled, Value (8 bit): 0x1 {09 07 03 00 00 00 01}
0x5DD7F End One Of {29 02}
0x5DD81 Suppress If {0A 82}
0x5DD83 QuestionId: 0xA11 equals value 0x3 {12 86 11 0A 03 00}
0x5DD89 Not {17 02}
0x5DD8B End {29 02}
0x5DD8D One Of: Local FW Update, VarStoreInfo (VarOffset/VarName): 0x1, VarStore: 0x1108, QuestionId: 0x86F, Size: 1, Min: 0x0, Max 0x1, Step: 0x0 {05 91 8D 03 8E 03 6F 08 08 11 01 00 10 10 00 01 00}
0x5DD9E One Of Option: Disabled, Value (8 bit): 0x0 {09 07 04 00 00 00 00}
0x5DDA5 One Of Option: Enabled, Value (8 bit): 0x1 (default) {09 07 03 00 30 00 01}
0x5DDAC End One Of {29 02}
0x5DDAE End If {29 02}
0x5DDB0 End Form {29 02}
Может, это вообще не то, я целый вечер тыкаюсь почти вслепую.
Для определённости. Использовал биос от ThinkPad P50 (1.46).