воскресенье, 27 сентября 2009 г.

Сходил в Рассадник

Обнаружил кусочек прекрасного:


>Почему в отдельно взятой теме продолжается политика огораживания от ссылок на другие ресурсы (интересует ссылка на блог разработчика и ссылка на конференцию) по Qtopia?

Ссылки на другие ресурсы были запрещены согласно наших правил
и недружественной политики по отношению к нашему форуму.


Заглянул в правила:
Запрещены реферальные ссылки в сообщениях форума или подписи
пользователя на сайты (форумы) по моторолам для скачивания
контента или получения другой информации (FAQ, мануал и т.д.)
Указать ссылку на первоисточник может только модератор форума !


Ужас! Ужас! Ужас! Мы теряем деньги и пользователей! Все мотофаги уйдут к бложек и мы пойдем помиру! Ужас! Ужас! Ужас! Мы теряем деньги и пользователей! Все мотофаги уйдут к бложек и мы пойдем помиру!

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

суббота, 26 сентября 2009 г.

bh@down

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

Радио минг

пакет с радио на минг (нуи е2 вроде как) тут переложите в фид.

после установки 

mknod /dev/fmradio c 14 7

иначе работать не будет.

Сказка про линейный процессор

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

И так, жыла-была бабка, делала деревянные телефоны, типа E398, над которыми некоторые товарищи полюбили измываться, рисуя на них маркером слово "ЗУБ", заставля эти телефоны делать разную прикольную ерунду. В телефонах был процессор Neptune LTE. Потом бабка навострилась делать тонкие телефоны, уже не из дерева, а из фанеры - всякие L7, например, и делать их на процессоре Neptune LTE2.

Еще бабка решила поделать смартфоны из кирпича, но схитрила, ибо ленивая была. Взяла кусок деревянного телефона и засунула внутрь кирпичного КПК - так появились A780. А потом сделала то же самое с фанерным - так пявились минги и едва.

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

Поэтому барыга печять ставил только на такие телефоны, на которых нельзя было написать волшебное слово "ЗУБ", для чего все телефоны нужно было продавать в гондонах. А если снять его с телефона, или сделать дырку - телефон должен ломаться и не звонить. Гондоны для телефонов делал старый слепой дед и делал их фигово.

Товарищи, любившие прикольную фигню, знамо дело, нашли в гондоне дырку, сували туда маркер и стали писать слово "ЗУБ", не снимая ево с телефона, за что бабка получала от барыги по жопе.

Чтобы телефон звонил и показывал картинки, ему нужна прошивка, а чтобы хранить прошивку в телефоне, нужна флешка, которую можно читать, начинается она с адреса 0x10000000. А чтобы прошивка могла работать, ему нужна память (RAM), которыю можно быстро-бытро читать и писать, начинается она с адреса 0x14000000. Еще телефон нужно бутать и шить - для этого в телефоне есть два загрузчика - иромовый и нормальный.

Иромовый загрузчик живет внутри процессора, в памяти IROM, которую писать нельзя и которая начинается с 0x0 и юзается не обычную RAM, а свою собственную IRAM, которая начинается с 0x03F80000. Нормальный загрузчик живет в начале флеша и при работе пользуется RAM.

Как происходит обычная загрузка: при включении, управление передается по адресу 0x0 (иром).

Иром включает флешку и проверяет, есть ли на флешке бут и проверяет подпись бута, которая лежит вконце блока, в котором он прошит. Если поправить бут, то подпись не сойдется и иром уйдет в режим "бланк" - включит usb и будет ждать, пока ему по usb скажут, что делать. Суть тестпоинта: замыканием ноги, флешка выключается, иромовый бут не находит нормальный и уходит в бланк.

Если иром проверил бут, то он читает из его заголовка адрес точки входа и передает туда управление. Пример заголовка:


00000000 10 00 46 F4 00 00 00 B1 00 13 02 01 FF 00 09 84
00000010 01 13 02 FF 07 00 09 84 10 00 46 FC 10 00 00 00
00000020 10 00 EF D7 10 00 4A 9C 10 00 E8 00 10 00 F0 00
00000030 10 35 08 00 00 00 00 00 10 08 00 00 28 63 29 20


Красным выделен адрес точки входа, синим - адрес подписи бута, зеленым - адрес прошивки. Лирическое отступление: код бутлоадера заканчивается по адресу 0x10005E10, подпись начинается с адреса 0x1000E800, между ними неиспользуема область, забитая 0xFF, в которую можно совершенно спокойно записать слово "ЗУБ".

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


00080000 10 21 EF 95 00 00 00 B1 00 13 02 06 FF FF 11 52
....
000800A0 FF FF FF FF FF FF FF FF FF FF FF FF 10 33 00 00


Красным выделен адрес точки входа, зеленым - адрес заголовка подписи прошивки. Заголовок подписи прошивки:


00330000 10 33 00 10 00 00 00 B1 01 13 02 06 FF FF 11 52


Красным выделен адрес начала самой подписи.

Процесс проверки просходит так: узнаем адрес прошивки, узнаем адрес блока подписи прошивки и адрес самой подписи, читаем подпись, сверяем хеш блоков, адреса которых указанны в подписи с тем, что записан в подписи. Если все хорошо - запоминаем, что этот диапазон - доверенная область.

Затем читаем адрес точки входа - если он внутри доверенной обрасти, то передаем управление туда.
Зарытых собак тут несколько.

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

Кроме самой прошивки, в телефоне есть другие подписанные области: сам бут и CG7. И в буте и в CG7 есть области между подписью и блоком, который она закрывает.

Блок CG7 лежит по адресу 0x10350000 и начинается с подписи, которая заканчивается на 0x1035045C, но сами данные начинается с 0x10350800.

На взломанной прошивке процедура походит так:

Вместо адреса настоящей подписи, подсовывается адрес подписи другого блока (CG7 или самого бута) и вместо самой прошивки, проверяется этот блок и заносится в доверенную зону.

Вместо адреса точки входа, указывается адрес удачного куска данных в этом блоке: "E5 9F", что является тумбовой инструкцией, делающей джамп на 0x59F (59f - отрицательное число, значит джампаемся на 0x59f ^ 0x7ff = 0x260 назад) и управление передается в неподписанную область между подписью и началом блока.

В итоге загрузчик доволен собой и думает, что проверил прошивку (а проверил CG7), при чем успешно. Адрес точки входа ведет как раз в CG7, которую он проверил, а значит туда можно передвать управление. Саму прошивку никто не проверял, а значит можно там все менять.

Теперь про загрузчики и процесс обновления прошивки.

Оба загрузчика (иромовый и нормальный) имеют набор комманд, которые можно выполнять через usb. Основные три: ADDR, BIN и JUMP. ADDR указывает адрес, на который нужно положить данные, BIN шлет сами данные, JUMP передает на них управление. В качестве данных выступает так называемый "лоадер" - программа, которая умеет шить флеш. Ее подпись тоже проверяется и она позволяет стирать, шить и читать только узкий диапазон адресов (нельзя заменить бут и pds).

В иромовом буте есть тупая дыра (срыв стека), через которую можно запустить любой код, например лоадер "ramldr2", который позволяет читать и писать любые адреса. Но иромвый бут запускается только тогда, когда не видит бут на флеше (или AP криво уходит в слип).

Про PDS. pds - область в телефоне, которая не меняется при его прошивке и лежит по адресам 0x10010000 и 0x10020000 (да, два раза - одна рабочая, вторая - запасная). В начале pds записана версия, которая меняется от прошивки к прошивке (в E2 - 4015, в A1200 - 4017). PDS разбит на нумерованые файлы, некоторые из которых зашифрованы уникальным ключем телефона. К закриптованным файлам относятся разные блокировки, например привязка к сети определенного оператора. Из-за этих криптованных файлов нельзя заливать PDS от одного телефона в другой.

Именно из-за PDS у меня и произошла вся эта история: прошивка E2 поменяла его версию и стерла зашифрованные файлы. Пришлось отрывать расшифровывалке руки, чтобы она не выдергивалась.

Еще в телефоне есть зона, в которую пишутся паники. Лежит по адресу 0x10030000.

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

пятница, 25 сентября 2009 г.

Парам-пам-пам-пам-пам

Минг заработал. Vilko - бох. Ухахахаха!

вторник, 22 сентября 2009 г.

Обход RSA в BP минга

Пришлось запихнуть туда CG7 из E2 и понизить бут - тоже от E2.

CG1 (начало 0x10080000)
по оффсету 0x00 (0x10080000) точка входа в прошивку меняется на адрес
"удачных" данных в CG7 +1: 10350911
по оффсету 0x10 (0x10080010)- флаг B001FFFB


CG7 (0x10350000)
по оффсету 0x20910 (0x10350910) должно быть E5 9F C0 00 (джамп)
по оффсету 0x452 (0x10350452) помещается волшебный джамп:
48 01 68 00 47 00 10 04 00 00

CG18 (0x10330000)
по оффсету 0x0 (0x10330000) помещается адрес начала CG7: 0x10350000
это провоцирует бут проверять CG7 вместо CG1

Нужно понижать бут, так что делается только через TP. Как всегда, спасибо Vilko

ps. а теперь мерзкая прошивка ругается, что я понизил бут и все равно не грузится.

воскресенье, 20 сентября 2009 г.

Чтение-запись флеша BP

Лоадер для RAMLDR2 лежит тут, сорцы - тут, спасибо Vilko.

Читает-пишет любые адреса (в том числе PDS). Бестолковые и беременные проходят мимо - я предупредил. Через тест-поинт точно грузится, через нормальный бут - вроде бы нет.

суббота, 19 сентября 2009 г.

QSolitaire


Теперь у нас есть пасьянс!!!

четверг, 17 сентября 2009 г.

Опять про зарядку

Ежели у кого еще осталась живая батарея - сбросьте показания датчика на старом ядре.

Интересуют циферки: максимально разряженный и максимально разряженный (каждое состояние в трех вариантах: с отключенным ЗУ, с подключенным ЗУ, с подключенным USB).

У меня полный заряд - 760, когда отключаю зарядное - быстро убегает до 620,615,600. Не осиливаю, или это батарея деградировала или кто-то опять дурак...

Usb-host

Что-то там такое интересное происходит. Правда непонятно, это только на E2/E6 или везде вокруг.

среда, 16 сентября 2009 г.

воскресенье, 6 сентября 2009 г.



портировал знаменитые шарики. !С Series60 :)

лежит в фиде 

Страна должна знать своих героев


[01:21:18 PM] Provodnik: меня интересует не столько сама jffs2 сколько возможность защиты прошивки от распаковки..
[01:21:31 PM] tmp_do: Provodnik: паганый праприетарщег
[01:21:37 PM] w4tch3r: ))
[01:21:42 PM] * w4tch3r взял папкорн
[01:22:12 PM] Provodnik: ну каждый на своей стороне.. пока..
[01:22:42 PM] Provodnik: ты и сам с этого начинал, заискивающе спрашивая что и где в прошивке находится
[01:22:59 PM] tmp_do: Provodnik: мне никто не сказал
[01:23:05 PM] Provodnik: знаю
[01:24:04 PM] tmp_do: карта мтд в топике у3 есть параметры жффс тоже есть что еще надо?
[01:24:12 PM] Borman: Provodnik, пропатчь драйвер jffs2
[01:24:12 PM] Borman: чтобы сделать его несовместимым с оригинальным
[01:24:12 PM] Moxa: бга
[01:24:12 PM] Borman: тупые хомячки не догадаются
[01:24:12 PM] w4tch3r: ты жисток
[01:24:12 PM] Provodnik: Borman: можно поподробнее
[01:24:12 PM] Borman: magic константу смени
[01:24:12 PM] Borman: и все
[01:24:12 PM] Borman: монтировать его нормальный драйвер откажется
[01:24:34 PM] Provodnik: что за magic константа, где искать? я даже не туплю, я об этом ничего не знаю
[01:24:44 PM] Borman: почитай сорцы
[01:24:55 PM] Borman: ты учти, что делом ты занимаешься незаконным
[01:24:59 PM] Borman: так-то
[01:25:09 PM] Moxa: Provodnik: ты решил ирис защитеть от копирования?
[01:25:15 PM] Moxa: не правильно...
[01:25:24 PM] Tengoku: перацкие прошивки моторлэ!
[01:25:27 PM] w4tch3r: опенсорс внутри опенсорса
[01:25:30 PM] Moxa: ну или не от копиррования-не правильно написал
[01:25:31 PM] Tengoku: перацкий линупс!
[01:25:35 PM] Borman: Provodnik, ее никто не будет покупать, ты учти
[01:25:39 PM] Moxa: бггг
[01:25:41 PM] tmp_do: Provodnik: жффсдамп фсе равно покажэт кто где срал
[01:26:02 PM] Moxa: платные прошивки для а1200))))
[01:26:06 PM] w4tch3r: Tengoku, ты же не просто так пришёл, верно?
[01:26:15 PM] Moxa: Tengoku: бери бабки за готовое кутопиё на 2,6...
[01:26:23 PM] Moxa: ))
[01:26:29 PM] Moxa: буиш милианерам
[01:26:47 PM] Moxa: пинг
[01:26:47 PM] Жупел: Moxa: понг от тебя 0.551 секунд
[01:27:10 PM] Provodnik: я и не собираюсь ее продавать )
и мне пофиг что ее смогут разобрать те, кто сможет сделать дамп
я не хочу чтобы ее растащили те, кто ообще не разбирается, а преценденты уже есть, причем крайне нескромные
[01:27:26 PM] Moxa: Provodnik: например?
[01:27:59 PM] Provodnik: без имен, но в открытую попросили бету Айрис чтобы чуточку "подправить" - О_О !!! и выложить
---
[01:43:15 PM] Provodnik: Borman: magic константа это ramdownloader 3-ий?
[01:43:22 PM] Tengoku: гг
[01:43:48 PM] Tengoku: Provodnik, у тебя сорцы едра вообще сь?
[01:43:56 PM] Provodnik: нет
[01:43:59 PM] Tengoku: а кросскомпелятор?
--
[01:44:29 PM] Borman: Provodnik, у тебя какая цель в разраюотке этой прошивки?
---
[01:45:22 PM] Provodnik: нет, доделать наконец.. и свалить


для справки: Provodnik - модератор одного из разделов рассадника, Tengoku - я, остальных все и так знают.

суббота, 5 сентября 2009 г.

Сложный результат интерференции нескольких багов

Когда телефон лежит в кармане, а я с него слушаю музыку - он моргает подсветкой при смене треков в плеере. Во-первых, мне это не нравится, во-вторый - это совершенно лишний раз жрет батарейку.

Первое и самое интересное - почему подсветка вообще дергается при смене трека? Потомучто есть такая штука, как power constraints, которая регулирует, насколько далеко устройству можно уходить в сберегающих режимах. Вполне естественно, что телефон не может играть музыку, когда он находится в слипе.

Исходя из этого здравого рассуждения, медиасервер запрещает уходить в слип, когда проигрывает что-то. Когда проигрываение останавливается, плеер снимает разрешение.

И тут закрадываются внеземная логика работников тролльтех: при смене power constraint, нужно включить подсветку. При чем это делает кто-то аж изнутри QtGui, а код там загадочен.

Делаю ход конем: режим меняется не тогда, когда меняется состояние плеера "играю-неиграю", а через две секунды. Проверяю: не работает. То есть работает, но подсветка все равно мигает на смене трека. Для проверки, убираю из медиасервера управление питанием - моргает. Магия... Стоп, магии же не бывает.

Смотрю код медиадвижка, благо багов там обычно есть: он питание вообще не трогает. Смотрю код плеера и вижу чудеса: плеер запрещает выключать подсветку, когда проигрывает видео. Это меня не касается - видео я не смотрю. Для проверки, убираю из плеера код управление питанием - не моргает. Оппа, "связистор опять выловил что-то за хвост из болота", как сказал тридемоделятор azcapone.

Судя по коду, в плеере есть некий "медиавиджет", который создается при наличии видео. Если виджет есть - питание трогаем, если нету - не трогаем. Но виджета же нету, почему тогда мограет? Нахожу замечательный факт:


notifier = new QMediaControlNotifier( QMediaVideoControl::name(), this );

connect( notifier, SIGNAL(valid()), this, SLOT(activateVideo()) );
connect( notifier, SIGNAL(invalid()), this, SLOT(deactivateVideo()) );


при чем в deactivateVideo() дергается управление питанием без проверки виджета.

Опять патч в одну строку, а началось все с того, что я хотел замерить, сколько телефон живет от одного заряда батареи.

четверг, 3 сентября 2009 г.

Зарядка батареи

Заряжает до положенного напряжения. Вольтметр показывает три с копейками вольта, заряженная через openezx батарея дальше другим телефоном не заряжается.

вторник, 1 сентября 2009 г.

Про минг

Плохо без отлаженного инструментария.

Итоги тестирования: баги, тысячи их

После более чем недели издевательств, ubifs все-таки упала. По этому поводу я решил подвести итоги тестирования. Если кратко - баги везде, но фронт работ обозрим.

* зарядка батареи. работает, но как-то очень хитро - или не стартует когда нада, или не до того тока заряжает. непонятное явление. у меня не хватило одной зарядки более чем на 12 часов почти постоянного нахождения в слипе. правда, это был не дип-слип, как в 2.4, а обычный - надо свериться с мануалом по процессору, вдруг так и надо. нарою вольтметр и буду сверять датчики и регистры с суровой реальностью
* звук. с перключениями звука фигня довольно понятная - перед переключением в режим звонка, надо закрывать в плеере устройство и все будет хорошо. сейчас при прослушивании музыки через уши, после снятия трубки нифига не слышно
* мерзенький bp иногда не опознается при выходе из слипа. наверное нужно более точно подобрать задержки
* в прошивке по-дефолту отключен тач. ну это все знают
* а на едва по-дефолту не пашет клавиатурный ввод, потомучто нет двух волшебных файликов
* автоматическое редактирование defaultbuttons.conf через postinst не срабатывает
* в прошивке по-дефолту стартует apmd, который тоже роняет аппарт в слип
* самое противное забыл: ядро валится в упс и виснет при перезагрузке