Сейчас на форуме: Magister Yoda, vasilevradislav (+5 невидимых) |
eXeL@B —› Крэки, обсуждения —› Помогите с декомпиляцией модуля проверки whitelist из Insyde BIOS |
Посл.ответ | Сообщение |
|
Создано: 20 ноября 2013 22:55 · Поправил: strelok_aka_vc · Личное сообщение · #1 Имеем биос от HP DV7, Опытным путем найден модуль в котором происходит валидация белого списка установленного в ноут оборудования. Компилятор модуля Microsoft Visual Studio(8.0)[C++/DLL] Модулю передается управление при загрузке ноутбука. Все установленное оборудование (WiFi, Bluetooth, Graphic) проходит валидацию по whitelist. Если найдено оборудование не значащееся в белом списке, то модуль возвращает особый код и ноутбук далее не грузится а просит удалить 'неподдеживаемое' оборудование и перезагрузить комп. Задача стоит в том, чтобы модуль проходил валидацию беспроводной комбо карточки Intel Centrino N2230 http://goo.gl/xApxnG Некоторый ликбез взят со статьи на хабре: http://habrahabr.ru/post/108820/ Но судя по дизасму, схема проверки whitelist иная, нежели указана в статье. Здесь буду выкладывать собственные достижения по реверсингу модуля. |
|
Создано: 20 ноября 2013 23:35 · Поправил: reversecode · Личное сообщение · #2 |
|
Создано: 21 ноября 2013 00:00 · Личное сообщение · #3 reversecode, на счет проделанной работы не спорю, хоть и провозился сегодня целый день. однако по поводу желания, тут вы не правы. азарт пока есть и руки не опустились. помимо патча модуля, нужно будет повозиться с упаковкой биоса и решением проблемы с RSA подписью, дабы сохранялись и читались настройки биоса из CMOS'а после перешивки. однако по этой проблеме, похоже решения нет. но есть некоторые хитрости, которые можно использовать как солюшн. большинство заинтересованных в ремуве whitelist для этого биоса, ограничиваются лишь постом запроса на www.bios-mods.com в целом спасибо за комментарий, но похоже, что моей работы здесь пока больше чем Вашей ) буду рад, если будет иначе. |
|
Создано: 21 ноября 2013 00:46 · Поправил: dosprog · Личное сообщение · #4 |
|
Создано: 21 ноября 2013 09:09 · Поправил: Модератор · Личное сообщение · #5 Тема закрыта за нарушение п.8 Автор изо всех сил уверяет, что у него есть какие-то наработки, посему открою пока топик. |
|
Создано: 25 ноября 2013 13:11 · Личное сообщение · #6 Такое ощущение, что вся суть в этом блоке данных: Code:
работа с блоком происходит в этом участке кода Code:
|
|
Создано: 25 ноября 2013 13:15 · Поправил: reversecode · Личное сообщение · #7 |
|
Создано: 29 ноября 2013 22:58 · Поправил: strelok_aka_vc · Личное сообщение · #8 reversecode, спасибо за подсказку! Однако я не вижу, в модуле констант DEV/VEN ID, но вижу в секции .data именование всех поддерживаемых беспроводных модулей. Инфа из DIE: Если посмотреть дамп в юникоде, то четко виден весь перечень поддерживаемого оборудования и еще несколько байт перед каждым наименованием. предполагаю это некоторый код, который отвечает например за схему включения/отключения питания устройства по кнопке Fn+F12: |
|
Создано: 29 ноября 2013 23:02 · Поправил: reversecode · Личное сообщение · #9 strelok_aka_vc пишет: , в модуле констант DEV/VEN ID, но вижу в секции .data именование всех поддерживаемых беспроводных модулей. вот там эти константы и сидят перед строкой имени девайса, правда директ ссылок на блок .data нет, там есть одна ссылка на начало .data. а дальше уже только оффсетами считается strelok_aka_vc пишет: еще несколько байт перед каждым это они и есть DEV VEN ID |
|
Создано: 30 ноября 2013 22:16 · Личное сообщение · #10 reversecode, однако тут что то не сходится. по адресу 0x2448, лежат байты, [ 86 80 83 00 86 80 05 13 20 ] в след за которыми идет строка юникода "Intel? Wi-Fi Link 1000" По факту, мой родной адаптер 'Intel Centrino N-1000' имеет следующие DEV/VEN: PCI\VEN_8086&DEV_0084&SUBSYS_13158086&REV_00 Итого имеем: первая строка фактически, вторая строка данные из биоса Code:
Если DEV/VEN/SUBSYS не совпадают, то получается, что валидация проходит не по ним... |
|
Создано: 30 ноября 2013 22:27 · Личное сообщение · #11 Хмм. Прошу прощения за дизинформацию. По адресу 2790 таки нашлась нужная комбинация байт: 86 80 84 00 86 80 15 13 50 с идентификатором PD911230BNHU. однако не понимаю, что делать с блютузом. Попробую его dev/ven вбить в какой то другой wifi адаптер. Остается понять зачем нужна строка юникода с именем адаптера. Ее тоже перебивать? |
|
Создано: 30 ноября 2013 22:27 · Поправил: reversecode · Личное сообщение · #12 Code:
дальше сами разбирайтесь есть предположение что тоже нужно и ее перебивать, во всяком случае кажется юникодовый memcmp там наблюдается, значит чего то там сканируется для проверки.. ну попытка не пытка, поиграетесь и сами узнаете играет роль или нет |
|
Создано: 30 ноября 2013 23:40 · Поправил: dosprog · Личное сообщение · #13 - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - - - -- - - - - - -- - - - - ->8 41B001__________mov r8b,1 418AC0__________mov al,r8b <---------- put here db 0B0h,01,90h 4881C478010000__add rsp,178h C3______________ret - - - - - - - - - - - - - - - - - - - -- - - - - - - - - -- - - - -- - - - - - -- - - - - ->8 Да, бесполезно... Перебивание даных скользкое решение, да и потом при каждой смене железки опять возиться придётся. -- ADD -- Veliant, да, первый же из "JNZ 00000001800009C3"... Без хидеров с уверенностью нельзя было бы ничего сказать (EFI). А цифровая подпись модулей - наверное, там всё ограничивается контрольной суммой, которую пересчитает Phoenix_BIOS_tool. Жаль, попробовать не на чем... |
|
Создано: 30 ноября 2013 23:45 · Личное сообщение · #14 потому что там уже все подругому и явных return 1; там нет есть две прцедуры на калбеках перавая чето сканирует расставляет dev ven id вторая чето сканирует расставляет dev ven id дальше было лень разбирать | Сообщение посчитали полезным: dosprog |
|
Создано: 01 декабря 2013 13:02 · Поправил: Veliant · Личное сообщение · #15 В аттаче листинг с проставленными именами/параметрами коллбеков EFI (BootServices, RuntimeServices, PciIo) и собственно хидеры. Основная проверка идет в 00000001800003EC EventPciIo_NotifyFunction теоретически есть смысл запатчить JNZ 00000001800009C3 на JMP 0000000180000832 тем самым проскакивая проверки ven/dev и переходим сразу к заполнению структуры с текущими значениями Только все эти махинации пойдут лесом, если проверяется какая-нибудь цифровая подпись модулей cef8_01.12.2013_EXELAB.rU.tgz - efi.zip | Сообщение посчитали полезным: strelok_aka_vc, dosprog, gabiz_ro |
|
Создано: 01 декабря 2013 18:25 · Личное сообщение · #16 |
|
Создано: 01 декабря 2013 21:56 · Личное сообщение · #17 |
|
Создано: 01 декабря 2013 22:16 · Личное сообщение · #18 хидеры должны парсится и набиватся в Local Types Shift+F1 | Сообщение посчитали полезным: strelok_aka_vc |
|
Создано: 05 декабря 2013 00:23 · Личное сообщение · #19 |
|
Создано: 05 декабря 2013 08:25 · Личное сообщение · #20 |
|
Создано: 05 декабря 2013 21:34 · Личное сообщение · #21 Veliant пишет: кто и на чем проверять должен? В плане правильности команды все верно. Да, я код имел в виду. Пришлось чуток попотеть и вспомнить курс асма в Бонче ) Сегодня таки выкроил времени, разобрался с аварийным восстановлением БИОСа для HP. Если кому то понадобится, инфа взята отсюда: http://forum.ru-board.com/topic.cgi?forum=81&topic=5300&start=580#13 В итоге прошился пропатченым прошивальщиком insyde, который плюет на подписи и зашивает ни смотря ни на что. После перезагрузки с любой вставленной беспроводной картой - черный экран. Без карты - порядок, грузится. Думаю, куда копать дальше |
|
Создано: 05 декабря 2013 22:05 · Поправил: Veliant · Личное сообщение · #22 Может прикинуться шлангами и пропатчить тут Code:
на jmp? Типа у нас PCI не читается вообще =) Add: хотя стоит попробовать не просто опкод заменить, а заменить на jmp 00000001800009FD, чтоб эвент закрылся Если не проканает, то придется вкуривать, что же там пишется в порты при нахождении нужных железок add2: я правда не даю гарантий что комп потом вообще будет грузиться |
|
Создано: 06 декабря 2013 17:28 · Личное сообщение · #23 |
eXeL@B —› Крэки, обсуждения —› Помогите с декомпиляцией модуля проверки whitelist из Insyde BIOS |