Хакер - Запретный апгрейд. Взламываем UEFI ноутбука Lenovo, чтобы поменять адаптер Wi-Fi

Хакер - Запретный апгрейд. Взламываем UEFI ноутбука Lenovo, чтобы поменять адаптер Wi-Fi

hacker_frei

https://t.me/hacker_frei

Candidum

Содержание статьи

  • Тренируемся на кошках
  • Вайтлист и вендорлок
  • От теории к практике

Есть катего­рия людей, которые счи­тают, что из тех­ники нуж­но выжимать все 100% ее потен­циала, то есть она дол­жна работать до тех пор, пока окон­чатель­но не истле­ет. Сегод­няшняя статья — имен­но для них. Мы про­апгрей­дим Wi-Fi в ноут­буке Lenovo G710 и отклю­чим white list, даже не вос­поль­зовав­шись ассем­бле­ром.

Все началось с того, что я при­обрел себе ноут Dell Vostro 5301. И вот в один прек­расный день, гоняя по локал­ке оче­ред­ной десяток гигабайт, я подумал, что, имея роутер с Wi-Fi 5 и ноут с его под­дер­жкой, глу­по его не исполь­зовать на всю катуш­ку. Я вклю­чил на роуте­ре Wi-Fi 5, поп­робовал, и мне пон­равилось.

ТРЕНИРУЕМСЯ НА КОШКАХ

Но воз­никла одна проб­лема: осталь­ные ноуты в моей сети не уме­ли Wi-Fi 5, поэто­му, посидев и подумав, я решил, что приш­ла пора апгрей­да. Обно­вить пред­сто­яло два аппа­рата: огры­зок ASUS X553MA, который тру­дит­ся у меня фай­лопомой­кой, и Lenovo G710, которым поль­зует­ся жена. Это как раз тот слу­чай, ког­да из короб­ки нет драй­веров, их приш­лось тянуть с AUR, бла­го про­вод­ной адап­тер на ноут­буке завел­ся.

Па­мятуя о проб­лемах с род­ной вай­файкой Lenovo G710, я решил выб­рать заведо­мо бес­проб­лемный адап­тер Intel Wireless 7260, для которо­го в ядре Linux есть драй­веры. Так­же я заранее учел, что в Lenovo G710 и ASUS X553MA раз­ные разъ­емы PCI Express для под­клю­чения адап­теров и что со сме­ной адап­тера в ASUS при­дет­ся поменять еще и антенну. Сме­на антенны необ­ходима из‑за раз­ных разъ­емов на род­ном и новом адап­терах. Кро­ме того, в X553MA уста­нов­лена лишь одна антенна main (эко­номия, одна­ко), а новый адап­тер пре­дус­матри­вает под­клю­чение двух антенн, основной и вспо­мога­тель­ной. Бла­го сто­ят они недоро­го и уста­нав­лива­ются эле­мен­тарно. Вот так это доб­ро выг­лядит.

Адап­тер Wi-Fi для Lenovo G710
Адап­тер Wi-Fi для ASUS X553MA
Но­вая антенна для ASUS X553MA

Приш­ло вре­мя все это дело уста­новить и под­клю­чить. Пер­вым на оче­реди был ASUS X553MA, и с ним, к моему удив­лению, все прош­ло глад­ко: адап­тер встал, зарабо­тал, и сис­тема его сра­зу же под­хва­тила, приш­лось толь­ко имя адап­тера в юни­те wpa_supplicant и dhcpcd поменять.

ВАЙТЛИСТ И ВЕНДОРЛОК

А вот с Lenovo G710 получи­лось гораз­до веселее: там в биосе есть вен­дорлок. При началь­ной заг­рузке UEFI опре­деля­ет уста­нов­ленный адап­тер и ищет его в white list’е, зашитом про­изво­дите­лем. Сто­ит ли говорить, что Intel Wireless 7260 там не ока­залось и ноут­бук встре­тил меня радос­тным сооб­щени­ем.

Error

В прин­ципе, я к это­му был готов еще на эта­пе пла­ниро­вания апгрей­да, но успех с ASUS все­лил в меня надеж­ду, что замена адап­тера может про­катить. Не про­кати­ло…

По­иск в гуг­ле показал, что проб­лема в целом извес­тная и лечит­ся переп­рошив­кой биоса про­пат­ченной вер­сией, которую мож­но поис­кать в интерне­те. К нес­частью, биоса для моей модели не наш­лось, остался пос­ледний вари­ант: ковырять UEFI самос­тоятель­но.

В сети в целом есть ряд неп­лохих ману­алов на тему обхо­да white list’а, нап­ример на Хаб­ре (изоб­ражение экра­на я взял отту­да, пос­коль­ку мое не сох­ранилось), и там нет ничего зап­редель­но слож­ного. Надо рас­паковать UEFI, най­ти там учас­ток с тек­стом ошиб­ки, пос­мотреть, какая фун­кция на него ссы­лает­ся, и заменить один из условных перехо­дов дру­гим условным перехо­дом — или безус­ловным перехо­дом, тут есть некото­рая вари­атив­ность. Сму­щали меня во всем этом две вещи: во‑пер­вых, боль­шинс­тво ману­алов заточе­ны под вин­довый софт, во‑вто­рых, с ассем­бле­ром я, мяг­ко говоря, на вы.

Нес­коль­ко углу­бив­шись в тему, я узнал про замеча­тель­ную прог­рамму UEFITool и нашел пару при­меров по работе с ней: часть 1 и часть 2. Это приб­лизило меня к решению проб­лемы, одна­ко рекомен­дации во всех при­веден­ных выше источни­ках носили ско­рее общий харак­тер. И вот тут я нат­кнул­ся на от­личную статью авто­ра под ником p0358, опи­сыва­ющую в под­робнос­тях, как он ковырял UEFI сво­его Lenovo G510, решая ту же проб­лему, что и я.

Пос­ле ее проч­тения ста­новит­ся понят­но, как най­ти завет­ное мес­то, в котором нуж­но испра­вить jz на jmp, что­бы обой­ти white list. От себя могу добавить, что при­седа­ния авто­ра с исполь­зовани­ем двух вер­сий UEFITool излишни, впол­не мож­но обой­тись и акту­аль­ной вер­сией. Кро­ме того, в нас­тоящее вре­мя бес­плат­ная вер­сия деком­пилято­ра IDA Free уме­ет работать с UEFI-бинар­никами, так что без IDA Pro тоже мож­но обой­тись. Но глав­ная фича этой статьи зак­люча­ется в том, что автор обна­ружил в коде UEFI Lenovo G510 перемен­ные, которые отклю­чают white list вов­се, и это очень упро­щает все мероп­риятие.

Те самые перемен­ные в бинар­нике

Ко­неч­но, Lenovo G510 — это не G710, одна­ко они ровес­ники и, счи­тай, из одной линей­ки, поэто­му я понаде­ялся, что их про­шив­ки не дол­жны замет­но отли­чать­ся и про­пат­чить биос удас­тся малой кровью. Забегая впе­ред, ска­жу, что так все и получи­лось.

WARNING

Мо­дифи­кация UEFI ноут­бука, как, впро­чем, и ковыря­ние в его пот­рохах шалов­ливыми ручон­ками, лег­ко могут окир­пичить устрой­ство. А при удач­ном сте­чении обсто­ятель­ств — физичес­ки вывес­ти его из строя. Поэто­му все ниже­опи­сан­ные манипу­ляции ты про­изво­дишь на свой страх и риск. Пра­вовой ста­тус дан­ных манипу­ляций тоже сом­нитель­ный.

ОТ ТЕОРИИ К ПРАКТИКЕ

Итак, что­бы модифи­циро­вать про­шив­ку, ее нуж­но сна­чала извлечь с флеш­ки UEFI. Это мож­но сде­лать сугубо прог­рам­мны­ми метода­ми, хотя у меня с нас­кока этот финт не вышел. Тем не менее в любом слу­чае надо дер­жать под рукой прог­рамма­тор, так как веро­ятность накося­чить здесь ненуле­вая, а ожи­вить окир­пичен­ный ноут без прог­рамма­тора уже не вый­дет. Я исполь­зовал прог­рамма­тор на CH341: дешево и сер­дито, кро­ме того, он сов­местим с удоб­ной ути­литой flashrom.

Прог­рамма­тор на CH341

На пред­став­ленном изоб­ражении лег­ко заметить при­щеп­ку для мало­инва­зив­ного под­клю­чения к мик­росхе­ме flash-памяти и переход­ник для под­клю­чения при­щеп­ки. Разуме­ется, надеж­нее и в некото­ром смыс­ле пра­виль­нее отпа­ять мик­росхе­му, про­шить и запа­ять обратно, одна­ко я человек ленивый и пред­почитаю сна­чала испро­бовать вари­ант поп­роще. При­мене­ние при­щеп­ки имен­но такой вари­ант: она, конеч­но, нес­коль­ко кап­ризна и не всег­да дает надеж­ный кон­такт, но раза со вто­рого‑треть­его все обыч­но получа­ется.

WARNING

Ис­поль­зуя при­щеп­ку, очень вни­матель­но сле­ди за пра­виль­ностью под­клю­чения мик­росхе­мы к прог­рамма­тору (осо­бен­но вывод Vcc), ошиб­ка может при­вес­ти к перепо­люсов­ке питания с весь­ма печаль­ными пос­ледс­тви­ями. Так что тут луч­ше триж­ды все про­верить перед вклю­чени­ем прог­рамма­тора. Сож­женная до сня­тия дам­па мик­росхе­ма flash — это epic fail.

С прог­рамма­тором разоб­рались, теперь надо доб­рать­ся до самой флеш­ки. У Lenovo G710 это не очень при­ятный про­цесс: пот­ребу­ется поч­ти пол­ная раз­борка аппа­рата. Самое смеш­ное, что у это­го ноута сни­зу удоб­но сни­маемая крыш­ка, ее уда­ление поз­воля­ет лег­ко почис­тить сис­тему охлажде­ния, заменить память, хард и даже проц при желании (да, он там не рас­паян­ный), а вот флеш­ка UEFI рас­положе­на с дру­гой сто­роны пла­ты, под кла­виату­рой. Поэто­му вер­хнюю панель и кла­виату­ру при­дет­ся снять. Рас­положе­ние флеш­ки UEFI показа­но на фотог­рафии.

Рас­положе­ние флеш­ки UEFI Lenovo G710

Те­перь мож­но под­клю­чить к ней при­щеп­ку и все еще раз про­верить.

При­щеп­ка, под­клю­чен­ная к флеш­ке UEFI

Ес­ли все сде­лано пра­виль­но, вклю­чаем прог­рамма­тор и сни­маем дамп с флеш­ки. Прог­рамма­тор, конеч­но, верифи­циру­ет счи­тан­ный дамп, но я для пол­ного душев­ного спо­кой­ствия счи­тал его дваж­ды и срав­нил резуль­таты с помощью diff. Про­писы­вать тип флеш­ки нет осо­бой нуж­ды: flashrom и сам ее прек­расно опре­деля­ет.

sudo flashrom --programmer ch341a_spi -r down_g710-1.bin

sudo flashrom --programmer ch341a_spi -r down_g710-2.bin

diff down_g710-1.bin down_g710-2.bin

Ес­ли вдруг со счи­тыва­нием воз­никли проб­лемы, надо пошеве­лить при­щеп­ку: ско­рее все­го, виноват пло­хой кон­такт.

Итак, дамп у нас есть, теперь запус­каем UEFITool и откры­ваем дамп в этом при­ложе­нии.

uefitool down_g710-1.bin

Ок­но UEFITool с откры­тым дам­пом

Вы­зыва­ем окно поис­ка и ищем нашу любимую стро­ку Unauthorized Wireless network card is plugged in.

Ок­но поис­ка

Ви­дим, что стро­ка наш­лась, жмем на резуль­тат, откры­вает­ся нуж­ная нам сек­ция.

Ре­зуль­тат поис­ка
Нуж­ная нам сек­ция

Для най­ден­ной сек­ции в кон­текс­тном меню выбира­ем «Extract body…» и сох­раня­ем файл.

Те­перь нам понадо­бит­ся hex-редак­тор. Я, не мудрствуя лукаво, вос­поль­зовал­ся встро­енным в mc. Откры­ваем для прос­мотра сох­ранен­ный файл и перек­люча­емся в режим HEX. Мож­но вос­поль­зовать­ся поис­ком, одна­ко это не обя­затель­но: файл неболь­шой, нуж­ный учас­ток рас­полага­ется в самом его кон­це и лег­ко находит­ся «гла­зами».

Ис­комый фраг­мент фай­ла

Пе­рек­люча­емся в режим редак­тора, изме­няем зна­чения ука­зан­ных бай­тов с 01 на 00 и сох­раня­ем резуль­тат.

От­редак­тирован­ный фраг­мент

Те­перь воз­вра­щаем­ся в UEFITool и с помощью кон­текс­тно­го меню заменя­ем экс­тра­гиро­ван­ную ранее сек­цию (пункт в меню «Replace body...») отре­дак­тирован­ной нами.

За­мена сек­ции в UEFITool

Ста­рая сек­ция помеча­ется на уда­ление, новая на замену, а весь фраг­мент — на перес­борку. Что­бы изме­нения всту­пили в силу, оста­лось сох­ранить про­пат­ченный дамп. Все, дело сде­лано, нуж­но толь­ко залить обновлен­ный образ обратно на флеш­ку. Для это­го сно­ва под­клю­чаем прог­рамма­тор и вызыва­ем flashrom.

sudo flashrom --programmer ch341a_spi -w down_g710_no_white_list.bin

Те­перь ноут мож­но собирать и вклю­чать, новая кар­та Wi-Fi опре­дели­лась и завелась сра­зу. Самое смеш­ное, что мне не пот­ребова­лось даже менять имя кар­ты в юни­те wpa_supplicant: к моему удив­лению, оно оста­лось преж­ним. Так что даже сеть под­нялась с ходу. При­ятным бонусом к апгрей­ду ста­ло сок­ращение вре­мени, тре­бующе­гося на пер­вичную ини­циали­зацию ноут­бука, что дало уско­рение заг­рузки на три‑четыре секун­ды. На этом аппа­рате это поч­ти двук­ратное уве­личе­ние ско­рос­ти, он теперь вклю­чает­ся быс­трее чем за пять секунд — недур­но для девяти­лет­него ноута.

Да, там сто­ит SSD и исполь­зует­ся EFISTUB. Есть все осно­вания полагать, что ноут пос­лужит верой и прав­дой еще нес­коль­ко лет.

Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei



Report Page