yakk
28.12.2008, 13:10
Итак, мне наконец-то удалось обнаружить дыру в загрузчике motomagx телефонов, которая позволяет запустить телефон с неподписанной AP-прошивкой
Внимание: если вы собираетесь делать то что здесь описано со своим телефонам - вы делаете это на свой страх и риск.. я не отвечаю за убитые вами телефоны.. Немного теории
Дыра обнаружилась в irom-загрузчике BP. При включении телефона бут (mbm AP-части) первым делом загружает в оперативную память bp-loader и передаёт BP команду выполнения bp-loader. irom-загрузчик BP проверяет подпись bp-loader и, если с ней всё в порядке - передает исполнение bp-loader'у. Важный момент - непосредственно перед проверкой подписи irom загрузчик BP проверяет наличие в заголовке bp-loader указателя на некоторую структуру и если этот указатель есть - разбирает эту структуру.. Эта структура, помимо заголовка, содержит набор адресов и значений; irom-загрузчик записывает в каждый из адресов (если адреса по его мнению корректные) соответствующее значение.. Таким образом есть возможность заполнить эту структуру самостоятельно и переложить на BP работу по "отпатчиванию" бута AP (бут AP в данный момент загружен в оперативку, его подпись уже проверена ранее и он ожидает ответ BP, что bp-loader прошел проверку подписи).. При этом саму структуру можно расположить за подписью и в ней же описать патч приводящий заголовок bp-loader к исходному состоянию, чтобы он нормально прошел проверку подписи..
Необходимые дополнения в bp-loader:
Размещаем за подписью bp-loader структуру следующего формата:
первые четыре байта от начала структуры - 0xB17219E9 - константа, по которой проверяется корректность структуры.
следующие четыре байта - размер структуры (должен быть кратен восьми, но не больше 256).
Дальше следует список адресов и значений (четыре байта на адрес и четыре - на значение).
В заголовке bp-loader необходимо поставить указатель на эту структуру, (четыре байта по адресу +0x14 от начала bp-loader) и указатель на этот указатель
(по адресу +0x0c от начала bp-loader).. Соответственно чтобы bp-loader прошел проверку подписи - нужно будет вернуть заголовок к изначальному виду (обычно в данных полях нули) и поэтому первыми патчами описанными в структуре - делается именно запись нулей в данные поля.. Дальше следуют патчи которые нужно применить к ап-буту..
После ряда экспериментов я получил минимальный набор патчей бута которые приводят к тому что телефон соглашается работать с неподписанной прошивкой для бутов 06.a3 (e8) и a3.cf (v8) - телефоны которые "дожили" до победы..
Патчи зависят от версии бута, при установке неправильных патчей, или правильных, но не соответствущих версии бута - получаете труп. У меня уже лежит убитый z6 - на нём пробовались ранние версии патчей, в которых я не учёл некоторых проверок в буте, у dimichxp - убитый е8. Получится ли восстановить эти телефоны - большой вопрос..
Ну, основные вещи вроде все написал, прилагаю полученные буты, которые нужно просто прошить в телефон, если версия бута Вашего телефона совпадает с одной из указанных.. Хотя даже если совпадает - подумайте лишний раз насколько Вам всё это нужно ))
если кто возьмется портировать это на другие версии бутов/телефоны - имейте в виду что нужно быть предельно внимательным и перепроверять всё что делаете, попытка скорее всего будет только одна!!!a3.cc (z6) - проверил на своём восстановленном z6 - всё работает, только ругается на security-версии кодовых груп, если их затирать. т.е. можно просто их сохранять.. хотя я поправил в cdt требование не проверять rootfs и лэнг - лэнг пересобранный и ничем не дополненный, rootfs - не пересобирал, просто стер подпись и security-версию.. если не править cdt - валится с ошибками на проверке версий, после исправления cdt - нормально работает..
ps: патч для бута 06.2b (zn5) - пока находится в стадии тестирования,
не гарантируется, что его применение приведет к обходу RSA, но будучи прошитим на телефон с соответствующей версией бута - трупов быть не должно.. (чуть инфы для интересующихся - на новых версиях патчей не делается подмены инженерности, т.е. патчатся только собственно функции проверки подписей)..
06.2b (zn5).
pps: добавил патч для бута 06.a9 (e8) - пока для тестирования, хотя в принципе я его проверил - телефон после установки патча работал с неподписанными группами. опять же следим за версиями кодовых групп и не зашиваем всё без разбору..
добавил патч для бута 06.2a (u9) - спасибо за тестирование andrey_moto.
hobbit19
28.12.2008, 13:16
спасибо
молодцы.
MOTOROKR
28.12.2008, 13:20
Очень круто. Респект
hobbit19
28.12.2008, 13:32
прошился е8 жив )
yakk - в зеленую группу
а dimichxp неплохобы новый е8 подарить.
Ilya Petrov
28.12.2008, 13:43
это офигенно.
Arch0n
28.12.2008, 13:45
Отличная работа.
Сочувствую yakk и dimichxp.. Надеюсь, удастся оживить...
Nicron
28.12.2008, 14:12
Оо Пацаны Красавы
Chacha_Ivanov
28.12.2008, 15:06
Жаль Z6 в этом списке нет( Но все равно молодцы)
hobbit19
28.12.2008, 15:17
Цитата
Жаль Z6 в этом списке нет( Но все равно молодцы)
так портируй патч на з6 )
Добавлено позже (28.12.2008, 18:37):Цитата
Дальше следуют патчи которые нужно применить к ап-буту..
yakk можна чуть подробнее про эти патчи.
yakk
28.12.2008, 16:07
Цитата(hobbit19 @ 28.12.2008, 17:17)
yakk можна чуть подробнее про эти патчи.
попробую (не факт что то как делаю я проще всего -- но оно работает):
1. Функция hab_su_type, или get_su_type - кто смотрел эльф на LTE - поймет - проверка инженерности телфона.. начало выглядит так (адреса корректны для бута 06.a3):
Код
ROM:90019F04 88 48 LDR R0, =0x5001C810
ROM:90019F06 01 68 LDR R1, [R0]
ROM:90019F08 49 07 LSLS R1, R1, #0x1D
ROM:90019F0A 00 68 LDR R0, [R0]
ROM:90019F0C C9 0F LSRS R1, R1, #0x1F
Заменяется кодом:
Код
MOVS R0, #1
BX LR
2. Бут проверяет не меняется ли инженерность в процессе работы (именно на этом с z6 всё закончилось..)
не знаю как проще объяснить, в общем вот в этом куске нужно убрать переход
Код
ROM:90011994 68 89 LDRH R0, [R5,#0xA]
ROM:90011996 8C 49 LDR R1, =0xA55A
ROM:90011998 88 42 CMP R0, R1
ROM:9001199A 01 D1 BNE loc_900119A0
ROM:9001199C 6C 81 STRH R4, [R5,#0xA]
переход "BNE loc_900119A0" я заменяю безобидным мусором типа
Код
MOVS R0, #1
MOVS R0, #1
3. и 4. функции проверки подписи (привожу фрагменты начала)..
Код
ROM:90016912 F3 B5 PUSH {R0,R1,R4-R7,LR}
ROM:90016914 7D 22 MOVS R2, #0x7D
ROM:90016916 85 B0 SUB SP, SP, #0x14
ROM:90016918 F0 24 MOVS R4, #0xF0
ROM:9001691A 07 46 MOV R7, R0
и
Код
ROM:90016A12 F8 B5 PUSH {R3-R7,LR}
ROM:90016A14 43 18 ADDS R3, R0, R1
ROM:90016A16 01 21 MOVS R1, #1
ROM:90016A18 4D 4A LDR R2, =0x9001C8A8
ROM:90016A1A 00 25 MOVS R5, #0
ROM:90016A1C C9 03 LSLS R1, R1, #0xF
ROM:90016A1E 8B 42 CMP R3, R1
Заменяются кодом
Код
MOVS R0, #0x1F
LSLS R0, R0, #0x04
BX LR
что означает успешную проверку для инженерного телфона..
скорее всего можно обойтись только 3 и 4 патчем, но без первых двух нужно будет исправлять так чтобы была успешная проверка для серийного телефона (скорее всего
) у меня прямо сейчас нет желания проверять..
ну и вся эта ерунда прописана в bp-loader - т.е. cg32 прошивок, смотрите внимательно в чём различия - и следите за последовательностью байтов, т.к. у AP и BP разная endianness - там все байты перемешаны..
ps: в е8 еще патчится строка "Bootloader".. (если кто будет портировать - рекомендую начать именно с этого, перед тем как патчить непосредственно код бута - поможет усвоить правильную последовательность байтов
только не забывать про то что в заголовок bp-loader нужно возвращать нули, ну и длину блока с патчами соответственно менять если что)
telnet
28.12.2008, 16:41
Гениально! Жаль у меня на МОТОМЕДЖИКе нет телефона.
Вдвойне приятно-что наши сделали-а не китайцы какие ...
Цитата
так портируй патч на з6 )
а инструкцию можно как портировать?
jmoncayo
28.12.2008, 16:56
would anyone please translate this to englsih? translate.google just sucks.
thanks
MOTOROKR
28.12.2008, 17:05
jmoncayo, they made BP to patch AP boot on phone's startup using some weakness in pointer structure which BP parses before AP signature is checked. So any signature is now determined by phone as valid and RSA is hacked. Two patched boots (for E8 and V8) are now available, please be careful and don't flash them to incompatible phone model or boot version otherwise your phone won't work anymore.
are_ed
28.12.2008, 17:27
that means we can flash any firmware without problem or else...or phone will not lock
DmT
28.12.2008, 18:36
Можно я тут встряну в разговор.
Цитата(hobbit19 @ Сегодня, 20:17)
так портируй патч на з6 )
А ещё лучше, чтоб два и более человека, абсолютно независимо друг от друга, с одинаковыми исходными данными, проделали эту работу.
Если результаты сошлись до байта, значит можно шить с большой вероятностью на успех.
Это займет больше времени, но зато погибнет меньшее количество телефонов.
GandjaFuzz
28.12.2008, 19:14
ребята, мои поздравления!
молодцы )
Джуманджи
28.12.2008, 19:22
Молодцы парни! (= Уже и рейтинг повышать нельзя сегодня.. Объясните мне, как заядлому "п2кашнику" что дает
Цитата(yakk @ Сегодня, 16:10)
неподписанная AP-прошивка
?
MIG~
28.12.2008, 21:32
Цитата(Джуманджи @ 28.12.2008, 22:22)
Уже и рейтинг повышать нельзя сегодня..
Добавь разработки на платформе POG дуалбут , самые сложные части ельфов , снятие ограничения с MP3 битрейт , порты нескольких самых сложных патчей и что у нас yakk получит ?
Лучший разработчик
hobbit19
28.12.2008, 23:13
Abram
29.12.2008, 0:45
Z6, A3.CC. Труп.
yakk, симптомы те же, что у тебя с первой попыткой. Сейчас будет ТП, а там посмотрим.