Итак, мне наконец-то удалось обнаружить дыру в загрузчике 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.
Сообщение отредактировал yakk - 16.1.2009, 3:57
Внимание: если вы собираетесь делать то что здесь описано со своим телефонам - вы делаете это на свой страх и риск.. я не отвечаю за убитые вами телефоны..
Немного теории
Дыра обнаружилась в 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.
Сообщение отредактировал yakk - 16.1.2009, 3:57