pb-301+ frimware hack

29.10.2009

Intro.

Лидером на рынке книг второго эшелона является Pocketbook. После его объединения с Нетрониксом жизнь конкурентов должна была стать намного хуже, так как фактически они все являются клонами с одного завода. Собственно сами клоны - Orsio, FRBookt, Explay, а так же Cybook. Хуже всех дела обстоят у Explay, ибо мало того, что их клон хуже всего в аппаратном плане, так и разработкой ПО почти никто не занимается. Любой из пользователей книг-аутсайдеров, постоянно задавался вопросом - а раз уж мы все одинаковые, то почему бы не запустить прошивку от PB на его книге? Естественно, представители PB заявляют о том что это невозможно, рассказывая о непобедимой защите прошивки и грозя законом, что довольно лицемерно видеть это от людей, зажавших исходники ОС, тем самым нарушив лицензию. О том, что собой представляет прошивка PB и как она защищена, рассказано ниже.

Chapter #0. Как же она все таки защищена?

Все очень просто. Прошивка защищена в несколько этапов. Первый это uboot. С не родным загрузчиком запустить прошивки не удалось вообще. Система грузится, но сразу стартует внутренняя утилита обновления ПО, и она перегружает книгу. Более того, родной загрузчик умеет заливать файлы только через USB, и вот не задача - ни на одном из клонов, не смотря на идентичность микросхемы USB, оный не работал вообще. Таким образом, с подмененным uboot работать вообще невозможно. Второй момент это серийник книги. Где он спрятан и как с ним бороться будет рассказано ниже. Таким образом, для того что бы запустить прошивку нам нужно - выдрать ядро, rootfs, апликейшен, загрузчик и серийник. ну, пусть будут еще и вейформы.

Chapter #1. Firmware update.

Сначала рассмотрим содержимое файла обновления прошивки, а именно SWUPDATE.BIN. Не трудно заметить, что в нем находятся 3 файла (дадим им аутентичные имена) - kernel.img, rootfs.img, app.img. Находящиеся соответственно по смещениям 0x400, 0xc0400, 0x4b0400. Так же в заголовке файла указаны их соответствующие размеры со смещений 0x10c, 0x11c,0x12c. Распаковывая их, видим, что это образы ядра, рутфс и приложения. Важно заметить, что в файле обновления нет обновления загрузчика.

Chapter #2. uboot.

Так как загрузчик находится только во дном месте, а именно в самой книге (хотя, возможно, в каких-то обновлениях ПО этот загрузчик все-таки мог находится в файле обновления), пришлось купить родную PB книгу, и слить его через консоль (лично я просто скопировал кусок флеша через nand read/write, а потом забрал его используя dd в загруженной системе. Правда, по-моему, именно для этого пришлось грузить свое ядро со своим rootfs.)

Chapter #3. Serial Number.

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

На книге есть i2c flash, который был сразу проверен. К сожалению, в нем ничего не оказалось, кроме надписи, что-то вроде «11 Oct» текстом. После этого, натравив IDA (дизасемблер), я высяснил, что определение серийника как то связано с экраном. Например, если не загружать драйвер экрана, и запустить апдейтер, то серийник не определялся. Как возможный вариант, их апликейшен мог быть привязан к номеру Экрана, и тогда бы пришлось делать драйвер-прослойку. Наивно полагая, что в их драйвер добавлен новый функционал, был сделан драйвер-сниффер, который записывал все обращения к экрану и их содержимое. А дальше все просто: как оказалось - серийник находится во внутренней флеше экрана, предназначеной для хранения вейформ. В отличие от клонов, у PB эта флеш в 2 раза больше, и серийник лежит по адресу 0x1f0000, как раз во второй дополнительно половине. Если же переложить серийник в 0x0f0000, то при чтении из несуществующего адреса 0x1f0000 как раз считается то, что нужно. Таким образом, просто скопировав вейформы, и добавив в них серийник, мы получаем работающую книгу.

Chapter #4. Собираем.

Chapter #5. О проблемах.

Теперь о проблемах. К сожалению, на неродных книгах прошивка PB не смогла договориться с USB драйвером. более того, книги ORSIO и Explay продолжали зависать, как и зависали на своих честных прошивках, что говорит о том, что эти зависания вызвана аппаратными косяками. Поэтому, пришлось удалить драйвера USB и их загрузку во время работы книги. Без них прошивка работает без проблем и не виснет.

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

Chapter #6. Заключение.

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

В приложении серийник, прошивка, молоток, загрузчик и много чего еще интересного.

P.S С вопросами и предложениями обращайтесь sartakov@ksyslabs.org.

P.P.S Целиком сделать апдейтер не могу по морально-этическим соображениям.

P.P.P.S Пожалуйста, ставьте копирайты. Спасибо.

P.P.P.P.S Наверно стоит предупредить - за повреждение устройства и т.д. т.п. автор статьи ответственности не несет, делается на ваш собственный страх и риск.