Сейчас на форуме: Magister Yoda, vasilevradislav (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› Помогите с декомпиляцией модуля проверки whitelist из Insyde BIOS
Посл.ответ Сообщение

Ранг: 3.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 20 ноября 2013 22:55 · Поправил: strelok_aka_vc
· Личное сообщение · #1

Имеем биос от HP DV7, (sp55068 BIOS F.1B) 4.9Мб
Опытным путем найден модуль в котором происходит валидация белого списка установленного в ноут оборудования.
Этот модуль распакован с помощью PhoenixTool v2.19. Имя модуля H19BIOSLock, идентификатор "CD28DACA-BDBE-481A-90AC-625C79CF234C". Первые 80 байт модуля это какая от подпись. Они обрезаны, далее обычная dll. 11.7кб
Компилятор модуля Microsoft Visual Studio(8.0)[C++/DLL]

Модулю передается управление при загрузке ноутбука. Все установленное оборудование (WiFi, Bluetooth, Graphic) проходит валидацию по whitelist. Если найдено оборудование не значащееся в белом списке, то модуль возвращает особый код и ноутбук далее не грузится а просит удалить 'неподдеживаемое' оборудование и перезагрузить комп. Задача стоит в том, чтобы модуль проходил валидацию беспроводной комбо карточки Intel Centrino N2230 http://goo.gl/xApxnG

Некоторый ликбез взят со статьи на хабре: http://habrahabr.ru/post/108820/
Но судя по дизасму, схема проверки whitelist иная, нежели указана в статье.

Здесь буду выкладывать собственные достижения по реверсингу модуля.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 20 ноября 2013 23:35 · Поправил: reversecode
· Личное сообщение · #2

все где нужно делать за вас, это запросы
потому что вашей работы = 0, как и дальнейшего желания разбиратся



Ранг: 3.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 21 ноября 2013 00:00
· Личное сообщение · #3

reversecode, на счет проделанной работы не спорю, хоть и провозился сегодня целый день.
однако по поводу желания, тут вы не правы. азарт пока есть и руки не опустились.
помимо патча модуля, нужно будет повозиться с упаковкой биоса и решением проблемы с RSA подписью, дабы сохранялись и читались настройки биоса из CMOS'а после перешивки. однако по этой проблеме, похоже решения нет. но есть некоторые хитрости, которые можно использовать как солюшн.

большинство заинтересованных в ремуве whitelist для этого биоса, ограничиваются лишь постом запроса на www.bios-mods.com

в целом спасибо за комментарий, но похоже, что моей работы здесь пока больше чем Вашей ) буду рад, если будет иначе.



Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 21 ноября 2013 00:46 · Поправил: dosprog
· Личное сообщение · #4

strelok_aka_vc,
>> большинство заинтересованных в ремуве whitelist для этого биоса, ограничиваются лишь постом запроса на www.bios-mods.com.
-- Но вы пошли дальше - разместили запрос на exelab'е. Это покруче.)




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 21 ноября 2013 09:09 · Поправил: Модератор
· Личное сообщение · #5

Тема закрыта за нарушение п.8 правил форума.

Автор изо всех сил уверяет, что у него есть какие-то наработки, посему открою пока топик.



Ранг: 3.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 25 ноября 2013 13:11
· Личное сообщение · #6

Такое ощущение, что вся суть в этом блоке данных:
Code:
  1. .text:00000001800003E9                 align 4
  2. .text:00000001800003EC aLlIiUvwauavhb  db 'LЛ-IЙ[',8,'UVWAUAVHБь-',0
  3. .text:00000001800003EC                                         ; DATA XREF: sub_180000A28+10o
  4. .text:00000001800003FF                 align 20h
  5. .text:0000000180000400                 dq 2968058B4C00h, 214880438D49F633h, 3024742148482474h
  6. .text:0000000180000400                 dq 7421484024742148h, 8948207321493824h, 2976058B48202444h
  7. .text:0000000180000400                 dq 8D4D016E8D440000h, 33CD8B41D233C84Bh, 88451C1843C641FFh
  8. .text:0000000180000400                 dq 43C749ED3240196Bh, 0B090FF00000008C8h, 880FC08548000000h
  9. .text:0000000180000400                 dq 3D058B48000005AAh, 58244C8B48000029h, 158D484824448D4Ch
  10. .text:0000000180000400                 dq 9890FF00002864h, 83880FC085480000h, 6024448D48000005h
  11. .text:0000000180000400                 dq 48C03345404E8D44h, 24448B4820244489h, 50FFC88B48D23348h
  12. .text:0000000180000400                 dq 55C880FC0854830h, 88446B24448A0000h, 358D4C000028C32Dh
  13. .text:0000000180000400                 dq 850F033CFFFFFB3Ch, 44B70F4400000168h, 60244CB70F446224h
  14. .text:0000000180000400                 dq 0F0000FFFFB9DB32h, 0D0C06948C3B6h, 27F0308C3B466600h
  15. .text:0000000180000400                 dq 843B466643750000h, 423875000027F230h, 27F43094B70Fh
  16. .text:0000000180000400                 dq 9439660A74D13B66h, 4220750000008C24h, 27F63094B70Fh
  17. .text:0000000180000400                 dq 8F840FD13B66h, 8E2494396600h, 4100000081840F00h, 48A07205FB80DD02h
  18. .text:0000000180000400                 dq 384000002822058Bh, 0BB850F000000A8B0h, 284E058B48000004h
  19. .text:0000000180000400                 dq 4C58244C8B480000h, 65158D485024448Dh, 9890FF000027h
  20. .text:0000000180000400                 dq 494880FC0854800h, 415024548B480000h, 7F3C7F24028AFFB0h
  21. .text:0000000180000400                 dq 840F014238440A75h, 0FF68548000001ADh, 0C53A410000017485h
  22. .text:0000000180000400                 dq 38440000017D850Fh, 173850F016Ah, 16BE9F28B48h, 0F824848D48h
  23. .text:0000000180000400                 dq 448D4C38244C8D4Ch, 4820244489484024h, 24548D484824448Bh
  24. .text:0000000180000400                 dq 487050FFC88B4830h, 426880FC085h, 0F824848A38244C8Ah
  25. .text:0000000180000400                 dq 21FE158D48000000h, 0A072403E1C00000h, 0D0C96948CBB60FC1h
  26. .text:0000000180000400                 dq 83B2CA0348000000h, 448830244CB60F44h, 44884024448A2824h
  27. .text:0000000180000400                 dq 2737058B482024h, 0E94450FFC58A4500h, 24743840000003DAh
  28. .text:0000000180000400                 dq 0FC850F023C08746Ah, 2444B70F44FFFFFEh, 3260244CB70F4462h
  29. .text:0000000180000400                 dq 0B60F0000FFFFB9DBh, 0D0C06948C3h, 2C00308C3B4666h, 30843B46663B7500h
  30. .text:0000000180000400                 dq 0F42307500002C02h, 6600002C043094B7h, 249439660A74D13Bh
  31. .text:0000000180000400                 dq 0F4218750000008Ch, 6600002C063094B7h, 249439661874D13Bh
  32. .text:0000000180000400                 dq 2410E740000008Eh, 0FE8D830FDD3A41DDh, 24848D48A2EBFFFFh
  33. .text:0000000180000400                 dq 244C8D4C000000F8h, 89484024448D4C38h, 4824448B48202444h
  34. .text:0000000180000400                 dq 0C88B483024548D48h, 880FC085487050FFh, 38244C8A0000032Ah
  35. .text:0000000180000400                 dq 48000000F824848Ah, 0E1C000002512158Dh, 0CBB60FC10A072403h
  36. .text:0000000180000400                 dq 48000000D0C96948h, 0FFFEFFE985B2CA03h, 3A410D75FF8548FFh
  37. .text:0000000180000400                 dq 48016A38440875C5h, 0C10342B60FFA440Fh, 42B60FC8634808E0h
  38. .text:0000000180000400                 dq 48D10348C80B4802h, 0FFFE41E950245489h, 2C4840FF68548FFh
  39. .text:0000000180000400                 dq 0BB840FFF85480000h, 0C1B60FC932000002h, 4


работа с блоком происходит в этом участке кода
Code:
  1. .text:0000000180000A28 sub_180000A28   proc near               ; CODE XREF: DllEntryPoint+13Fp
  2. .text:0000000180000A28
  3. .text:0000000180000A28 var_18          = qword ptr -18h
  4. .text:0000000180000A28
  5. .text:0000000180000A28                 push    rbx
  6. .text:0000000180000A2A                 sub     rsp, 30h
  7. .text:0000000180000A2E                 lea     rax, qword_180002D78
  8. .text:0000000180000A35                 xor     r9d, r9d
  9. .text:0000000180000A38                 lea     r8, aLlIiUvwauavhb ; "LЛ-IЙ[\bUVWAUAVHБь-"
  10. .text:0000000180000A3F                 mov     [rsp+38h+var_18], rax
  11. .text:0000000180000A44                 mov     rax, cs:qword_180002DA8
  12. .text:0000000180000A4B                 lea     edx, [r9+7]
  13. .text:0000000180000A4F                 mov     ecx, 200h
  14. .text:0000000180000A54                 call    qword ptr [rax+50h]
  15. .text:0000000180000A57                 xor     ebx, ebx
  16. .text:0000000180000A59                 cmp     rax, rbx
  17. .text:0000000180000A5C                 jge     short loc_180000A6A
  18. .text:0000000180000A5E                 mov     rax, 8000000000000015h
  19. .text:0000000180000A68                 jmp     short loc_180000AA1





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 25 ноября 2013 13:15 · Поправил: reversecode
· Личное сообщение · #7

теперь осталось нажать буковку 'С' на .text:00000001800003EC
и преобразовать это в процедуру )))

и копите про всяк случай денег на новый ноутбук

и дочитайте хабр уже наконецто,
там вам вариант попроще, найти ваш DEV/VEN ID и перебить на новый который вставляете
а не отключать проверку полного вайт листа



Ранг: 3.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 29 ноября 2013 22:58 · Поправил: strelok_aka_vc
· Личное сообщение · #8

reversecode, спасибо за подсказку!
Однако я не вижу, в модуле констант DEV/VEN ID, но вижу в секции .data именование всех поддерживаемых беспроводных модулей.

Инфа из DIE:


Если посмотреть дамп в юникоде, то четко виден весь перечень поддерживаемого оборудования и еще несколько байт перед каждым наименованием. предполагаю это некоторый код, который отвечает например за схему включения/отключения питания устройства по кнопке Fn+F12:





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 29 ноября 2013 23:02 · Поправил: reversecode
· Личное сообщение · #9

strelok_aka_vc пишет:
, в модуле констант DEV/VEN ID, но вижу в секции .data именование всех поддерживаемых беспроводных модулей.

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

strelok_aka_vc пишет:
еще несколько байт перед каждым

это они и есть DEV VEN ID



Ранг: 3.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 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:
  1. VEN  DEV  SUBSYS
  2. 8086 0084 13158086
  3. 8086 0083 13058086


Если DEV/VEN/SUBSYS не совпадают, то получается, что валидация проходит не по ним...



Ранг: 3.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 30 ноября 2013 22:27
· Личное сообщение · #11

Хмм. Прошу прощения за дизинформацию.
По адресу 2790 таки нашлась нужная комбинация байт:
86 80 84 00 86 80 15 13 50 с идентификатором PD911230BNHU.

однако не понимаю, что делать с блютузом. Попробую его dev/ven вбить в какой то другой wifi адаптер.
Остается понять зачем нужна строка юникода с именем адаптера. Ее тоже перебивать?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 30 ноября 2013 22:27 · Поправил: reversecode
· Личное сообщение · #12

Code:
  1. .data:0000000180002740                 dw 8086h
  2. .data:0000000180002742                 dw 84h
  3. .data:0000000180002744                 dd 13158086h

дальше сами разбирайтесь

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



Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 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.
Жаль, попробовать не на чем...




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 30 ноября 2013 23:45
· Личное сообщение · #14

потому что там уже все подругому
и явных return 1; там нет
есть две прцедуры на калбеках
перавая чето сканирует расставляет dev ven id
вторая чето сканирует расставляет dev ven id
дальше было лень разбирать

| Сообщение посчитали полезным: dosprog

Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 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


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 01 декабря 2013 18:25
· Личное сообщение · #16

вручную все набивал?



Ранг: 3.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 01 декабря 2013 21:56
· Личное сообщение · #17

Veliant, листинг очень помог, большое спасибо!
Скажите, а IDA 6.1 умеет автоматизированно работать с хидерами? Вроде есть какой то функционал Ctrl+F9 по загрузке хидеров. Но фактически ничего не происходит. Что я делаю не так?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 01 декабря 2013 22:16
· Личное сообщение · #18

хидеры должны парсится и набиватся в Local Types Shift+F1

| Сообщение посчитали полезным: strelok_aka_vc

Ранг: 3.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 05 декабря 2013 00:23
· Личное сообщение · #19

прошу проверить получившийся дифф
Code:
  1. This difference file has been created by IDA Pro
  2.  
  3. CD28DACA-BDBE-481A-90AC-625C79CF234C_.ROM
  4. 000007CD: 0F E9
  5. 000007CE: 85 60
  6. 000007CF: F0 00
  7. 000007D0: 01 00
  8. 000007D2: 00 90




Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 05 декабря 2013 08:25
· Личное сообщение · #20

reversecode пишет:
вручную все набивал?

ну да

strelok_aka_vc пишет:
прошу проверить получившийся дифф

кто и на чем проверять должен? В плане правильности команды все верно.



Ранг: 3.4 (гость)
Активность: 0.010
Статус: Участник

Создано: 05 декабря 2013 21:34
· Личное сообщение · #21

Veliant пишет:
кто и на чем проверять должен? В плане правильности команды все верно.

Да, я код имел в виду. Пришлось чуток попотеть и вспомнить курс асма в Бонче )

Сегодня таки выкроил времени, разобрался с аварийным восстановлением БИОСа для HP.
Если кому то понадобится, инфа взята отсюда: http://forum.ru-board.com/topic.cgi?forum=81&topic=5300&start=580#13

В итоге прошился пропатченым прошивальщиком insyde, который плюет на подписи и зашивает ни смотря ни на что.
После перезагрузки с любой вставленной беспроводной картой - черный экран. Без карты - порядок, грузится.

Думаю, куда копать дальше



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 05 декабря 2013 22:05 · Поправил: Veliant
· Личное сообщение · #22

Может прикинуться шлангами и пропатчить тут
Code:
  1. 00000001800004AC                 js      0000000180000A0E

на jmp?
Типа у нас PCI не читается вообще =)

Add:
хотя стоит попробовать не просто опкод заменить, а заменить на jmp 00000001800009FD, чтоб эвент закрылся

Если не проканает, то придется вкуривать, что же там пишется в порты при нахождении нужных железок

add2:
я правда не даю гарантий что комп потом вообще будет грузиться




Ранг: 216.9 (наставник), 85thx
Активность: 0.310.15
Статус: Участник
X-Literator

Создано: 06 декабря 2013 17:28
· Личное сообщение · #23

Вы уверены, что дело исключительно в том, что он проверяет dev ven id? Посмотрите в сторону присутствия нужных dxe-модулей. Быть может, стоит зашить в капсулу драйвер?

-----
Харе курить веники и нюхать клей, к вам едет из Америки бог Шива, и он еврей.



 eXeL@B —› Крэки, обсуждения —› Помогите с декомпиляцией модуля проверки whitelist из Insyde BIOS
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати