Удаление Whitelist ноутбуков HP на примере HP Pavilion dv6-2135er

Привет, Хабр!

Достался мне почти бесплатно dv6–2135er с отвалом видеочипа и без wi-fi карты. С чипом справился быстро, а вот с wi-fi не ожидал подвоха. Конечно я знал, что HP блокируют установку левых карт, но до этого карты были в комплекте и проблем не возникало. Можно было купить подходящую карту, но имея в запчастях другую, хотелось приспособить ее.

Инструменты и материалы

  1. Обновление биос с сайта производителя sp47531.exe. Из него будем доставать дамп биос

  2. Total Commander. Для поиска нужных блоков кода по содержанию файлов

  3. IDA Pro. Для анализа кода и его правки

  4. PhoenixTool. С помощью этой программы будем распаковывать биос на модули и обратную сборку

Шаг 1. Извлечение дампа из обновления и разборка на модули.

Запускаем файл sp47531.exe и указываем место, куда распаковать. В результате получаем файл WinFlash.exe. Чтобы добраться до бинарного дампа биос нужно открыть этот файл архиватором. Я использовал WinRar.

634b160c69f82797db5f7f6461de3386.jpg

Файл 3635F13.FD является искомым дампом. Достаем его из архива.

Запускаем PhoenixTool и открываем только что добытый файл биос. В списке Manufacturer ставим Other. Пойдет распаковка биос на модули. В процессе всплывут два окна, нажимаем Ок в обоих.

64f594bf194b04daeaa1d29b4533ba56.jpg

PhoenixTool распакует дамп биос в папку DUMP. Теперь можно закрыть программу, вернемся к ней позднее, когда будем собирать биос.

Шаг 2. Локализуем файл с проверкой whitelist.

После нехитрых манипуляций мы получили материал для изучения. Прочитав много публикаций в том числе и на Хабре, я понял, что универсального решения нет и нужно импровизировать. В качестве отправной точки я решил выбрать вывод сообщения об ошибке на экран, при попытке подсунуть левую карту. Думаю это сильно сузит круг поисков, так как если опираться, например, на белый список, то в моем случае их оказалось несколько в разных модулях, с разными картами и кодом обработки. Но и сегмент с текстом ошибки оказался не один. Как же найти нужный? Я решил пронумеровать каждое сообщение в его тексте, прошить и посмотреть какое сообщение вылезет при запуске с не родной картой.

Итак. Ищем модули с текстом ошибки — »104 — Unsupported wireless network device detected. System halted. Remove device and restart.» . В этом нам поможет Total Commander. Обязательно ставим галочку на кодировке UTF-16, иначе файлы не найдутся.

e29ce40e5b490c12426f56a6f566b394.jpg

Текст ошибки встречается в двух файлах. Извлекаем их в отдельную папку для удобства и открываем в любом hex-редакторе. Теперь нам нужно найти все сегменты с текстом ошибки. В первом файле оказалось 4 вхождения с текстом ошибки, во втором 1.

9a9c96095374349f88d179be8ccbae82.jpg

Чтобы понять какой именно файл проверяет карты и выводит текст ошибки в случае неудачи пронумеруем в обоих файлах все вхождения текста ошибки прямо в самом тексте, заменив его часть. Не забываем, что указывать нужно utf-16 код символа, а не просто чило (1,2,3…)

fbe09c8cd62a2a9b95bfc558d1d13bff.jpg

Пронумеровав все участки с текстом ошибки я собрал биос (об этом речь дальше) , прошил и включил ноутбук. При инициализации получил сообщение об ошибке с номером, который до этого поставил в редакторе. Отлично, круг сужается. Таким образом я выявил, что искомый файл это A6F691AC-31C8–4444–854C-E2C1A6950F92_2_86.ROM. Теперь понятно где происходит проверка карт.

Шаг 3. Анализ и модификация кода модуля проверки карт.

Далее в дело вступает IDA Pro x64. Открываем в ней этот файл. У меня автоматически определился тип процессора и осталось только нажать Ок.

f1b976cf995dd4df8ac751f7cf845ca6.jpg

Скажу сразу, что с ассемблером я не знаком от слова совсем и программированием занимаюсь в качестве хобби (поэтому не судите строго). Исходя из этого я понимаю, что ковыряние во всем коде файла мне ничего не даст. Но есть предположение, что список разрешенных карт хранится где-то в сегменте данных в этом файле. Чтобы проверить провожу поиск в хекс-редакторе по VEN популярных производителей. У Broadcom это 14 E4, а у Intel 80 86. Но порядок следования в хекс файле обратный, поэтому меняем местами и получаем E4 14 и 86 80. Поиск по Интел ничего не дал, а вот по Broadcom обнаружился белый список по смещению 324C0 от начала файла.

064af6c46683f74ef938be7c0620294d.jpg

Можно было на этом этапе подставить данные своей карты и, думаю, все бы заработало, но это костыльное решение и я решил пойти дальше и выпилить проверку в коде.

Теперь идем в IDA Pro и переходим по этому смещению (относительно начала файла!!! там много других вариантов) находим начало белого списка и поднимаемся выше до имени первой переменной — unk_180032490. Эта переменная используется для проверки карт. Ставим на нее курсор и нажимаем клавишу X. IDA Pro покажет где используется эта переменная.

e2dba6b28dc9b45569e485cf17b17075.jpg

.Двойным щелчком по функции во всплывающем окне переходим в код этой функции. Для дальнйшего анализа алгоритма удобнее схематичное представление. Поэтому нажимаем пробел и код становится представлен ввиде блоков и связей между ними. В коде просматривается цикл проверки. Так же стоит обратить внимание на то, что делается перед блоком с ret, то есть перед возвратом из функции.

46323e005430138a27f30387153dd5f2.jpg

А делается у нас следущее: устанавливается или снимается флаг в регистре al. При пройденной проверке в него пишется 1 через регистр bl (выделил синим), иначе (предполагаю, что если в этом порту нет оборудования) он сбрасывается (красный). Наша задача обойти цикл проверки и минуя его уйти на метку loc_18001D902: . Поднимаемся выше по коду и ищем удобное место, где это сделать. Я выбрал строку jz short loc_18001D8CE. Здесь нужно заменить условный переход на безусловный и прыгнуть сразу на установку флага al и на выход из процедуры. Ставим курсор на нужную строку и идем Edit→Patch Program→Assemble…. Меняем строку на jmp short loc_18001D902

419c8469d9d1fa4c44990db5f58f6da1.jpg

Чтобы сохранить изменения идем Edit→Patch Program→Apply Patches to input file

Теперь цикл проверки не задействован и программа идет сразу на установку флага и выход из процедуры.

40b30831678168849f5c1dc61fa04cf0.jpg

Сохраняем файл и выходим из IDA, она больше не понадобиться. Но лучше еще раз открыть модифицированный файл и убедиться, что все так как задумано.

Шаг 4. Сборка модифицированного биос.

Полдела сделано. Теперь остается собрать биос с модифицированным файлом и прошить во флэш программатором. Так же можно попробовать прошить новый дамп через winFlash из под ОС, но этот вариант я не проверял. Удаляем из папки с разобранным дампом все, кроме папки с модифицированным модулем для удобства, так как PhoenixTool создает много мусора в папке с дампом.

003bbad7478696501943a9745b16744b.jpg

Запускаем PhoenixTool, снова выбираем дамп с сайта производителя

251aad59918d80b077d9fa7017a47d1a.jpg

Нажимаем Advanced→Ставим чекбоксы как на скрине→Done

3bab883630c09f42d7cda5d29b15dffb.jpg

Теперь самое важное. Нажимаем GO. Появится всплывающее окно You can now make… с кнопкой Ok.

НЕ НАЖИМАЕМ ОК!!!

Снова появится папка DUMP с разобранным биос. Берем файл, который модифицировали и копируем в эту папку с заменой. Вот теперь

НАЖИМАЕМ OK

PhoenixTool пересоберет биос с нашими изменениями, пересчитает контрольные суммы и выплюнет файл с постфиксом _SLIC — это и есть долгожданный дамп, готовый для прошивки.

P.S. Забыл сказать, что при прошивке очень желательно перекинуть серийники со слитого из ноутбука дампа в новый, чтобы потом не заморачиваться и не делать это утилитами. Серийники лежат по адресам h20000-h200FF.

В заключение хочу сказать, что в ноутбук была установлена карта Intel 4965AGN MM2, которая успешно прошла POST и подхватилась системой. В ОС даже нашлись драйверы на нее. Wi-fi работает без нареканий. Так же вставлялась карта Broadcom BCM94313HMGB, которая успешно определилась системой, но в ОС не было драйверов, а искать было лень, поэтому работоспособность не проверялась.

Так же субъективно POST стал проходить гораздо быстрее, но это, возможно связано с заменой флэш на новую, ибо старая читалась и шилась с перебоями.

На этом все. Всем добра!

Файл заводского обновления, готового дампа и измененного модуля можно взять тут

© Habrahabr.ru