Привет, Хабр!
Достался мне почти бесплатно dv6-2135er с отвалом видеочипа и без wi-fi карты. С чипом справился быстро, а вот с wi-fi не ожидал подвоха. Конечно я знал, что HP блокируют установку левых карт, но до этого карты были в комплекте и проблем не возникало. Можно было купить подходящую карту, но имея в запчастях другую, хотелось приспособить ее.
Инструменты и материалы
Обновление биос с сайта производителя sp47531.exe. Из него будем доставать дамп биос
Total Commander. Для поиска нужных блоков кода по содержанию файлов
IDA Pro. Для анализа кода и его правки
PhoenixTool. С помощью этой программы будем распаковывать биос на модули и обратную сборку
Шаг 1. Извлечение дампа из обновления и разборка на модули.
Запускаем файл sp47531.exe и указываем место, куда распаковать. В результате получаем файл WinFlash.exe. Чтобы добраться до бинарного дампа биос нужно открыть этот файл архиватором. Я использовал WinRar.
![](https://habrastorage.org/getpro/habr/upload_files/634/b16/0c6/634b160c69f82797db5f7f6461de3386.jpg)
Файл 3635F13.FD является искомым дампом. Достаем его из архива.
Запускаем PhoenixTool и открываем только что добытый файл биос. В списке Manufacturer ставим Other. Пойдет распаковка биос на модули. В процессе всплывут два окна, нажимаем Ок в обоих.
![](https://habrastorage.org/getpro/habr/upload_files/64f/594/bf1/64f594bf194b04daeaa1d29b4533ba56.jpg)
PhoenixTool распакует дамп биос в папку DUMP. Теперь можно закрыть программу, вернемся к ней позднее, когда будем собирать биос.
Шаг 2. Локализуем файл с проверкой whitelist.
После нехитрых манипуляций мы получили материал для изучения. Прочитав много публикаций в том числе и на Хабре, я понял, что универсального решения нет и нужно импровизировать. В качестве отправной точки я решил выбрать вывод сообщения об ошибке на экран, при попытке подсунуть левую карту. Думаю это сильно сузит круг поисков, так как если опираться, например, на белый список, то в моем случае их оказалось несколько в разных модулях, с разными картами и кодом обработки. Но и сегмент с текстом ошибки оказался не один. Как же найти нужный? Я решил пронумеровать каждое сообщение в его тексте, прошить и посмотреть какое сообщение вылезет при запуске с не родной картой.
Итак. Ищем модули с текстом ошибки - "104 - Unsupported wireless network device detected. System halted. Remove device and restart." . В этом нам поможет Total Commander. Обязательно ставим галочку на кодировке UTF-16, иначе файлы не найдутся.
![](https://habrastorage.org/getpro/habr/upload_files/e29/ce4/0e5/e29ce40e5b490c12426f56a6f566b394.jpg)
Текст ошибки встречается в двух файлах. Извлекаем их в отдельную папку для удобства и открываем в любом hex-редакторе. Теперь нам нужно найти все сегменты с текстом ошибки. В первом файле оказалось 4 вхождения с текстом ошибки, во втором 1.
![](https://habrastorage.org/getpro/habr/upload_files/9a9/c96/095/9a9c96095374349f88d179be8ccbae82.jpg)
Чтобы понять какой именно файл проверяет карты и выводит текст ошибки в случае неудачи пронумеруем в обоих файлах все вхождения текста ошибки прямо в самом тексте, заменив его часть. Не забываем, что указывать нужно utf-16 код символа, а не просто чило (1,2,3...)
![](https://habrastorage.org/getpro/habr/upload_files/fbe/09c/8cd/fbe09c8cd62a2a9b95bfc558d1d13bff.jpg)
Пронумеровав все участки с текстом ошибки я собрал биос (об этом речь дальше) , прошил и включил ноутбук. При инициализации получил сообщение об ошибке с номером, который до этого поставил в редакторе. Отлично, круг сужается. Таким образом я выявил, что искомый файл это A6F691AC-31C8-4444-854C-E2C1A6950F92_2_86.ROM. Теперь понятно где происходит проверка карт.
Шаг 3. Анализ и модификация кода модуля проверки карт.
Далее в дело вступает IDA Pro x64. Открываем в ней этот файл. У меня автоматически определился тип процессора и осталось только нажать Ок.
![](https://habrastorage.org/getpro/habr/upload_files/f1b/976/cf9/f1b976cf995dd4df8ac751f7cf845ca6.jpg)
Скажу сразу, что с ассемблером я не знаком от слова совсем и программированием занимаюсь в качестве хобби (поэтому не судите строго). Исходя из этого я понимаю, что ковыряние во всем коде файла мне ничего не даст. Но есть предположение, что список разрешенных карт хранится где-то в сегменте данных в этом файле. Чтобы проверить провожу поиск в хекс-редакторе по VEN популярных производителей. У Broadcom это 14 E4, а у Intel 80 86. Но порядок следования в хекс файле обратный, поэтому меняем местами и получаем E4 14 и 86 80. Поиск по Интел ничего не дал, а вот по Broadcom обнаружился белый список по смещению 324C0 от начала файла.
![](https://habrastorage.org/getpro/habr/upload_files/064/af6/c46/064af6c46683f74ef938be7c0620294d.jpg)
Можно было на этом этапе подставить данные своей карты и, думаю, все бы заработало, но это костыльное решение и я решил пойти дальше и выпилить проверку в коде.
Теперь идем в IDA Pro и переходим по этому смещению (относительно начала файла!!! там много других вариантов) находим начало белого списка и поднимаемся выше до имени первой переменной - unk_180032490. Эта переменная используется для проверки карт. Ставим на нее курсор и нажимаем клавишу X. IDA Pro покажет где используется эта переменная.
![](https://habrastorage.org/getpro/habr/upload_files/e2d/ba6/b28/e2dba6b28dc9b45569e485cf17b17075.jpg)
.Двойным щелчком по функции во всплывающем окне переходим в код этой функции. Для дальнейшего анализа алгоритма удобнее схематичное представление. Поэтому нажимаем пробел и код становится представлен ввиде блоков и связей между ними. В коде просматривается цикл проверки. Так же стоит обратить внимание на то, что делается перед блоком с ret, то есть перед возвратом из функции.
![](https://habrastorage.org/getpro/habr/upload_files/463/23e/005/46323e005430138a27f30387153dd5f2.jpg)
А делается у нас следущее: устанавливается или снимается флаг в регистре al. При пройденной проверке в него пишется 1 через регистр bl (выделил синим), иначе (предполагаю, что если в этом порту нет оборудования) он сбрасывается (красный). Наша задача обойти цикл проверки и минуя его уйти на метку loc_18001D902: . Поднимаемся выше по коду и ищем удобное место, где это сделать. Я выбрал строку jz short loc_18001D8CE. Здесь нужно заменить условный переход на безусловный и прыгнуть сразу на установку флага al и на выход из процедуры. Ставим курсор на нужную строку и идем Edit->Patch Program->Assemble... Меняем строку на jmp short loc_18001D902
![](https://habrastorage.org/getpro/habr/upload_files/419/c84/69d/419c8469d9d1fa4c44990db5f58f6da1.jpg)
Чтобы сохранить изменения идем Edit->Patch Program->Apply Patches to input file
Теперь цикл проверки не задействован и программа идет сразу на установку флага и выход из процедуры.
![](https://habrastorage.org/getpro/habr/upload_files/40b/308/316/40b30831678168849f5c1dc61fa04cf0.jpg)
Сохраняем файл и выходим из IDA, она больше не понадобиться. Но лучше еще раз открыть модифицированный файл и убедиться, что все так как задумано.
Шаг 4. Сборка модифицированного биос.
Полдела сделано. Теперь остается собрать биос с модифицированным файлом и прошить во флэш программатором. Так же можно попробовать прошить новый дамп через winFlash из под ОС, но этот вариант я не проверял. Удаляем из папки с разобранным дампом все, кроме папки с модифицированным модулем для удобства, так как PhoenixTool создает много мусора в папке с дампом.
![](https://habrastorage.org/getpro/habr/upload_files/003/bba/d74/003bbad7478696501943a9745b16744b.jpg)
Запускаем PhoenixTool, снова выбираем дамп с сайта производителя
![](https://habrastorage.org/getpro/habr/upload_files/251/aad/599/251aad59918d80b077d9fa7017a47d1a.jpg)
Нажимаем Advanced->Ставим чекбоксы как на скрине->Done
![](https://habrastorage.org/getpro/habr/upload_files/3ba/b88/363/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 стал проходить гораздо быстрее, но это, возможно связано с заменой флэш на новую, ибо старая читалась и шилась с перебоями.
На этом все. Всем добра!
Файл заводского обновления, готового дампа и измененного модуля можно взять тут
Комментарии (17)
Stas911
27.01.2022 05:42+2Ну ничего себе "любитель" O_o Думаю, многие профессионалы бы плюнули и просто купили нужную карту.
NAI
27.01.2022 07:29+4Это не так сложно, как кажется. Тоже писал патч к ПО ни разу не работая в IT(статья есть на хабре). Все это просто времени жрет много. Посудите сами - потратить неделю/месяц/три на ковыряние IDA'ой, или потратить на 1-2к больше денег? Для многих выбор очевиден.
P.s. автор молодец.
Nibiru1 Автор
27.01.2022 11:03+4Согласен. Времени съело много. Но зато прокачал скилл)
NAI
27.01.2022 22:03Если не секрет, сколько времи ушло на "ковыряние" и сколько статью писали? Интересно сравнить со своими результатами.
Nibiru1 Автор
28.01.2022 13:59Сложно сказать сколько времени ушло, но примерно дней пять точно, больше не на ковыряние прошивки, а на обдумывание как найти место, где происходит проверка. Оказалось там много мусора в виде белых списков, тех же сообщений об ошибке несколько. Статью часа 4 наверно писал, на скриншоты и их обрезку много времени уходит, плюс пришлось повторять процесс, чтобы снять скриншоты
CodeRush
27.01.2022 06:05+3Хорошая статья, только лучше было бы сделать дамп оригинальной прошивки, и модифицировать уже его, так получится перенести все индивидуальные данные, даже не зная, где они хранятся. Еще у других ноутбуков HP бывают случаи защиты тома DXE от модификации, но эта защита успешно обходится (1, 2, 3), если на ноутбуке не включен BootGuard.
lesheek
27.01.2022 11:12У HP своя реализация аппаратной защиты BIOS (hp sure start), построена на базе EC код которого проверяет BB перед статром процессора, далее модуль BB проверяет MB, эксклюзивная линейка EC для HP сильно осложняет возможность модификации BIOS, на практике делает практически невозможной.
Nibiru1 Автор
27.01.2022 11:24Это наверно в новых моделях где двойной биос. Запоминается контрольная сумма при последнем пуске и если она не совпадает при следущем пуске, то биос копирутся из резервной флэшки в основную, типа самовосстанавливается
Nibiru1 Автор
27.01.2022 11:20+1Ну обычно так и делается. Но ноут ко мне попал после другого мастера. Биос шился и неизвестно что там было зашито. Можно было, конечно сравнить дамп с заводским, но это лишние телодвижения. К тому же видеочип был угрет так что не только чип, но и плата под ним начала пузыриться, так что работоспособность биоса была под сомнением. Зато бонусом досталась новая матрица, даже в пленке)
poige
27.01.2022 06:22это удаление whitelisting'а, а не whitelist'ов, потому что в обратном случае там вообще никакие модели бы не поддерживались.
AlexeyPotopakhin
27.01.2022 20:57У меня другая проблема. Старый ноутбук HP630 с проблемой перегрева. Это болячка всех ноутбуков тех времен. Ноутбук просто сам выключается и при старте пишет "System Temperature (90D)". Есть подозрение, что проблема совсем не в перегреве, а возможный брак или неверные показания с датчиков.. Полагаю, что выключением занимается как раз BIOS, потому что при включении он уже знает, что был перегрев. Текст с сообщением "System Temperature (90D)" я нашел, а вот дальше то что?) В ассемблере не разбираюсь и найти что-то похожее в коде прошивки для выключения ноутбука - проблема(
Nibiru1 Автор
27.01.2022 21:10+1Я бы не рекомендовал отключать температурную защиту. Правильнее разобраться в причине возникновения проблемы. Датчики можно посмотреть в программе типа aida64. Если датчики впорядке и действительно по температуре отключается, значит защита работает правильно. Надо искать причину перегрева, термоинтерфейс например. Бывает термотрубка не работает и не отдает тепло к радиатору, проверить можно зажигалкой.
Redwid
27.01.2022 23:07Тоже в свое время удалял проверку на HP, по статье на Хабре. У меня совпало все номера и команды. Оказалось что HP непроверяют эти списки при выходе из спящего режима, пару байт поменял и вечно проскакивает эту проверку. Уже второй год как работает без проблем.
А что с видео чипом, как чинится?
Nibiru1 Автор
28.01.2022 12:40+2видеочип чинится заменой. снял старый, подлатал текстолит, посадил новый
dimka310
Отличная статья, спасибо вам большое! Уже несколько лет под столом стоит "пациент". В своё время очень сильно удивился тому, что HP "банит" железо. В моём случае я вернул назад оригинальный модуль Wi-Fi, но BIOS заблокировал сам слот. Попробую по вашим описаниям это побороть.
Nibiru1 Автор
Не слышал, чтобы биос блокировал слот. Может карта не рабочая или канал pci-e. Карту можно проверить воткнув в другой слот pci-e, который находится около батарейки биос. Я пробовал, карты определялись в системе, но ошибка, что нет wi-fi карты оставалась, но не мешала загрузке системы. Можно на крайний случай использовать. Тут есть еще одна догодка по использованию второго pci-e.В принципе судя по схеме это полноценный x1 pci-e. Вопрос будет ли работать там NVME ssd диск и насколько эффективно. Подозреваю что будет работать не очень быстро так как линия одна.
axe_chita
Не только HP так поступает, но и другие производители ноутбуков. Точно скажу, что проверка wifi whitelist есть в Lenovo, более того там же есть whitelist на АКБ. И если она не опознается, выводится предупреждение BIOS и не идет t` pfhzl.